├── .gitignore ├── .travis.yml ├── README.md ├── humans.json ├── index.js ├── lib └── doc.js ├── package.json ├── templates └── readme.hbs └── test └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .idea 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - '4' 5 | - '0.12' 6 | - '0.10' 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # npm-humans 2 | 3 | The humans behind npm, Inc 4 | 5 | ![Andrea Zodrow](https://s.gravatar.com/avatar/6f4e9122f79e3efb269101b1bb23850e?size=512&default=retro) 6 | 7 | ## Andrea Zodrow 8 | 9 | - [npmjs.com/~amzod](https://npmjs.com/~amzod) 10 | - [github.com/amzod](https://github.com/amzod) 11 | - [twitter.com/am_zod](https://twitter.com/am_zod) 12 | 13 | --- 14 | ![Jerry Gabra](https://s.gravatar.com/avatar/a1893c8e2070cf6affa23475d6b697ce?size=512&default=retro) 15 | 16 | ## Jerry Gabra 17 | 18 | - [npmjs.com/~gabra](https://npmjs.com/~gabra) 19 | - [github.com/gabra](https://github.com/gabra) 20 | - [twitter.com/jerrygabra](https://twitter.com/jerrygabra) 21 | 22 | --- 23 | ![Andrew Goode](https://s.gravatar.com/avatar/c318f3bf2571b30a9932ecc730e0788b?size=512&default=retro) 24 | 25 | ## Andrew Goode 26 | 27 | - [npmjs.com/~nexdrew](https://npmjs.com/~nexdrew) 28 | - [github.com/nexdrew](https://github.com/nexdrew) 29 | - [twitter.com/nexdrew](https://twitter.com/nexdrew) 30 | 31 | --- 32 | ![ashley williams](https://s.gravatar.com/avatar/9f92576ec4100c01f10a3dd423cec873?size=512&default=retro) 33 | 34 | ## ashley williams 35 | 36 | - [npmjs.com/~ag_dubs](https://npmjs.com/~ag_dubs) 37 | - [github.com/ashleygwilliams](https://github.com/ashleygwilliams) 38 | - [twitter.com/ag_dubs](https://twitter.com/ag_dubs) 39 | 40 | --- 41 | ![Ben Coe](https://s.gravatar.com/avatar/463ec992a0ae0613c917f3513aadac23?size=512&default=retro) 42 | 43 | ## Ben Coe 44 | 45 | - [npmjs.com/~bcoe](https://npmjs.com/~bcoe) 46 | - [github.com/bcoe](https://github.com/bcoe) 47 | - [twitter.com/BenjaminCoe](https://twitter.com/BenjaminCoe) 48 | 49 | --- 50 | ![Chris Dickinson](https://s.gravatar.com/avatar/f67fcc0fa4da8cb7ad71e0b709127bdd?size=512&default=retro) 51 | 52 | ## Chris Dickinson 53 | 54 | - [npmjs.com/~chrisdickinson](https://npmjs.com/~chrisdickinson) 55 | - [github.com/chrisdickinson](https://github.com/chrisdickinson) 56 | - [twitter.com/isntitvacant](https://twitter.com/isntitvacant) 57 | 58 | --- 59 | ![CJ Silverio](https://s.gravatar.com/avatar/d4d41847af095b91aa8ed1d1145f5e03?size=512&default=retro) 60 | 61 | ## CJ Silverio 62 | 63 | - [npmjs.com/~ceejbot](https://npmjs.com/~ceejbot) 64 | - [github.com/ceejbot](https://github.com/ceejbot) 65 | - [twitter.com/ceejbot](https://twitter.com/ceejbot) 66 | 67 | --- 68 | ![Emily Ross-Brown](https://s.gravatar.com/avatar/8437920cd04156e65d66c71e1b3ed3a7?size=512&default=retro) 69 | 70 | ## Emily Ross-Brown 71 | 72 | - [twitter.com/EmilyUna65](https://twitter.com/EmilyUna65) 73 | 74 | --- 75 | ![Ernie Salazar](https://s.gravatar.com/avatar/98014649279dcef04f67ee307e3b9597?size=512&default=retro) 76 | 77 | ## Ernie Salazar 78 | 79 | - [npmjs.com/~ehsalazar](https://npmjs.com/~ehsalazar) 80 | - [github.com/ehsalazar](https://github.com/ehsalazar) 81 | - [twitter.com/ehsalazar](https://twitter.com/ehsalazar) 82 | 83 | --- 84 | ![Isaac Schlueter](https://s.gravatar.com/avatar/ddb0fb1047efe1e5cd05649744edd90d?size=512&default=retro) 85 | 86 | ## Isaac Schlueter 87 | 88 | - [npmjs.com/~isaacs](https://npmjs.com/~isaacs) 89 | - [github.com/isaacs](https://github.com/isaacs) 90 | - [twitter.com/izs](https://twitter.com/izs) 91 | 92 | --- 93 | ![Jeff Lembeck](https://s.gravatar.com/avatar/fbde8f880f6cf850936f435d3e6222f0?size=512&default=retro) 94 | 95 | ## Jeff Lembeck 96 | 97 | - [npmjs.com/~jlembeck](https://npmjs.com/~jlembeck) 98 | - [github.com/jefflembeck](https://github.com/jefflembeck) 99 | - [twitter.com/jefflembeck](https://twitter.com/jefflembeck) 100 | 101 | --- 102 | ![Jonathan E Cowperthwait](https://s.gravatar.com/avatar/2b1aad19f4ce5b485acc74dea754b919?size=512&default=retro) 103 | 104 | ## Jonathan E Cowperthwait 105 | 106 | - [npmjs.com/~jec](https://npmjs.com/~jec) 107 | - [github.com/cowperthwait](https://github.com/cowperthwait) 108 | - [twitter.com/cowperthwait](https://twitter.com/cowperthwait) 109 | 110 | --- 111 | ![Kat Marchán](https://s.gravatar.com/avatar/768592911aab8695ca2d7bf0b8c889dd?size=512&default=retro) 112 | 113 | ## Kat Marchán 114 | 115 | - [npmjs.com/~zkat](https://npmjs.com/~zkat) 116 | - [github.com/zkat](https://github.com/zkat) 117 | - [twitter.com/maybekatz](https://twitter.com/maybekatz) 118 | 119 | --- 120 | ![Kiera Manion-Fischer](https://s.gravatar.com/avatar/998e72c5f7f022c94566a7691c751f98?size=512&default=retro) 121 | 122 | ## Kiera Manion-Fischer 123 | 124 | - [npmjs.com/~kmanion](https://npmjs.com/~kmanion) 125 | - [github.com/kmanion](https://github.com/kmanion) 126 | - [twitter.com/KManion](https://twitter.com/KManion) 127 | 128 | --- 129 | ![Laurie Voss](https://s.gravatar.com/avatar/82e25a6a2c3de354135cf4ff0348ff74?size=512&default=retro) 130 | 131 | ## Laurie Voss 132 | 133 | - [npmjs.com/~seldo](https://npmjs.com/~seldo) 134 | - [github.com/seldo](https://github.com/seldo) 135 | - [twitter.com/seldo](https://twitter.com/seldo) 136 | 137 | --- 138 | ![Maciej Małecki](https://s.gravatar.com/avatar/29b404e8480fa29174d150f87eab50cd?size=512&default=retro) 139 | 140 | ## Maciej Małecki 141 | 142 | - [npmjs.com/~mmalecki](https://npmjs.com/~mmalecki) 143 | - [github.com/mmalecki](https://github.com/mmalecki) 144 | - [twitter.com/maciejmalecki](https://twitter.com/maciejmalecki) 145 | 146 | --- 147 | ![Raquel Vélez](https://s.gravatar.com/avatar/8983147be8e3bf0dec0ff9d20bd156f3?size=512&default=retro) 148 | 149 | ## Raquel Vélez 150 | 151 | - [npmjs.com/~rockbot](https://npmjs.com/~rockbot) 152 | - [github.com/rockbot](https://github.com/rockbot) 153 | - [twitter.com/rockbot](https://twitter.com/rockbot) 154 | 155 | --- 156 | ![Rebecca Turner](https://s.gravatar.com/avatar/11560e1084a557537a4397785b580e53?size=512&default=retro) 157 | 158 | ## Rebecca Turner 159 | 160 | - [npmjs.com/~iarna](https://npmjs.com/~iarna) 161 | - [github.com/iarna](https://github.com/iarna) 162 | - [twitter.com/ReBeccaOrg](https://twitter.com/ReBeccaOrg) 163 | 164 | --- 165 | ![Ryan Day](https://s.gravatar.com/avatar/1690146e2ba9215eedc67d655e17a772?size=512&default=retro) 166 | 167 | ## Ryan Day 168 | 169 | - [npmjs.com/~soldair](https://npmjs.com/~soldair) 170 | - [github.com/soldair](https://github.com/soldair) 171 | - [twitter.com/soldair](https://twitter.com/soldair) 172 | 173 | --- 174 | ![Stephanie Snopek](https://s.gravatar.com/avatar/57001f7e524a3a41e642c4d94f3a1024?size=512&default=retro) 175 | 176 | ## Stephanie Snopek 177 | 178 | - [npmjs.com/~snopeks](https://npmjs.com/~snopeks) 179 | - [github.com/snopeks](https://github.com/snopeks) 180 | - [twitter.com/StephSnopek](https://twitter.com/StephSnopek) 181 | 182 | --- 183 | -------------------------------------------------------------------------------- /humans.json: -------------------------------------------------------------------------------- 1 | { 2 | "amzod": { 3 | "email": "andrea@npmjs.com", 4 | "github": "amzod", 5 | "name": "Andrea Zodrow", 6 | "twitter": "am_zod", 7 | "username": "amzod" 8 | }, 9 | "gabra": { 10 | "email": "jerry@npmjs.com", 11 | "github": "gabra", 12 | "name": "Jerry Gabra", 13 | "twitter": "jerrygabra", 14 | "username": "gabra" 15 | }, 16 | "nexdrew": { 17 | "email": "andrew@npmjs.com", 18 | "github": "nexdrew", 19 | "name": "Andrew Goode", 20 | "twitter": "nexdrew", 21 | "username": "nexdrew" 22 | }, 23 | "ag_dubs": { 24 | "email": "ashley@npmjs.com", 25 | "github": "ashleygwilliams", 26 | "name": "ashley williams", 27 | "twitter": "ag_dubs", 28 | "username": "ag_dubs" 29 | }, 30 | "bcoe": { 31 | "email": "ben@npmjs.com", 32 | "github": "bcoe", 33 | "name": "Ben Coe", 34 | "twitter": "BenjaminCoe", 35 | "username": "bcoe" 36 | }, 37 | "chrisdickinson": { 38 | "email": "chris@npmjs.com", 39 | "github": "chrisdickinson", 40 | "name": "Chris Dickinson", 41 | "username": "chrisdickinson", 42 | "twitter": "isntitvacant" 43 | }, 44 | "ceejbot": { 45 | "email": "ceej@npmjs.com", 46 | "github": "ceejbot", 47 | "name": "CJ Silverio", 48 | "username": "ceejbot", 49 | "twitter": "ceejbot" 50 | }, 51 | "emilyrossbrown": { 52 | "email": "emily@npmjs.com", 53 | "github": "", 54 | "name": "Emily Ross-Brown", 55 | "username": "", 56 | "twitter": "EmilyUna65" 57 | }, 58 | "ehsalazar": { 59 | "email": "ernie@npmjs.com", 60 | "github": "ehsalazar", 61 | "name": "Ernie Salazar", 62 | "username": "ehsalazar", 63 | "twitter": "ehsalazar" 64 | }, 65 | "isaacs": { 66 | "email": "isaacs@npmjs.com", 67 | "github": "isaacs", 68 | "name": "Isaac Schlueter", 69 | "username": "isaacs", 70 | "twitter": "izs" 71 | }, 72 | "jlembeck": { 73 | "email": "jeff@npmjs.com", 74 | "github": "jefflembeck", 75 | "name": "Jeff Lembeck", 76 | "username": "jlembeck", 77 | "twitter": "jefflembeck" 78 | }, 79 | "jec": { 80 | "email": "jec@npmjs.com", 81 | "github": "cowperthwait", 82 | "name": "Jonathan E Cowperthwait", 83 | "username": "jec", 84 | "twitter": "cowperthwait" 85 | }, 86 | "zkat": { 87 | "email": "kat@npmjs.com", 88 | "github": "zkat", 89 | "name": "Kat Marchán", 90 | "username": "zkat", 91 | "twitter": "maybekatz" 92 | }, 93 | "kmanion": { 94 | "email": "kiera@npmjs.com", 95 | "github": "kmanion", 96 | "name": "Kiera Manion-Fischer", 97 | "username": "kmanion", 98 | "twitter": "KManion" 99 | }, 100 | "seldo": { 101 | "email": "laurie@npmjs.com", 102 | "github": "seldo", 103 | "name": "Laurie Voss", 104 | "username": "seldo", 105 | "twitter": "seldo" 106 | }, 107 | "mmalecki": { 108 | "email": "maciej@npmjs.com", 109 | "github": "mmalecki", 110 | "name": "Maciej Małecki", 111 | "username": "mmalecki", 112 | "twitter": "maciejmalecki" 113 | }, 114 | "rockbot": { 115 | "email": "raquel@npmjs.com", 116 | "github": "rockbot", 117 | "name": "Raquel Vélez", 118 | "username": "rockbot", 119 | "twitter": "rockbot" 120 | }, 121 | "iarna": { 122 | "email": "rebecca@npmjs.com", 123 | "github": "iarna", 124 | "username": "iarna", 125 | "name": "Rebecca Turner", 126 | "twitter": "ReBeccaOrg" 127 | }, 128 | "soldair": { 129 | "email": "ryan@npmjs.com", 130 | "github": "soldair", 131 | "name": "Ryan Day", 132 | "username": "soldair", 133 | "twitter": "soldair" 134 | }, 135 | "snopeks": { 136 | "email": "stephanie@npmjs.com", 137 | "github": "snopeks", 138 | "name": "Stephanie Snopek", 139 | "username": "snopeks", 140 | "twitter": "StephSnopek" 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var gravatar = require('gravatar') 2 | var humans = module.exports = require('./humans.json') 3 | 4 | Object.keys(humans).forEach(function(name){ 5 | var human = humans[name] 6 | human.avatar = gravatar.url(human.email, {size: '512', default: 'retro'}, true) 7 | }) 8 | -------------------------------------------------------------------------------- /lib/doc.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs') 2 | var path = require('path') 3 | var handlebars = require('handlebars') 4 | var template = handlebars.compile( 5 | fs.readFileSync(path.resolve(process.cwd(), 'templates/readme.hbs'), 'utf-8') 6 | ) 7 | 8 | var context = { 9 | package: require('../package.json'), 10 | humans: require('../index.js') 11 | } 12 | 13 | process.stdout.write(template(context)) 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "npm-humans", 3 | "version": "3.2.0", 4 | "description": "The humans behind npm, Inc", 5 | "main": "index.js", 6 | "scripts": { 7 | "doc": "node lib/doc.js > README.md", 8 | "build": "npm run doc", 9 | "prepublish": "npm run build", 10 | "test": "tap test" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/npm/humans" 15 | }, 16 | "keywords": [ 17 | "npm", 18 | "humans" 19 | ], 20 | "author": "Zeke Sikelianos (http://zeke.sikelianos.com/)", 21 | "license": "ISC", 22 | "bugs": { 23 | "url": "https://github.com/npm/humans/issues" 24 | }, 25 | "homepage": "https://github.com/npm/humans", 26 | "dependencies": { 27 | "gravatar": "^1.4.0" 28 | }, 29 | "devDependencies": { 30 | "handlebars": "^3.0.3", 31 | "tap": "^1.2.1" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /templates/readme.hbs: -------------------------------------------------------------------------------- 1 | # {{package.name}} 2 | 3 | {{package.description}} 4 | 5 | {{#each humans}} 6 | ![{{name}}]({{{avatar}}}) 7 | 8 | ## {{name}} 9 | 10 | {{#if username}} 11 | - [npmjs.com/~{{username}}](https://npmjs.com/~{{username}}) 12 | {{/if}} 13 | {{#if github}} 14 | - [github.com/{{github}}](https://github.com/{{github}}) 15 | {{/if}} 16 | {{#if twitter}} 17 | - [twitter.com/{{twitter}}](https://twitter.com/{{twitter}}) 18 | {{/if}} 19 | 20 | --- 21 | {{/each}} 22 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var humans = require("..") 2 | var test = require("tap").test 3 | 4 | test("humans", function (t) { 5 | t.ok((typeof humans === "object"), "humans are objects") 6 | t.equal(Object.keys(humans).length, 20, "there are 20 humans") 7 | t.ok(humans.ceejbot, "one of them is ceejbot") 8 | t.equal(humans.ceejbot.email, "ceej@npmjs.com", "ceejbot's email address is ceej@npmjs.com") 9 | t.equal(humans.ceejbot.avatar, "https://s.gravatar.com/avatar/d4d41847af095b91aa8ed1d1145f5e03?size=512&default=retro", "ceejbot has an HTTPS gravatar") 10 | t.end() 11 | }) 12 | --------------------------------------------------------------------------------