Skip to content

Instantly share code, notes, and snippets.

@steowens
Created February 10, 2014 20:35
Show Gist options
  • Save steowens/8923688 to your computer and use it in GitHub Desktop.
Save steowens/8923688 to your computer and use it in GitHub Desktop.
npm-debug.log failure installing ldapjs
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node',
1 verbose cli '/usr/local/bin/npm',
1 verbose cli 'install',
1 verbose cli 'ldapjs' ]
2 info using [email protected]
3 info using [email protected]
4 warn package.json [email protected] path is also the name of a node core module.
5 verbose readDependencies using package.json deps
6 verbose cache add [ 'ldapjs', null ]
7 verbose cache add name=undefined spec="ldapjs" args=["ldapjs",null]
8 verbose parsed url { protocol: null,
8 verbose parsed url slashes: null,
8 verbose parsed url auth: null,
8 verbose parsed url host: null,
8 verbose parsed url port: null,
8 verbose parsed url hostname: null,
8 verbose parsed url hash: null,
8 verbose parsed url search: null,
8 verbose parsed url query: null,
8 verbose parsed url pathname: 'ldapjs',
8 verbose parsed url path: 'ldapjs',
8 verbose parsed url href: 'ldapjs' }
9 silly lockFile c5b1bf36-ldapjs ldapjs
10 verbose lock ldapjs /Users/sowens/.npm/c5b1bf36-ldapjs.lock
11 silly lockFile c5b1bf36-ldapjs ldapjs
12 silly lockFile c5b1bf36-ldapjs ldapjs
13 verbose addNamed [ 'ldapjs', '' ]
14 verbose addNamed [ null, '*' ]
15 silly lockFile 8c1a39b8-ldapjs ldapjs@
16 verbose lock ldapjs@ /Users/sowens/.npm/8c1a39b8-ldapjs.lock
17 silly addNameRange { name: 'ldapjs', range: '*', hasData: false }
18 verbose url raw ldapjs
19 verbose url resolving [ 'https://registry.npmjs.org/', './ldapjs' ]
20 verbose url resolved https://registry.npmjs.org/ldapjs
21 info trying registry request attempt 1 at 12:26:43
22 verbose etag "DHXK7ZUXDW4D52HZAM56US0PH"
23 http GET https://registry.npmjs.org/ldapjs
24 http 304 https://registry.npmjs.org/ldapjs
25 silly registry.get cb [ 304,
25 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
25 silly registry.get server: 'Apache',
25 silly registry.get connection: 'close',
25 silly registry.get etag: '"DHXK7ZUXDW4D52HZAM56US0PH"',
25 silly registry.get 'cache-control': 'max-age=1',
25 silly registry.get vary: 'Accept' } ]
26 verbose etag ldapjs from cache
27 silly addNameRange number 2 { name: 'ldapjs', range: '*', hasData: true }
28 silly addNameRange versions [ 'ldapjs',
28 silly addNameRange [ '0.1.0',
28 silly addNameRange '0.1.1',
28 silly addNameRange '0.1.2',
28 silly addNameRange '0.1.3',
28 silly addNameRange '0.1.4',
28 silly addNameRange '0.1.5',
28 silly addNameRange '0.1.6',
28 silly addNameRange '0.1.7',
28 silly addNameRange '0.1.8',
28 silly addNameRange '0.1.9',
28 silly addNameRange '0.2.0',
28 silly addNameRange '0.2.1',
28 silly addNameRange '0.2.2',
28 silly addNameRange '0.2.3',
28 silly addNameRange '0.2.4',
28 silly addNameRange '0.2.5',
28 silly addNameRange '0.2.6',
28 silly addNameRange '0.2.7',
28 silly addNameRange '0.2.8',
28 silly addNameRange '0.3.0',
28 silly addNameRange '0.3.1',
28 silly addNameRange '0.3.2',
28 silly addNameRange '0.3.3',
28 silly addNameRange '0.3.4',
28 silly addNameRange '0.3.5',
28 silly addNameRange '0.3.6',
28 silly addNameRange '0.4.0',
28 silly addNameRange '0.4.1',
28 silly addNameRange '0.4.2',
28 silly addNameRange '0.4.3',
28 silly addNameRange '0.4.4',
28 silly addNameRange '0.4.5',
28 silly addNameRange '0.4.6',
28 silly addNameRange '0.4.7',
28 silly addNameRange '0.4.8',
28 silly addNameRange '0.5.0',
28 silly addNameRange '0.5.1',
28 silly addNameRange '0.5.2',
28 silly addNameRange '0.5.3',
28 silly addNameRange '0.5.4',
28 silly addNameRange '0.5.5',
28 silly addNameRange '0.5.6',
28 silly addNameRange '0.5.7',
28 silly addNameRange '0.5.8',
28 silly addNameRange '0.6.0',
28 silly addNameRange '0.6.1',
28 silly addNameRange '0.6.2',
28 silly addNameRange '0.6.3',
28 silly addNameRange '0.7.0' ] ]
29 verbose addNamed [ 'ldapjs', '0.7.0' ]
30 verbose addNamed [ '0.7.0', '0.7.0' ]
31 silly lockFile 3a0499fd-ldapjs-0-7-0 [email protected]
32 verbose lock [email protected] /Users/sowens/.npm/3a0499fd-ldapjs-0-7-0.lock
33 silly lockFile 3a0499fd-ldapjs-0-7-0 [email protected]
34 silly lockFile 3a0499fd-ldapjs-0-7-0 [email protected]
35 silly lockFile 8c1a39b8-ldapjs ldapjs@
36 silly lockFile 8c1a39b8-ldapjs ldapjs@
37 silly resolved [ { author: { name: 'Mark Cavage', email: '[email protected]' },
37 silly resolved contributors:
37 silly resolved [ [Object],
37 silly resolved [Object],
37 silly resolved [Object],
37 silly resolved [Object],
37 silly resolved [Object],
37 silly resolved [Object],
37 silly resolved [Object],
37 silly resolved [Object] ],
37 silly resolved name: 'ldapjs',
37 silly resolved homepage: 'http://ldapjs.org',
37 silly resolved description: 'LDAP client and server APIs',
37 silly resolved version: '0.7.0',
37 silly resolved repository: { type: 'git', url: 'git://github.com/mcavage/node-ldapjs.git' },
37 silly resolved main: 'lib/index.js',
37 silly resolved directories: { bin: './bin', lib: './lib' },
37 silly resolved engines: { node: '>=0.8' },
37 silly resolved dependencies:
37 silly resolved { asn1: '0.1.11',
37 silly resolved 'assert-plus': '0.1.2',
37 silly resolved buffertools: '1.1.0',
37 silly resolved bunyan: '0.21.1',
37 silly resolved 'dtrace-provider': '0.2.8',
37 silly resolved nopt: '2.1.1',
37 silly resolved pooling: '0.4.5' },
37 silly resolved devDependencies: { tap: '0.4.1', 'node-uuid': '1.4.0' },
37 silly resolved scripts: { test: './node_modules/.bin/tap ./test' },
37 silly resolved bin:
37 silly resolved { 'ldapjs-add': 'bin/ldapjs-add',
37 silly resolved 'ldapjs-compare': 'bin/ldapjs-compare',
37 silly resolved 'ldapjs-delete': 'bin/ldapjs-delete',
37 silly resolved 'ldapjs-modify': 'bin/ldapjs-modify',
37 silly resolved 'ldapjs-search': 'bin/ldapjs-search' },
37 silly resolved readme: '# Ldapjs\n\n[![\'Build status\'][travis_image_url]][travis_page_url]\n\n[travis_image_url]: https://api.travis-ci.org/mcavage/node-ldapjs.png\n[travis_page_url]: https://travis-ci.org/mcavage/node-ldapjs\n\nldapjs makes the LDAP protocol a first class citizen in Node.js.\n\n## Usage\n\nFor full docs, head on over to <http://ldapjs.org>.\n\n var ldap = require(\'ldapjs\');\n\n var server = ldap.createServer();\n\n server.search(\'dc=example\', function(req, res, next) {\n var obj = {\n dn: req.dn.toString(),\n attributes: {\n objectclass: [\'organization\', \'top\'],\n o: \'example\'\n }\n };\n\n if (req.filter.matches(obj.attributes))\n res.send(obj);\n\n res.end();\n });\n\n server.listen(1389, function() {\n console.log(\'ldapjs listening at \' + server.url);\n });\n\nTo run that, assuming you\'ve got the [OpenLDAP](http://www.openldap.org/) client\non your system:\n\n ldapsearch -H ldap://localhost:1389 -x -b dc=example objectclass=*\n\n## Installation\n\n npm install ldapjs\n \n## Formatting objectGUID attribute value\n\n var ldap = require(\'ldapjs\');\n \n ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B;\n \n var client = ldap.createClient({\n url: \'ldap://127.0.0.1/CN=test,OU=Development,DC=Home\'\n });\n \n var opts = {\n filter: \'(objectclass=user)\',\n scope: \'sub\',\n attributes: [\'objectGUID\']\n };\n \n client.bind(\'username\', \'password\', function (err) {\n client.search(\'CN=test,OU=Development,DC=Home\', opts, function (err, search) {\n search.on(\'searchEntry\', function (entry) {\n var user = entry.object;\n console.log(user.objectGUID);\n });\n });\n });\n\n_Note: for the sake of simplicity all checks and error handling was removed from the sample above._\n\nThe console output may be similar to the following (depending on the amount of users in the directory):\n\n {a7667bb1-4aee-48ce-9d9d-a1193550deba}\n {8d642ac8-14c6-4f27-ac5-94d39833da88}\n \nAvailable formatting modes:\n\n GUID_FORMAT_N\n N specifier, 32 digits:\n 00000000000000000000000000000000\n GUID_FORMAT_D\n D specifier, 32 digits separated by hypens:\n 00000000-0000-0000-0000-000000000000\n GUID_FORMAT_B\n B specifier, 32 digits separated by hyphens, enclosed in braces:\n {00000000-0000-0000-0000-000000000000}\n GUID_FORMAT_P\n P speficier, 32 digits separated by hyphens, enclosed in parentheses:\n (00000000-0000-0000-0000-000000000000)\n GUID_FORMAT_X\n X speficier, four hexadecimal values enclosed in braces,\n where the fourth value is a subset of eight hexadecimal values that is also enclosed in braces:\n {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}\n\nGuid formatting is unobtrusive by default. You should explicitly define formatting mode in order to enable it. \n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-ldapjs/issues>.\n',
37 silly resolved readmeFilename: 'README.md',
37 silly resolved bugs: { url: 'https://github.com/mcavage/node-ldapjs/issues' },
37 silly resolved _id: '[email protected]',
37 silly resolved _from: 'ldapjs@' } ]
38 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer
39 info installOne [email protected]
40 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs unbuild
41 verbose tar unpack /Users/sowens/.npm/ldapjs/0.7.0/package.tgz
42 silly lockFile 9076bb1a-ebsockServer-node-modules-ldapjs tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
43 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs /Users/sowens/.npm/9076bb1a-ebsockServer-node-modules-ldapjs.lock
44 silly lockFile 6af1ee14-ens-npm-ldapjs-0-7-0-package-tgz tar:///Users/sowens/.npm/ldapjs/0.7.0/package.tgz
45 verbose lock tar:///Users/sowens/.npm/ldapjs/0.7.0/package.tgz /Users/sowens/.npm/6af1ee14-ens-npm-ldapjs-0-7-0-package-tgz.lock
46 silly gunzTarPerm modes [ '755', '644' ]
47 silly gunzTarPerm extractEntry package.json
48 silly gunzTarPerm extractEntry .npmignore
49 silly gunzTarPerm extractEntry README.md
50 silly gunzTarPerm extractEntry LICENSE
51 silly gunzTarPerm extractEntry .dir-locals.el
52 silly gunzTarPerm extractEntry .travis.yml
53 silly gunzTarPerm extractEntry bin/ldapjs-add
54 silly gunzTarPerm extractEntry bin/ldapjs-compare
55 silly gunzTarPerm extractEntry bin/ldapjs-delete
56 silly gunzTarPerm extractEntry bin/ldapjs-modify
57 silly gunzTarPerm extractEntry bin/ldapjs-search
58 silly gunzTarPerm extractEntry examples/inmemory.js
59 silly gunzTarPerm extractEntry examples/pooled_client.js
60 silly gunzTarPerm extractEntry examples/snoopldap.d
61 silly gunzTarPerm extractEntry lib/attribute.js
62 silly gunzTarPerm extractEntry lib/server.js
63 silly gunzTarPerm extractEntry lib/protocol.js
64 silly gunzTarPerm extractEntry lib/dn.js
65 silly gunzTarPerm extractEntry lib/dtrace.js
66 silly gunzTarPerm extractEntry lib/persistent_search.js
67 silly gunzTarPerm extractEntry lib/change.js
68 silly gunzTarPerm extractEntry lib/index.js
69 silly gunzTarPerm extractEntry lib/url.js
70 silly gunzTarPerm extractEntry lib/messages/abandon_request.js
71 silly gunzTarPerm extractEntry lib/messages/del_response.js
72 silly gunzTarPerm extractEntry lib/messages/ext_request.js
73 silly gunzTarPerm extractEntry lib/messages/ext_response.js
74 silly gunzTarPerm extractEntry lib/messages/index.js
75 silly gunzTarPerm extractEntry lib/messages/del_request.js
76 silly gunzTarPerm extractEntry lib/messages/moddn_request.js
77 silly gunzTarPerm extractEntry lib/messages/moddn_response.js
78 silly gunzTarPerm extractEntry lib/messages/modify_request.js
79 silly gunzTarPerm extractEntry lib/messages/modify_response.js
80 silly gunzTarPerm extractEntry lib/messages/parser.js
81 silly gunzTarPerm extractEntry lib/messages/compare_response.js
82 silly gunzTarPerm extractEntry lib/messages/result.js
83 silly gunzTarPerm extractEntry lib/messages/compare_request.js
84 silly gunzTarPerm extractEntry lib/messages/search_entry.js
85 silly gunzTarPerm extractEntry lib/messages/bind_response.js
86 silly gunzTarPerm extractEntry lib/messages/search_reference.js
87 silly gunzTarPerm extractEntry lib/messages/bind_request.js
88 silly gunzTarPerm extractEntry lib/messages/search_request.js
89 silly gunzTarPerm extractEntry lib/messages/add_response.js
90 silly gunzTarPerm extractEntry lib/messages/search_response.js
91 silly gunzTarPerm extractEntry lib/messages/add_request.js
92 silly gunzTarPerm extractEntry lib/messages/unbind_request.js
93 silly gunzTarPerm extractEntry lib/messages/abandon_response.js
94 silly gunzTarPerm extractEntry lib/messages/unbind_response.js
95 silly gunzTarPerm extractEntry lib/messages/message.js
96 silly gunzTarPerm extractEntry lib/errors/index.js
97 silly gunzTarPerm extractEntry lib/controls/control.js
98 silly gunzTarPerm extractEntry lib/controls/entry_change_notification_control.js
99 silly gunzTarPerm extractEntry lib/controls/index.js
100 silly gunzTarPerm extractEntry lib/controls/paged_results_control.js
101 silly gunzTarPerm extractEntry lib/controls/persistent_search_control.js
102 silly gunzTarPerm extractEntry lib/client/client.js
103 silly gunzTarPerm extractEntry lib/client/index.js
104 silly gunzTarPerm extractEntry lib/client/pool.js
105 silly gunzTarPerm extractEntry lib/filters/and_filter.js
106 silly gunzTarPerm extractEntry lib/filters/escape.js
107 silly gunzTarPerm extractEntry lib/filters/ext_filter.js
108 silly gunzTarPerm extractEntry lib/filters/filter.js
109 silly gunzTarPerm extractEntry lib/filters/equality_filter.js
110 silly gunzTarPerm extractEntry lib/filters/index.js
111 silly gunzTarPerm extractEntry lib/filters/le_filter.js
112 silly gunzTarPerm extractEntry lib/filters/not_filter.js
113 silly gunzTarPerm extractEntry lib/filters/or_filter.js
114 silly gunzTarPerm extractEntry lib/filters/presence_filter.js
115 silly gunzTarPerm extractEntry lib/filters/approx_filter.js
116 silly gunzTarPerm extractEntry lib/filters/substr_filter.js
117 silly gunzTarPerm extractEntry lib/filters/ge_filter.js
118 silly lockFile 9076bb1a-ebsockServer-node-modules-ldapjs tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
119 silly lockFile 9076bb1a-ebsockServer-node-modules-ldapjs tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
120 silly lockFile 6af1ee14-ens-npm-ldapjs-0-7-0-package-tgz tar:///Users/sowens/.npm/ldapjs/0.7.0/package.tgz
121 silly lockFile 6af1ee14-ens-npm-ldapjs-0-7-0-package-tgz tar:///Users/sowens/.npm/ldapjs/0.7.0/package.tgz
122 info preinstall [email protected]
123 verbose readDependencies using package.json deps
124 verbose readDependencies using package.json deps
125 verbose cache add [ '[email protected]', null ]
126 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
127 verbose parsed url { protocol: null,
127 verbose parsed url slashes: null,
127 verbose parsed url auth: null,
127 verbose parsed url host: null,
127 verbose parsed url port: null,
127 verbose parsed url hostname: null,
127 verbose parsed url hash: null,
127 verbose parsed url search: null,
127 verbose parsed url query: null,
127 verbose parsed url pathname: '[email protected]',
127 verbose parsed url path: '[email protected]',
127 verbose parsed url href: '[email protected]' }
128 verbose cache add name="asn1" spec="0.1.11" args=["asn1","0.1.11"]
129 verbose parsed url { protocol: null,
129 verbose parsed url slashes: null,
129 verbose parsed url auth: null,
129 verbose parsed url host: null,
129 verbose parsed url port: null,
129 verbose parsed url hostname: null,
129 verbose parsed url hash: null,
129 verbose parsed url search: null,
129 verbose parsed url query: null,
129 verbose parsed url pathname: '0.1.11',
129 verbose parsed url path: '0.1.11',
129 verbose parsed url href: '0.1.11' }
130 verbose addNamed [ 'asn1', '0.1.11' ]
131 verbose addNamed [ '0.1.11', '0.1.11' ]
132 silly lockFile 41ecb821-asn1-0-1-11 [email protected]
133 verbose lock [email protected] /Users/sowens/.npm/41ecb821-asn1-0-1-11.lock
134 verbose cache add [ '[email protected]', null ]
135 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
136 verbose parsed url { protocol: null,
136 verbose parsed url slashes: null,
136 verbose parsed url auth: null,
136 verbose parsed url host: null,
136 verbose parsed url port: null,
136 verbose parsed url hostname: null,
136 verbose parsed url hash: null,
136 verbose parsed url search: null,
136 verbose parsed url query: null,
136 verbose parsed url pathname: '[email protected]',
136 verbose parsed url path: '[email protected]',
136 verbose parsed url href: '[email protected]' }
137 verbose cache add name="assert-plus" spec="0.1.2" args=["assert-plus","0.1.2"]
138 verbose parsed url { protocol: null,
138 verbose parsed url slashes: null,
138 verbose parsed url auth: null,
138 verbose parsed url host: null,
138 verbose parsed url port: null,
138 verbose parsed url hostname: null,
138 verbose parsed url hash: null,
138 verbose parsed url search: null,
138 verbose parsed url query: null,
138 verbose parsed url pathname: '0.1.2',
138 verbose parsed url path: '0.1.2',
138 verbose parsed url href: '0.1.2' }
139 verbose addNamed [ 'assert-plus', '0.1.2' ]
140 verbose addNamed [ '0.1.2', '0.1.2' ]
141 silly lockFile 46222085-assert-plus-0-1-2 [email protected]
142 verbose lock [email protected] /Users/sowens/.npm/46222085-assert-plus-0-1-2.lock
143 verbose cache add [ '[email protected]', null ]
144 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
145 verbose parsed url { protocol: null,
145 verbose parsed url slashes: null,
145 verbose parsed url auth: null,
145 verbose parsed url host: null,
145 verbose parsed url port: null,
145 verbose parsed url hostname: null,
145 verbose parsed url hash: null,
145 verbose parsed url search: null,
145 verbose parsed url query: null,
145 verbose parsed url pathname: '[email protected]',
145 verbose parsed url path: '[email protected]',
145 verbose parsed url href: '[email protected]' }
146 verbose cache add name="buffertools" spec="1.1.0" args=["buffertools","1.1.0"]
147 verbose parsed url { protocol: null,
147 verbose parsed url slashes: null,
147 verbose parsed url auth: null,
147 verbose parsed url host: null,
147 verbose parsed url port: null,
147 verbose parsed url hostname: null,
147 verbose parsed url hash: null,
147 verbose parsed url search: null,
147 verbose parsed url query: null,
147 verbose parsed url pathname: '1.1.0',
147 verbose parsed url path: '1.1.0',
147 verbose parsed url href: '1.1.0' }
148 verbose addNamed [ 'buffertools', '1.1.0' ]
149 verbose addNamed [ '1.1.0', '1.1.0' ]
150 silly lockFile 2038c422-buffertools-1-1-0 [email protected]
151 verbose lock [email protected] /Users/sowens/.npm/2038c422-buffertools-1-1-0.lock
152 verbose cache add [ '[email protected]', null ]
153 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
154 verbose parsed url { protocol: null,
154 verbose parsed url slashes: null,
154 verbose parsed url auth: null,
154 verbose parsed url host: null,
154 verbose parsed url port: null,
154 verbose parsed url hostname: null,
154 verbose parsed url hash: null,
154 verbose parsed url search: null,
154 verbose parsed url query: null,
154 verbose parsed url pathname: '[email protected]',
154 verbose parsed url path: '[email protected]',
154 verbose parsed url href: '[email protected]' }
155 verbose cache add name="bunyan" spec="0.21.1" args=["bunyan","0.21.1"]
156 verbose parsed url { protocol: null,
156 verbose parsed url slashes: null,
156 verbose parsed url auth: null,
156 verbose parsed url host: null,
156 verbose parsed url port: null,
156 verbose parsed url hostname: null,
156 verbose parsed url hash: null,
156 verbose parsed url search: null,
156 verbose parsed url query: null,
156 verbose parsed url pathname: '0.21.1',
156 verbose parsed url path: '0.21.1',
156 verbose parsed url href: '0.21.1' }
157 verbose addNamed [ 'bunyan', '0.21.1' ]
158 verbose addNamed [ '0.21.1', '0.21.1' ]
159 silly lockFile 83b343e5-bunyan-0-21-1 [email protected]
160 verbose lock [email protected] /Users/sowens/.npm/83b343e5-bunyan-0-21-1.lock
161 verbose cache add [ '[email protected]', null ]
162 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
163 verbose parsed url { protocol: null,
163 verbose parsed url slashes: null,
163 verbose parsed url auth: null,
163 verbose parsed url host: null,
163 verbose parsed url port: null,
163 verbose parsed url hostname: null,
163 verbose parsed url hash: null,
163 verbose parsed url search: null,
163 verbose parsed url query: null,
163 verbose parsed url pathname: '[email protected]',
163 verbose parsed url path: '[email protected]',
163 verbose parsed url href: '[email protected]' }
164 verbose cache add name="dtrace-provider" spec="0.2.8" args=["dtrace-provider","0.2.8"]
165 verbose parsed url { protocol: null,
165 verbose parsed url slashes: null,
165 verbose parsed url auth: null,
165 verbose parsed url host: null,
165 verbose parsed url port: null,
165 verbose parsed url hostname: null,
165 verbose parsed url hash: null,
165 verbose parsed url search: null,
165 verbose parsed url query: null,
165 verbose parsed url pathname: '0.2.8',
165 verbose parsed url path: '0.2.8',
165 verbose parsed url href: '0.2.8' }
166 verbose addNamed [ 'dtrace-provider', '0.2.8' ]
167 verbose addNamed [ '0.2.8', '0.2.8' ]
168 silly lockFile bba222c2-dtrace-provider-0-2-8 [email protected]
169 verbose lock [email protected] /Users/sowens/.npm/bba222c2-dtrace-provider-0-2-8.lock
170 verbose cache add [ '[email protected]', null ]
171 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
172 verbose parsed url { protocol: null,
172 verbose parsed url slashes: null,
172 verbose parsed url auth: null,
172 verbose parsed url host: null,
172 verbose parsed url port: null,
172 verbose parsed url hostname: null,
172 verbose parsed url hash: null,
172 verbose parsed url search: null,
172 verbose parsed url query: null,
172 verbose parsed url pathname: '[email protected]',
172 verbose parsed url path: '[email protected]',
172 verbose parsed url href: '[email protected]' }
173 verbose cache add name="nopt" spec="2.1.1" args=["nopt","2.1.1"]
174 verbose parsed url { protocol: null,
174 verbose parsed url slashes: null,
174 verbose parsed url auth: null,
174 verbose parsed url host: null,
174 verbose parsed url port: null,
174 verbose parsed url hostname: null,
174 verbose parsed url hash: null,
174 verbose parsed url search: null,
174 verbose parsed url query: null,
174 verbose parsed url pathname: '2.1.1',
174 verbose parsed url path: '2.1.1',
174 verbose parsed url href: '2.1.1' }
175 verbose addNamed [ 'nopt', '2.1.1' ]
176 verbose addNamed [ '2.1.1', '2.1.1' ]
177 silly lockFile 71b053a3-nopt-2-1-1 [email protected]
178 verbose lock [email protected] /Users/sowens/.npm/71b053a3-nopt-2-1-1.lock
179 verbose cache add [ '[email protected]', null ]
180 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
181 verbose parsed url { protocol: null,
181 verbose parsed url slashes: null,
181 verbose parsed url auth: null,
181 verbose parsed url host: null,
181 verbose parsed url port: null,
181 verbose parsed url hostname: null,
181 verbose parsed url hash: null,
181 verbose parsed url search: null,
181 verbose parsed url query: null,
181 verbose parsed url pathname: '[email protected]',
181 verbose parsed url path: '[email protected]',
181 verbose parsed url href: '[email protected]' }
182 verbose cache add name="pooling" spec="0.4.5" args=["pooling","0.4.5"]
183 verbose parsed url { protocol: null,
183 verbose parsed url slashes: null,
183 verbose parsed url auth: null,
183 verbose parsed url host: null,
183 verbose parsed url port: null,
183 verbose parsed url hostname: null,
183 verbose parsed url hash: null,
183 verbose parsed url search: null,
183 verbose parsed url query: null,
183 verbose parsed url pathname: '0.4.5',
183 verbose parsed url path: '0.4.5',
183 verbose parsed url href: '0.4.5' }
184 verbose addNamed [ 'pooling', '0.4.5' ]
185 verbose addNamed [ '0.4.5', '0.4.5' ]
186 silly lockFile a283bd34-pooling-0-4-5 [email protected]
187 verbose lock [email protected] /Users/sowens/.npm/a283bd34-pooling-0-4-5.lock
188 verbose url raw asn1/0.1.11
189 verbose url resolving [ 'https://registry.npmjs.org/', './asn1/0.1.11' ]
190 verbose url resolved https://registry.npmjs.org/asn1/0.1.11
191 info trying registry request attempt 1 at 12:26:44
192 verbose etag "B74JHOHEJXMOVF1G3A5W2PJAM"
193 http GET https://registry.npmjs.org/asn1/0.1.11
194 verbose url raw buffertools/1.1.0
195 verbose url resolving [ 'https://registry.npmjs.org/', './buffertools/1.1.0' ]
196 verbose url resolved https://registry.npmjs.org/buffertools/1.1.0
197 info trying registry request attempt 1 at 12:26:44
198 verbose etag "3KSKHMOXTQGA3O7GWAH4VU44U"
199 http GET https://registry.npmjs.org/buffertools/1.1.0
200 verbose url raw assert-plus/0.1.2
201 verbose url resolving [ 'https://registry.npmjs.org/', './assert-plus/0.1.2' ]
202 verbose url resolved https://registry.npmjs.org/assert-plus/0.1.2
203 info trying registry request attempt 1 at 12:26:44
204 verbose etag "8JQD6UZQ7AETWZEZUUAGB1E5M"
205 http GET https://registry.npmjs.org/assert-plus/0.1.2
206 verbose url raw bunyan/0.21.1
207 verbose url resolving [ 'https://registry.npmjs.org/', './bunyan/0.21.1' ]
208 verbose url resolved https://registry.npmjs.org/bunyan/0.21.1
209 info trying registry request attempt 1 at 12:26:44
210 verbose etag "C1V3FPE0LJR3DHMZ83XCQCFDE"
211 http GET https://registry.npmjs.org/bunyan/0.21.1
212 verbose url raw dtrace-provider/0.2.8
213 verbose url resolving [ 'https://registry.npmjs.org/', './dtrace-provider/0.2.8' ]
214 verbose url resolved https://registry.npmjs.org/dtrace-provider/0.2.8
215 info trying registry request attempt 1 at 12:26:44
216 verbose etag "4B88A1X64GSSKHUSVUMVSFAS3"
217 http GET https://registry.npmjs.org/dtrace-provider/0.2.8
218 verbose url raw nopt/2.1.1
219 verbose url resolving [ 'https://registry.npmjs.org/', './nopt/2.1.1' ]
220 verbose url resolved https://registry.npmjs.org/nopt/2.1.1
221 info trying registry request attempt 1 at 12:26:44
222 verbose etag "24REAYJXVKBRG80ZVAASOGJ7R"
223 http GET https://registry.npmjs.org/nopt/2.1.1
224 verbose url raw pooling/0.4.5
225 verbose url resolving [ 'https://registry.npmjs.org/', './pooling/0.4.5' ]
226 verbose url resolved https://registry.npmjs.org/pooling/0.4.5
227 info trying registry request attempt 1 at 12:26:44
228 verbose etag "CWKHWKGN7W125SJPHDAHLPCVC"
229 http GET https://registry.npmjs.org/pooling/0.4.5
230 http 304 https://registry.npmjs.org/buffertools/1.1.0
231 silly registry.get cb [ 304,
231 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
231 silly registry.get server: 'Apache',
231 silly registry.get connection: 'close',
231 silly registry.get etag: '"3KSKHMOXTQGA3O7GWAH4VU44U"',
231 silly registry.get 'cache-control': 'max-age=1',
231 silly registry.get vary: 'Accept' } ]
232 verbose etag buffertools/1.1.0 from cache
233 silly lockFile 2038c422-buffertools-1-1-0 [email protected]
234 silly lockFile 2038c422-buffertools-1-1-0 [email protected]
235 http 304 https://registry.npmjs.org/dtrace-provider/0.2.8
236 silly registry.get cb [ 304,
236 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
236 silly registry.get server: 'Apache',
236 silly registry.get connection: 'close',
236 silly registry.get etag: '"4B88A1X64GSSKHUSVUMVSFAS3"',
236 silly registry.get 'cache-control': 'max-age=1',
236 silly registry.get vary: 'Accept' } ]
237 verbose etag dtrace-provider/0.2.8 from cache
238 silly lockFile bba222c2-dtrace-provider-0-2-8 [email protected]
239 silly lockFile bba222c2-dtrace-provider-0-2-8 [email protected]
240 http 304 https://registry.npmjs.org/assert-plus/0.1.2
241 silly registry.get cb [ 304,
241 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
241 silly registry.get server: 'Apache',
241 silly registry.get connection: 'close',
241 silly registry.get etag: '"8JQD6UZQ7AETWZEZUUAGB1E5M"',
241 silly registry.get 'cache-control': 'max-age=1',
241 silly registry.get vary: 'Accept' } ]
242 verbose etag assert-plus/0.1.2 from cache
243 http 304 https://registry.npmjs.org/bunyan/0.21.1
244 silly registry.get cb [ 304,
244 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
244 silly registry.get server: 'Apache',
244 silly registry.get connection: 'close',
244 silly registry.get etag: '"C1V3FPE0LJR3DHMZ83XCQCFDE"',
244 silly registry.get 'cache-control': 'max-age=1',
244 silly registry.get vary: 'Accept' } ]
245 verbose etag bunyan/0.21.1 from cache
246 silly lockFile 46222085-assert-plus-0-1-2 [email protected]
247 silly lockFile 46222085-assert-plus-0-1-2 [email protected]
248 silly lockFile 83b343e5-bunyan-0-21-1 [email protected]
249 silly lockFile 83b343e5-bunyan-0-21-1 [email protected]
250 http 304 https://registry.npmjs.org/asn1/0.1.11
251 silly registry.get cb [ 304,
251 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
251 silly registry.get server: 'Apache',
251 silly registry.get connection: 'close',
251 silly registry.get etag: '"B74JHOHEJXMOVF1G3A5W2PJAM"',
251 silly registry.get 'cache-control': 'max-age=1',
251 silly registry.get vary: 'Accept' } ]
252 verbose etag asn1/0.1.11 from cache
253 silly lockFile 41ecb821-asn1-0-1-11 [email protected]
254 silly lockFile 41ecb821-asn1-0-1-11 [email protected]
255 http 304 https://registry.npmjs.org/nopt/2.1.1
256 silly registry.get cb [ 304,
256 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
256 silly registry.get server: 'Apache',
256 silly registry.get connection: 'close',
256 silly registry.get etag: '"24REAYJXVKBRG80ZVAASOGJ7R"',
256 silly registry.get 'cache-control': 'max-age=1',
256 silly registry.get vary: 'Accept' } ]
257 verbose etag nopt/2.1.1 from cache
258 http 304 https://registry.npmjs.org/pooling/0.4.5
259 silly registry.get cb [ 304,
259 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:44 GMT',
259 silly registry.get server: 'Apache',
259 silly registry.get connection: 'close',
259 silly registry.get etag: '"CWKHWKGN7W125SJPHDAHLPCVC"',
259 silly registry.get 'cache-control': 'max-age=1',
259 silly registry.get vary: 'Accept' } ]
260 verbose etag pooling/0.4.5 from cache
261 silly lockFile a283bd34-pooling-0-4-5 [email protected]
262 silly lockFile a283bd34-pooling-0-4-5 [email protected]
263 silly lockFile 71b053a3-nopt-2-1-1 [email protected]
264 silly lockFile 71b053a3-nopt-2-1-1 [email protected]
265 silly resolved [ { name: 'buffertools',
265 silly resolved main: 'buffertools',
265 silly resolved version: '1.1.0',
265 silly resolved keywords: [ 'buffer', 'buffers' ],
265 silly resolved description: 'Working with node.js buffers made easy.',
265 silly resolved homepage: 'https://github.com/bnoordhuis/node-buffertools',
265 silly resolved author:
265 silly resolved { name: 'Ben Noordhuis',
265 silly resolved email: '[email protected]',
265 silly resolved url: 'http://bnoordhuis.nl/' },
265 silly resolved repository:
265 silly resolved { type: 'git',
265 silly resolved url: 'https://github.com/bnoordhuis/node-buffertools.git' },
265 silly resolved engines: { node: '>=0.3.0' },
265 silly resolved scripts: { install: 'node-gyp rebuild' },
265 silly resolved gypfile: true,
265 silly resolved contributors: [ [Object], [Object], [Object] ],
265 silly resolved readme: '# node-buffertools\n\nUtilities for manipulating buffers.\n\n## Installing the module\n\nEasy! With [npm](http://npmjs.org/):\n\n\tnpm install buffertools\n\nFrom source:\n\n\tnode-gyp configure\n\tnode-gyp build\n\nNow you can include the module in your project.\n\n\trequire(\'buffertools\');\n\tnew Buffer(42).clear();\n\n## Methods\n\nNote that most methods that take a buffer as an argument, will also accept a string.\n\n### Buffer.clear()\n\nClear the buffer. This is equivalent to `Buffer.fill(0)`.\nReturns the buffer object so you can chain method calls.\n\n### Buffer.compare(buffer|string)\n\nLexicographically compare two buffers. Returns a number less than zero\nif a < b, zero if a == b or greater than zero if a > b.\n\nBuffers are considered equal when they are of the same length and contain\nthe same binary data.\n\nSmaller buffers are considered to be less than larger ones. Some buffers\nfind this hurtful.\n\n### Buffer.concat(a, b, c, ...)\n### buffertools.concat(a, b, c, ...)\n\nConcatenate two or more buffers/strings and return the result. Example:\n\n\t// identical to new Buffer(\'foobarbaz\')\n\ta = new Buffer(\'foo\');\n\tb = new Buffer(\'bar\');\n\tc = a.concat(b, \'baz\');\n\tconsole.log(a, b, c); // "foo bar foobarbaz"\n\n\t// static variant\n\tbuffertools.concat(\'foo\', new Buffer(\'bar\'), \'baz\');\n\n### Buffer.equals(buffer|string)\n\nReturns true if this buffer equals the argument, false otherwise.\n\nBuffers are considered equal when they are of the same length and contain\nthe same binary data.\n\nCaveat emptor: If your buffers contain strings with different character encodings,\nthey will most likely *not* be equal.\n\n### Buffer.fill(integer|string|buffer)\n\nFill the buffer (repeatedly if necessary) with the argument.\nReturns the buffer object so you can chain method calls.\n\n### Buffer.fromHex()\n\nAssumes this buffer contains hexadecimal data (packed, no whitespace)\nand decodes it into binary data. Returns a new buffer with the decoded\ncontent. Throws an exception if non-hexadecimal data is encountered.\n\n### Buffer.indexOf(buffer|string, [start=0])\n\nSearch this buffer for the first occurrence of the argument, starting at\noffset `start`. Returns the zero-based index or -1 if there is no match.\n\n### Buffer.reverse()\n\nReverse the content of the buffer in place. Example:\n\n\tb = new Buffer(\'live\');\n\tb.reverse();\n\tconsole.log(b); // "evil"\n\n### Buffer.toHex()\n\nReturns the contents of this buffer encoded as a hexadecimal string.\n\n## Classes\n\nSingular, actually. To wit:\n\n## WritableBufferStream\n\nThis is a regular node.js [writable stream](http://nodejs.org/docs/v0.3.4/api/streams.html#writable_Stream)\nthat accumulates the data it receives into a buffer.\n\nExample usage:\n\n\t// slurp stdin into a buffer\n\tprocess.stdin.resume();\n\tostream = new WritableBufferStream();\n\tutil.pump(process.stdin, ostream);\n\tconsole.log(ostream.getBuffer());\n\nThe stream never emits \'error\' or \'drain\' events.\n\n### WritableBufferStream.getBuffer()\n\nReturn the data accumulated so far as a buffer.\n\n## TODO\n\n* Logical operations on buffers (AND, OR, XOR).\n* Add lastIndexOf() functions.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/bnoordhuis/node-buffertools/issues' },
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { name: 'dtrace-provider',
265 silly resolved version: '0.2.8',
265 silly resolved description: 'Native DTrace providers for node.js applications',
265 silly resolved keywords: [ 'dtrace' ],
265 silly resolved homepage: 'https://github.com/chrisa/node-dtrace-provider#readme',
265 silly resolved author: { name: 'Chris Andrews', email: '[email protected]' },
265 silly resolved repository:
265 silly resolved { type: 'git',
265 silly resolved url: 'http://github.com/chrisa/node-dtrace-provider.git' },
265 silly resolved engines: { node: '>=0.6' },
265 silly resolved devDependencies: { tap: '>=0.2.0' },
265 silly resolved main: './dtrace-provider.js',
265 silly resolved scripts: { install: 'node-gyp rebuild' },
265 silly resolved gypfile: true,
265 silly resolved readme: '# dtrace-provider - Native DTrace providers for Node.js apps.\n\nThis extension allows you to create native DTrace providers for your\nNode.js applications. That is, to create providers and probes which\nexpose information specific to your application, rather than\ninformation about the node runtime.\n\nYou could use this to expose high-level information about the inner\nworkings of your application, or to create a specific context in which\nto look at information from other runtime or system-level providers. \n\nThe provider is not created in the usual way, by declaring it and then\nchanging the build process to include it, but instead dynamically at\nruntime. This is done entirely in-process, and there is no background\ncompiler or dtrace(1) invocation. The process creating the provider\nneed not run as root.\n\n## INSTALL\n\n $ npm install dtrace-provider\n\n## EXAMPLE\n\nHere\'s a simple example of creating a provider:\n\n var d = require(\'dtrace-provider\');\n\n var dtp = d.createDTraceProvider("nodeapp");\n var p1 = dtp.addProbe("probe1", "int", "int");\n var p2 = dtp.addProbe("probe2", "char *");\n dtp.enable();\t \n\nProbes may be fired via the provider object:\n\n dtp.fire("probe1", function(p) {\n return [1, 2];\n });\n dtp.fire("probe2", function(p) { \n return ["hello, dtrace via provider", "foo"];\n });\n\nor via the probe objects themselves:\n\n p1.fire(function(p) {\n return [1, 2, 3, 4, 5, 6];\n });\n p2.fire(function(p) {\n return ["hello, dtrace via probe", "foo"];\n });\n\nThis example creates a provider called "nodeapp", and adds two\nprobes. It then enables the provider, at which point the provider\nbecomes visible to DTrace.\n\nThe probes are then fired, which produces this output:\n\n $ sudo dtrace -Z -n \'nodeapp*:::probe1{ trace(arg0); trace(arg1) }\' \\\n -n \'nodeapp*:::probe2{ trace(copyinstr(arg0)); }\'\n dtrace: description \'nodeapp*:::probe1\' matched 0 probes\n dtrace: description \'nodeapp*:::probe2\' matched 0 probes\n CPU ID FUNCTION:NAME\n 1 123562 func:probe1 1 2\n 1 123563 func:probe2 hello, dtrace \n\nArguments are captured by a callback only executed when the probe is\nenabled. This means you can do more expensive work to gather arguments.\n\nThe maximum number of arguments supported is 32. \n\nAvailable argument types are "int", for integer numeric values,\n"char *" for strings, and "json" for objects rendered into JSON strings.\n\nArguments typed as "json" will be created as "char *" probes in\nDTrace, but objects passed to these probe arguments will be\nautomatically serialized to JSON before being passed to DTrace. This\nfeature is best used in conjunction with the json() D subroutine, but\nis available whether or not the platform supports it.\n\n # create a json probe:\n\n var dtp = d.createDTraceProvider("nodeapp");\n var p1 = dtp.addProbe("j1", "json");\n dtp.enable();\n p1.fire(function() { return { "foo" => "bar" }; });\n\n # on a platform supporting json():\n\n $ sudo dtrace -Z -n \'nodeapp*:::j1{ this->j = copyinstr(arg0); \\\n trace(json(this->j, "foo")) }\'\n dtrace: description \'nodeapp$target:::j1\' matched 0 probes\n CPU ID FUNCTION:NAME\n 0 68712 j1:j1 bar\n\n## PLATFORM SUPPORT\n\nThis libusdt-based Node.JS module supports 64 and 32 bit processes on\nMac OS X and Solaris-like systems such as Illumos or SmartOS. As more\nplatform support is added to libusdt, those platforms will be\nsupported by this module. See libusdt\'s status at:\n\n https://github.com/chrisa/libusdt#readme\n\nFreeBSD is supported in principle but is restricted to only 4 working\narguments per probe.\n\nPlatforms not supporting DTrace (notably, Linux and Windows) may\ninstall this module without building libusdt, with a stub no-op\nimplementation provided for compatibility. This allows cross-platform\nnpm modules to embed probes and include a dependency on this module.\n\nGNU Make is required to build libusdt; the build scripts will look for\ngmake in PATH first, and then for make.\n\n## CAVEATS\n\nThere is some overhead to probes, even when disabled. Probes are\nalready using the "is-enabled" feature of DTrace to control execution\nof the arguments-gathering callback, but some work still needs to be\ndone before that\'s checked. This overhead should not be a problem\nunless probes are placed in particularly hot code paths.\n\n## CONTRIBUTING\n\nThe source is available at:\n\n https://github.com/chrisa/node-dtrace-provider.\n\nFor issues, please use the Github issue tracker linked to the\nrepository. Github pull requests are very welcome. \n\n## RUNNING THE TESTS\n\n $ npm install\n $ sudo ./node_modules/.bin/tap --tap test/*.test.js\n\n## OTHER IMPLEMENTATIONS\n\nThis node extension is derived from the ruby-dtrace gem, via the Perl\nmodule Devel::DTrace::Provider, both of which provide the same\nfunctionality to those languages.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/chrisa/node-dtrace-provider/issues' },
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { author: { name: 'Mark Cavage', email: '[email protected]' },
265 silly resolved name: 'assert-plus',
265 silly resolved description: 'Extra assertions on top of node\'s assert module',
265 silly resolved version: '0.1.2',
265 silly resolved main: './assert.js',
265 silly resolved dependencies: {},
265 silly resolved devDependencies: {},
265 silly resolved optionalDependencies: {},
265 silly resolved engines: { node: '>=0.6' },
265 silly resolved readme: '# node-assert-plus\n\nThis library is a super small wrapper over node\'s assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, \'myArg\')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require(\'assert-plus\');\n\n function fooAccount(options, callback) {\n\t assert.object(options, \'options\');\n\t\tassert.number(options.id, \'options.id);\n\t\tassert.bool(options.isManager, \'options.isManager\');\n\t\tassert.string(options.name, \'options.name\');\n\t\tassert.arrayOfString(options.email, \'options.email\');\n\t\tassert.func(callback, \'callback\');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren\'t* part of node\'s core assert API are simply assumed to\ntake an argument, and then a string \'name\' that\'s not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, \'foo\');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, \'foo\');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, \'foo\');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don\'t want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the "Software"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { name: 'bunyan',
265 silly resolved version: '0.21.1',
265 silly resolved description: 'a JSON Logger library for node.js services',
265 silly resolved author:
265 silly resolved { name: 'Trent Mick',
265 silly resolved email: '[email protected]',
265 silly resolved url: 'http://trentm.com' },
265 silly resolved main: './lib/bunyan.js',
265 silly resolved bin: { bunyan: './bin/bunyan' },
265 silly resolved repository: { type: 'git', url: 'git://github.com/trentm/node-bunyan.git' },
265 silly resolved engines: [ 'node >=0.6.0' ],
265 silly resolved keywords: [ 'log', 'logging', 'log4j', 'json' ],
265 silly resolved dependencies: { mv: '0.0.5', 'dtrace-provider': '0.2.8' },
265 silly resolved '// comment': '\'mv\' required for RotatingFileStream',
265 silly resolved optionalDependencies: { mv: '0.0.5', 'dtrace-provider': '0.2.8' },
265 silly resolved devDependencies: { nodeunit: '0.7.4', ben: '0.0.0', verror: '1.3.3' },
265 silly resolved scripts: { test: 'make test' },
265 silly resolved contributors:
265 silly resolved [ [Object],
265 silly resolved [Object],
265 silly resolved [Object],
265 silly resolved [Object],
265 silly resolved [Object],
265 silly resolved [Object],
265 silly resolved [Object] ],
265 silly resolved readme: 'Bunyan is **a simple and fast JSON logging library** for node.js services:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: "myapp"});\n log.info("hi");\n\nand **a `bunyan` CLI tool** for nicely viewing those logs:\n\n![bunyan CLI screenshot](https://raw.github.com/trentm/node-bunyan/master/tools/screenshot1.png)\n\nManifesto: Server logs should be structured. JSON\'s a good format. Let\'s do\nthat. A log record is one line of `JSON.stringify`\'d output. Let\'s also\nspecify some common names for the requisite and common fields for a log\nrecord (see below).\n\nAlso: log4j is way more than you need.\n\n\n# Current Status\n\nSolid core functionality is there. Joyent is using this for a number of\nproduction services. Bunyan supports node 0.6 and greater. Follow\n<a href="https://twitter.com/intent/user?screen_name=trentmick" target="_blank">@trentmick</a>\nfor updates to Bunyan.\n\n\n# Installation\n\n npm install bunyan\n\n**Tip**: The `bunyan` CLI tool is written to be compatible (within reason) with\nall versions of Bunyan logs. Therefore you might want to `npm install -g bunyan`\nto get the bunyan CLI on your PATH, then use local bunyan installs for\nnode.js library usage of bunyan in your apps.\n\n\n# Features\n\n- elegant [log method API](#log-method-api)\n- extensible [streams](#streams) system for controlling where log records\n go (to a stream, to a file, [log file rotation](#stream-type-rotating-file),\n etc.)\n- [`bunyan` CLI](#cli-usage) for pretty-printing and filtering of Bunyan logs\n- simple include of log call source location (file, line, function) with\n [`src: true`](#src)\n- light-weight specialization of Logger instances with [`log.child`](#logchild)\n- custom rendering of logged objects with ["serializers"](#serializers)\n- [Dtrace support](#dtrace-support)\n\n\n# Introduction\n\nLike most logging libraries you create a Logger instance and call methods\nnamed after the logging levels:\n\n $ cat hi.js\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: \'myapp\'});\n log.info(\'hi\');\n log.warn({lang: \'fr\'}, \'au revoir\');\n\nAll loggers must provide a "name". This is somewhat akin to the log4j logger\n"name", but Bunyan doesn\'t do hierarchical logger names.\n\n**Bunyan log records are JSON.** A few fields are added automatically:\n"pid", "hostname", "time" and "v".\n\n $ node hi.js\n {"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0}\n {"name":"myapp","hostname":"banana.local","pid":40161,"level":40,"lang":"fr","msg":"au revoir","time":"2013-01-04T18:46:23.853Z","v":0}\n\n\n## Log Method API\n\nThe example above shows two different ways to call `log.info(...)`. The\nfull API is:\n\n log.info(); // Returns a boolean: is the "info" level enabled?\n // This is equivalent to `log.isInfoEnabled()` or\n // `log.isEnabledFor(INFO)` in log4j.\n\n log.info(\'hi\'); // Log a simple string message.\n log.info(\'hi %s\', bob, anotherVar); // Uses `util.format` for msg formatting.\n\n log.info({foo: \'bar\'}, \'hi\');\n // Adds "foo" field to log record. You can add any number\n // of additional fields here.\n\n log.info(err); // Special case to log an `Error` instance to the record.\n // This adds an "err" field with exception details\n // (including the stack) and sets "msg" to the exception\n // message.\n log.info(err, \'more on this: %s\', more);\n // ... or you can specify the "msg".\n\nNote that this implies **you cannot pass any object as the first argument\nto log it**. IOW, `log.info(mywidget)` may not be what you expect. Instead\nof a string representation of `mywidget` that other logging libraries may\ngive you, Bunyan will try to JSON-ify your object. It is a Bunyan best\npractice to always give a field name to included objects, e.g.:\n\n log.info({widget: mywidget}, ...)\n\nThis will dove-tail with [Bunyan serializer support](#serializers), discussed\nlater.\n\nThe same goes for all of Bunyan\'s log levels: `log.trace`, `log.debug`,\n`log.info`, `log.warn`, and `log.fatal`. See the [levels section](#levels)\nbelow for details and suggestions.\n\n\n## CLI Usage\n\nBunyan log output is a stream of JSON objects. This is great for processing,\nbut not for reading directly. A **`bunyan` tool** is provided **for\npretty-printing bunyan logs** and for **filtering** (e.g.\n`| bunyan -c \'this.foo == "bar"\'`). Using our example above:\n\n $ node hi.js | ./bin/bunyan\n [2013-01-04T19:01:18.241Z] INFO: myapp/40208 on banana.local: hi\n [2013-01-04T19:01:18.242Z] WARN: myapp/40208 on banana.local: au revoir (lang=fr)\n\nSee the screenshot above for an example of the default coloring of rendered\nlog output. That example also shows the nice formatting automatically done for\nsome well-known log record fields (e.g. `req` is formatted like an HTTP request,\n`res` like an HTTP response, `err` like an error stack trace).\n\nOne interesting feature is **filtering** of log content, which can be useful\nfor digging through large log files or for analysis. We can filter only\nrecords above a certain level:\n\n $ node hi.js | bunyan -l warn\n [2013-01-04T19:08:37.182Z] WARN: myapp/40353 on banana.local: au revoir (lang=fr)\n\nOr filter on the JSON fields in the records (e.g. only showing the French\nrecords in our contrived example):\n\n $ node hi.js | bunyan -c \'this.lang == "fr"\'\n [2013-01-04T19:08:26.411Z] WARN: myapp/40342 on banana.local: au revoir (lang=fr)\n\nSee `bunyan --help` for other facilities.\n\n\n## Streams Introduction\n\nBy default, log output is to stdout and at the "info" level. Explicitly that\nlooks like:\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n stream: process.stdout,\n level: \'info\'\n });\n\nThat is an abbreviated form for a single stream. **You can define multiple\nstreams at different levels**.\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n streams: [\n {\n level: \'info\',\n stream: process.stdout, // log INFO and above to stdout\n },\n {\n level: \'error\',\n path: \'/var/log/myapp-error.log\' // log ERROR and above to a file\n }\n ]\n });\n\nMore on streams in the [Streams section](#streams) below.\n\n\n## log.child\n\nBunyan has a concept of a child logger to **specialize a logger for a\nsub-component of your application**, i.e. to create a new logger with\nadditional bound fields that will be included in its log records. A child\nlogger is created with `log.child(...)`.\n\nIn the following example, logging on a "Wuzzle" instance\'s `this.log` will\nbe exactly as on the parent logger with the addition of the `widget_type`\nfield:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: \'myapp\'});\n\n function Wuzzle(options) {\n this.log = options.log.child({widget_type: \'wuzzle\'});\n this.log.info(\'creating a wuzzle\')\n }\n Wuzzle.prototype.woos = function () {\n this.log.warn(\'This wuzzle is woosey.\')\n }\n\n log.info(\'start\');\n var wuzzle = new Wuzzle({log: log});\n wuzzle.woos();\n log.info(\'done\');\n\nRunning that looks like (raw):\n\n $ node myapp.js\n {"name":"myapp","hostname":"myhost","pid":34572,"level":30,"msg":"start","time":"2013-01-04T07:47:25.814Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"widget_type":"wuzzle","level":30,"msg":"creating a wuzzle","time":"2013-01-04T07:47:25.815Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"widget_type":"wuzzle","level":40,"msg":"This wuzzle is woosey.","time":"2013-01-04T07:47:25.815Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"level":30,"msg":"done","time":"2013-01-04T07:47:25.816Z","v":0}\n\nAnd with the `bunyan` CLI (using the "short" output mode):\n\n $ node myapp.js | bunyan -o short\n 07:46:42.707Z INFO myapp: start\n 07:46:42.709Z INFO myapp: creating a wuzzle (widget_type=wuzzle)\n 07:46:42.709Z WARN myapp: This wuzzle is woosey. (widget_type=wuzzle)\n 07:46:42.709Z INFO myapp: done\n\n\nA more practical example is in the\n[node-restify](https://github.com/mcavage/node-restify) web framework.\nRestify uses Bunyan for its logging. One feature of its integration, is that\neach restify request handler includes a `req.log` logger that is:\n\n log.child({req_id: <unique request id>}, true)\n\nApps using restify can then use `req.log` and have all such log records\ninclude the unique request id (as "req_id"). Handy.\n\n\n## Serializers\n\nBunyan has a concept of **"serializers" to produce a JSON-able object from a\nJavaScript object**, so you can easily do the following:\n\n log.info({req: <request object>}, \'something about handling this request\');\n\nSerializers is a mapping of log record field name, "req" in this example, to\na serializer function. That looks like this:\n\n function reqSerializer(req) {\n return {\n method: req.method,\n url: req.url,\n headers: req.headers\n }\n }\n var log = bunyan.createLogger({\n name: \'myapp\',\n serializers: {\n req: reqSerializer\n }\n });\n\nOr this:\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n serializers: {req: bunyan.stdSerializers.req}\n });\n\nbecause Buyan includes a small set of standard serializers. To use all the\nstandard serializers you can use:\n\n var log = bunyan.createLogger({\n ...\n serializers: bunyan.stdSerializers\n });\n\n**Note**: Your own serializers should never throw, otherwise you\'ll get an\nugly message on stderr from Bunyan (along with the traceback) and the field\nin your log record will be replaced with a short error message.\n\n\n## src\n\nThe **source file, line and function of the log call site** can be added to\nlog records by using the `src: true` config option:\n\n var log = bunyan.createLogger({src: true, ...});\n\nThis adds the call source info with the \'src\' field, like this:\n\n {\n "name": "src-example",\n "hostname": "banana.local",\n "pid": 123,\n "component": "wuzzle",\n "level": 4,\n "msg": "This wuzzle is woosey.",\n "time": "2012-02-06T04:19:35.605Z",\n "src": {\n "file": "/Users/trentm/tm/node-bunyan/examples/src.js",\n "line": 20,\n "func": "Wuzzle.woos"\n },\n "v": 0\n }\n\n**WARNING: Determining the call source info is slow. Never use this option\nin production.**\n\n\n# Levels\n\nThe log levels in bunyan are as follows. The level descriptions are best\npractice *opinions*.\n\n- "fatal" (60): The service/app is going to stop or become unusable now.\n An operator should definitely look into this soon.\n- "error" (50): Fatal for a particular request, but the service/app continues\n servicing other requests. An operator should look at this soon(ish).\n- "warn" (40): A note on something that should probably be looked at by an\n operator eventually.\n- "info" (30): Detail on regular operation.\n- "debug" (20): Anything else, i.e. too verbose to be included in "info" level.\n- "trace" (10): Logging from external libraries used by your app or *very*\n detailed application logging.\n\nSuggestions: Use "debug" sparingly. Information that will be useful to debug\nerrors *post mortem* should usually be included in "info" messages if it\'s\ngenerally relevant or else with the corresponding "error" event. Don\'t rely\non spewing mostly irrelevant debug messages all the time and sifting through\nthem when an error occurs.\n\nIntegers are used for the actual level values (10 for "trace", ..., 60 for\n"fatal") and constants are defined for the (bunyan.TRACE ... bunyan.DEBUG).\nThe lowercase level names are aliases supported in the API.\n\nHere is the API for changing levels in an existing logger:\n\n log.level() -> INFO // gets current level (lowest level of all streams)\n\n log.level(INFO) // set all streams to level INFO\n log.level("info") // set all streams to level INFO\n\n log.levels() -> [DEBUG, INFO] // get array of levels of all streams\n log.levels(0) -> DEBUG // get level of stream at index 0\n log.levels("foo") // get level of stream with name "foo"\n\n log.levels(0, INFO) // set level of stream 0 to INFO\n log.levels(0, "info") // can use "info" et al aliases\n log.levels("foo", WARN) // set stream named "foo" to WARN\n\n\n\n# Log Record Fields\n\nThis section will describe *rules* for the Bunyan log format: field names,\nfield meanings, required fields, etc. However, a Bunyan library doesn\'t\nstrictly enforce all these rules while records are being emitted. For example,\nBunyan will add a `time` field with the correct format to your log records,\nbut you can specify your own. It is the caller\'s responsibility to specify\nthe appropriate format.\n\nThe reason for the above leniency is because IMO logging a message should\nnever break your app. This leads to this rule of logging: **a thrown\nexception from `log.info(...)` or equivalent (other than for calling with the\nincorrect signature) is always a bug in Bunyan.**\n\n\nA typical Bunyan log record looks like this:\n\n {"name":"myserver","hostname":"banana.local","pid":123,"req":{"method":"GET","url":"/path?q=1#anchor","headers":{"x-hi":"Mom","connection":"close"}},"level":3,"msg":"start request","time":"2012-02-03T19:02:46.178Z","v":0}\n\nPretty-printed:\n\n {\n "name": "myserver",\n "hostname": "banana.local",\n "pid": 123,\n "req": {\n "method": "GET",\n "url": "/path?q=1#anchor",\n "headers": {\n "x-hi": "Mom",\n "connection": "close"\n },\n "remoteAddress": "120.0.0.1",\n "remotePort": 51244\n },\n "level": 3,\n "msg": "start request",\n "time": "2012-02-03T19:02:57.534Z",\n "v": 0\n }\n\n\nCore fields:\n\n- `v`: Required. Integer. Added by Bunyan. Cannot be overriden.\n This is the Bunyan log format version (`require(\'bunyan\').LOG_VERSION`).\n The log version is a single integer. `0` is until I release a version\n "1.0.0" of node-bunyan. Thereafter, starting with `1`, this will be\n incremented if there is any backward incompatible change to the log record\n format. Details will be in "CHANGES.md" (the change log).\n- `level`: Required. Integer. Added by Bunyan. Cannot be overriden.\n See the "Levels" section.\n- `name`: Required. String. Provided at Logger creation.\n You must specify a name for your logger when creating it. Typically this\n is the name of the service/app using Bunyan for logging.\n- `hostname`: Required. String. Provided or determined at Logger creation.\n You can specify your hostname at Logger creation or it will be retrieved\n vi `os.hostname()`.\n- `pid`: Required. Integer. Filled in automatically at Logger creation.\n- `time`: Required. String. Added by Bunyan. Can be overriden.\n The date and time of the event in [ISO 8601\n Extended Format](http://en.wikipedia.org/wiki/ISO_8601) format and in UTC,\n as from\n [`Date.toISOString()`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString).\n- `msg`: Required. String.\n Every `log.debug(...)` et al call must provide a log message.\n- `src`: Optional. Object giving log call source info. This is added\n automatically by Bunyan if the "src: true" config option is given to the\n Logger. Never use in production as this is really slow.\n\n\nGo ahead and add more fields, and nested ones are fine (and recommended) as\nwell. This is why we\'re using JSON. Some suggestions and best practices\nfollow (feedback from actual users welcome).\n\n\nRecommended/Best Practice Fields:\n\n- `err`: Object. A caught JS exception. Log that thing with `log.info(err)`\n to get:\n\n ...\n "err": {\n "message": "boom",\n "name": "TypeError",\n "stack": "TypeError: boom\\n at Object.<anonymous> ..."\n },\n "msg": "boom",\n ...\n\n Or use the `bunyan.stdSerializers.err` serializer in your Logger and\n do this `log.error({err: err}, "oops")`. See "examples/err.js".\n\n- `req_id`: String. A request identifier. Including this field in all logging\n tied to handling a particular request to your server is strongly suggested.\n This allows post analysis of logs to easily collate all related logging\n for a request. This really shines when you have a SOA with multiple services\n and you carry a single request ID from the top API down through all APIs\n (as [node-restify](https://github.com/mcavage/node-restify) facilitates\n with its \'X-Request-Id\' header).\n\n- `req`: An HTTP server request. Bunyan provides `bunyan.stdSerializers.req`\n to serialize a request with a suggested set of keys. Example:\n\n {\n "method": "GET",\n "url": "/path?q=1#anchor",\n "headers": {\n "x-hi": "Mom",\n "connection": "close"\n },\n "remoteAddress": "120.0.0.1",\n "remotePort": 51244\n }\n\n- `res`: An HTTP server response. Bunyan provides `bunyan.stdSerializers.res`\n to serialize a response with a suggested set of keys. Example:\n\n {\n "statusCode": 200,\n "header": "HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\nConnection: keep-alive\\r\\nTransfer-Encoding: chunked\\r\\n\\r\\n"\n }\n\n\nOther fields to consider:\n\n- `req.username`: Authenticated user (or for a 401, the user attempting to\n auth).\n- Some mechanism to calculate response latency. "restify" users will have\n a "X-Response-Time" header. A `latency` custom field would be fine.\n- `req.body`: If you know that request bodies are small (common in APIs,\n for example), then logging the request body is good.\n\n\n# Streams\n\nA "stream" is Bunyan\'s name for an output for log messages (the equivalent\nto a log4j Appender). Ultimately Bunyan uses a\n[Writable Stream](http://nodejs.org/docs/latest/api/all.html#writable_Stream)\ninterface, but there are some additional attributes used to create and\nmanage the stream. A Bunyan Logger instance has one or more streams.\nIn general streams are specified with the "streams" option:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({\n name: "foo",\n streams: [\n {\n stream: process.stderr,\n level: "debug"\n },\n ...\n ]\n });\n\nFor convenience, if there is only one stream, it can specified with the\n"stream" and "level" options (internally converted to a `Logger.streams`).\n\n var log = bunyan.createLogger({\n name: "foo",\n stream: process.stderr,\n level: "debug"\n });\n\nNote that "file" streams do not support this shortcut (partly for historical\nreasons and partly to not make it difficult to add a literal "path" field\non log records).\n\nIf neither "streams" nor "stream" are specified, the default is a stream of\ntype "stream" emitting to `process.stdout` at the "info" level.\n\n\n## stream errors\n\nBunyan re-emits error events from the created `WriteStream`. So you can\ndo this:\n\n var log = bunyan.createLogger({name: \'mylog\', streams: [{path: LOG_PATH}]});\n log.on(\'error\', function (err, stream) {\n // Handle stream write or create error here.\n });\n\n\n## stream type: `stream`\n\nA `type === \'stream\'` is a plain ol\' node.js [Writable\nStream](http://nodejs.org/docs/latest/api/all.html#writable_Stream). A\n"stream" (the writeable stream) field is required. E.g.: `process.stdout`,\n`process.stderr`.\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n stream: process.stderr\n // `type: \'stream\'` is implied\n }]\n });\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>stream</td>\n<td>Yes</td>\n<td>-</td>\n<td>A "Writable Stream", e.g. a std handle or an open file write stream.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>No</td>\n<td>n/a</td>\n<td>`type == \'stream\'` is implied if the `stream` field is given.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n## stream type: `file`\n\nA `type === \'file\'` stream requires a "path" field. Bunyan will open this\nfile for appending. E.g.:\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n path: \'/var/log/foo.log\',\n // `type: \'file\'` is implied\n }]\n });\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>path</td>\n<td>Yes</td>\n<td>-</td>\n<td>A file path to which to log.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>No</td>\n<td>n/a</td>\n<td>`type == \'file\'` is implied if the `path` field is given.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n## stream type: `rotating-file`\n\nA `type === \'rotating-file\'` is a file stream that handles file automatic\nrotation.\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n type: \'rotating-file\',\n path: \'/var/log/foo.log\',\n period: \'1d\', // daily rotation\n count: 3 // keep 3 back copies\n }]\n });\n\nThis will rotate \'/var/log/foo.log\' every day (at midnight) to:\n\n /var/log/foo.log.0 # yesterday\n /var/log/foo.log.1 # 1 day ago\n /var/log/foo.log.2 # 2 days ago\n\n*Currently*, there is no support for providing a template for the rotated\nfiles, or for rotating when the log reaches a threshold size.\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>type</td>\n<td>Yes</td>\n<td>-</td>\n<td>"rotating-file"</td>\n</tr>\n<tr>\n<td>path</td>\n<td>Yes</td>\n<td>-</td>\n<td>A file path to which to log. Rotated files will be "$path.0",\n"$path.1", ...</td>\n</tr>\n<tr>\n<td>period</td>\n<td>No</td>\n<td>1d</td>\n<td>The period at which to rotate. This is a string of the format\n"$number$scope" where "$scope" is one of "h" (hours), "d" (days), "w" (weeks),\n"m" (months), "y" (years). Or one of the following names can be used\n"hourly" (means 1h), "daily" (1d), "weekly" (1w), "monthly" (1m),\n"yearly" (1y). Rotation is done at the start of the scope: top of the hour (h),\nmidnight (d), start of Sunday (w), start of the 1st of the month (m),\nstart of Jan 1st (y).</td>\n</tr>\n<tr>\n<td>count</td>\n<td>No</td>\n<td>10</td>\n<td>The number of rotated files to keep.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n\n## stream type: `raw`\n\n- `raw`: Similar to a "stream" writeable stream, except that the write method\n is given raw log record *Object*s instead of a JSON-stringified string.\n This can be useful for hooking on further processing to all Bunyan logging:\n pushing to an external service, a RingBuffer (see below), etc.\n\n\n\n## `raw` + RingBuffer Stream\n\nBunyan comes with a special stream called a RingBuffer which keeps the last N\nrecords in memory and does *not* write the data anywhere else. One common\nstrategy is to log \'info\' and higher to a normal log file but log all records\n(including \'trace\') to a ringbuffer that you can access via a debugger, or your\nown HTTP interface, or a post-mortem facility like MDB or node-panic.\n\nTo use a RingBuffer:\n\n /* Create a ring buffer that stores the last 100 records. */\n var bunyan = require(\'bunyan\');\n var ringbuffer = new bunyan.RingBuffer({ limit: 100 });\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [\n {\n level: \'info\',\n stream: process.stdout\n },\n {\n level: \'trace\',\n type: \'raw\', // use \'raw\' to get raw log record objects\n stream: ringbuffer\n }\n ]\n });\n\n log.info(\'hello world\');\n console.log(ringbuffer.records);\n\nThis example emits:\n\n [ { name: \'foo\',\n hostname: \'912d2b29\',\n pid: 50346,\n level: 30,\n msg: \'hello world\',\n time: \'2012-06-19T21:34:19.906Z\',\n v: 0 } ]\n\n\n## third-party streams\n\n- syslog:\n [mcavage/node-bunyan-syslog](https://github.com/mcavage/node-bunyan-syslog)\n provides support for directing bunyan logging to a syslog server.\n\n- TODO: eventually https://github.com/trentm/node-bunyan-winston\n\n\n\n# DTrace support\n\nOn systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives\nlike SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`)\nthat makes available the following probes:\n\n log-trace\n log-debug\n log-info\n log-warn\n log-error\n log-fatal\n\nEach of these probes has a single argument: the string that would be\nwritten to the log. Note that when a probe is enabled, it will\nfire whenever the corresponding function is called, even if the level of\nthe log message is less than that of any stream.\n\n\n## DTrace examples\n\nTrace all log messages coming from any Bunyan module on the system.\n(The `-x strsize=4k` is to raise dtrace\'s default 256 byte buffer size\nbecause log messages are longer than typical dtrace probes.)\n\n dtrace -x strsize=4k -qn \'bunyan*:::log-*{printf("%d: %s: %s", pid, probefunc, copyinstr(arg0))}\'\n\nTrace all log messages coming from the "wuzzle" component:\n\n dtrace -x strsize=4k -qn \'bunyan*:::log-*/strstr(this->str = copyinstr(arg0), "\\"component\\":\\"wuzzle\\"") != NULL/{printf("%s", this->str)}\'\n\nAggregate debug messages from process 1234, by message:\n\n dtrace -x strsize=4k -n \'bunyan1234:::log-debug{@[copyinstr(arg0)] = count()}\'\n\nHave the bunyan CLI pretty-print the traced logs:\n\n dtrace -x strsize=4k -qn \'bunyan1234:::log-*{printf("%s", copyinstr(arg0))}\' | bunyan\n\nA convenience handle has been made for this:\n\n bunyan -p 1234\n\n\nOn systems that support the\n[`jstack`](http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/) action\nvia a node.js helper, get a stack backtrace for any debug message that\nincludes the string "danger!":\n\n dtrace -x strsize=4k -qn \'log-debug/strstr(copyinstr(arg0), "danger!") != NULL/{printf("\\n%s", copyinstr(arg0)); jstack()}\'\n\nOutput of the above might be:\n\n {"name":"foo","hostname":"763bf293-d65c-42d5-872b-4abe25d5c4c7.local","pid":12747,"level":20,"msg":"danger!","time":"2012-10-30T18:28:57.115Z","v":0}\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n\n# Versioning\n\nThe scheme I follow is most succintly described by the bootstrap guys\n[here](https://github.com/twitter/bootstrap#versioning).\n\ntl;dr: All versions are `<major>.<minor>.<patch>` which will be incremented for\nbreaking backward compat and major reworks, new features without breaking\nchange, and bug fixes, respectively.\n\n\n# License\n\nMIT. See "LICENSE.txt".\n\n\n# See Also\n\n- Bunyan syslog support: <https://github.com/mcavage/node-bunyan-syslog>.\n- Bunyan + Graylog2: <https://github.com/mhart/gelf-stream>.\n- An example of a Bunyan shim to the Winston logging system:\n <https://github.com/trentm/node-bunyan-winston>.\n- [Bunyan for Bash](https://github.com/trevoro/bash-bunyan).\n- TODO: `RequestCaptureStream` example from restify.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/trentm/node-bunyan/issues' },
265 silly resolved homepage: 'https://github.com/trentm/node-bunyan',
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { author: { name: 'Mark Cavage', email: '[email protected]' },
265 silly resolved contributors: [ [Object], [Object] ],
265 silly resolved name: 'asn1',
265 silly resolved description: 'Contains parsers and serializers for ASN.1 (currently BER only)',
265 silly resolved version: '0.1.11',
265 silly resolved repository: { type: 'git', url: 'git://github.com/mcavage/node-asn1.git' },
265 silly resolved main: 'lib/index.js',
265 silly resolved engines: { node: '>=0.4.9' },
265 silly resolved dependencies: {},
265 silly resolved devDependencies: { tap: '0.1.4' },
265 silly resolved scripts:
265 silly resolved { pretest: 'which gjslint; if [[ "$?" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo "Missing gjslint. Skipping lint"; fi',
265 silly resolved test: './node_modules/.bin/tap ./tst' },
265 silly resolved readme: 'node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS.\nCurrently BER encoding is supported; at some point I\'ll likely have to do DER.\n\n## Usage\n\nMostly, if you\'re *actually* needing to read and write ASN.1, you probably don\'t\nneed this readme to explain what and why. If you have no idea what ASN.1 is,\nsee this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nThe source is pretty much self-explanatory, and has read/write methods for the\ncommon types out there.\n\n### Decoding\n\nThe following reads an ASN.1 sequence with a boolean.\n\n var Ber = require(\'asn1\').Ber;\n\n var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));\n\n reader.readSequence();\n console.log(\'Sequence len: \' + reader.length);\n if (reader.peek() === Ber.Boolean)\n console.log(reader.readBoolean());\n\n### Encoding\n\nThe following generates the same payload as above.\n\n var Ber = require(\'asn1\').Ber;\n\n var writer = new Ber.Writer();\n\n writer.startSequence();\n writer.writeBoolean(true);\n writer.endSequence();\n\n console.log(writer.buffer);\n\n## Installation\n\n npm install asn1\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-asn1/issues>.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/mcavage/node-asn1/issues' },
265 silly resolved homepage: 'https://github.com/mcavage/node-asn1',
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { name: 'pooling',
265 silly resolved description: 'General purpose resource pool API',
265 silly resolved version: '0.4.5',
265 silly resolved author: { name: 'Mark Cavage', email: '[email protected]' },
265 silly resolved main: 'lib/index.js',
265 silly resolved repository:
265 silly resolved { type: 'git',
265 silly resolved url: 'git://github.com/mcavage/node-pooling.git' },
265 silly resolved engines: { node: '>=0.8' },
265 silly resolved dependencies:
265 silly resolved { 'assert-plus': '0.1.4',
265 silly resolved 'dtrace-provider': '0.2.8',
265 silly resolved bunyan: '0.22.0',
265 silly resolved once: '1.3.0',
265 silly resolved vasync: '1.4.0' },
265 silly resolved devDependencies: { cover: '0.2.9', nodeunit: '0.8.1' },
265 silly resolved scripts: { test: './node_modules/.bin/nodeunit ./test/*.test.js | ./node_modules/.bin/bunyan' },
265 silly resolved readme: '# Overview\n\n[pooling](https://github.com/mcavage/node-pooling) is a small general purpose\nresource pooling library. It is heavily inspired from\n[James Cooper\'s](http://bitmechanic.com/) excellent\n[generic-pool](https://github.com/coopernurse/node-pool) library. This library\nwas written after using that library for some time and desiring extra\nfunctionality (namely watching events and health checking).\n\n# Usage\n\n var EventEmitter = require(\'events\').EventEmitter;\n var pooling = require(\'pooling\');\n\n var pool = pooling.createPool({\n checkInterval: 30000, // 30s (default is 30s)\n max: 10, // Default is 1\n maxIdleTime: 120000, // 2m (default is 1 hour)\n name: \'my pool\',\n\n // Health check. Call the callback with an Error if you want\n // to indicate this client should die. destroy will still be\n // called (i.e., don\'t "double free").\n //\n // This function is called when an object is unused for\n // >= maxIdleTime. If you don\'t provide a check function,\n // the default behavior is to mark the client for death.\n check: function check(client, callback) {\n if ((client.id % 2) !== 0)\n return callback(new Error());\n\n return callback(null);\n },\n\n // callback is of the form function (err, client).\n create: function create(callback) {\n var client = new EventEmitter();\n client.id = Math.floor(Math.random() * 1000);\n return callback(null, client);\n },\n\n // destroy is for you to do cleanup with; the pool will have already\n // discarded the object (hence no callback)\n destroy: function destroy(client) {\n client.was = client.id;\n client.id = -1;\n }\n });\n\n pool.on(\'create\', function (client) {\n console.log(\'client %d created\', client.id);\n });\n\n pool.on(\'death\', function (client) {\n console.log(\'client %d was killed\', client.was);\n });\n\n pool.on(\'drain\', function () {\n console.log(\'pool has no backlog or outstanding clients\');\n });\n\n pool.acquire(function (err, client) {\n if (err) {\n console.error(\'Unable to acquire: %s\', err.stack);\n process.exit(1);\n }\n\n pool.release(client);\n client.emit(\'error\', new Error(\'die now\'));\n });\n\n // Gracefully block future acquire calls and wait for clients to be\n // released\n pool.shutdown(function () {\n console.log(\'done\');\n process.exit(0);\n });\n\nBy default the pool will remove clients on `close`, `end`, `error` and `timeout`\nevents. You can override this by passing in an `events` array at pool creation\ntime. You can also pass in a [Bunyan](https://github.com/trentm/node-bunyan)\n`Logger` - `pooling` logs everything at the `trace` level.\n\n# Install\n\n npm install pooling\n\n# Development\n\nTo run unit tests and lint/style checks, just run:\n\n make prepush\n\nYou can generate coverage data by running:\n\n make cover\n\nAnd opening `./cover_data/index.html`.\n\n\n# License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the "Software"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/mcavage/node-pooling/issues' },
265 silly resolved homepage: 'https://github.com/mcavage/node-pooling',
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' },
265 silly resolved { name: 'nopt',
265 silly resolved version: '2.1.1',
265 silly resolved description: 'Option parsing for Node, supporting types, shorthands, etc. Used by npm.',
265 silly resolved author:
265 silly resolved { name: 'Isaac Z. Schlueter',
265 silly resolved email: '[email protected]',
265 silly resolved url: 'http://blog.izs.me/' },
265 silly resolved main: 'lib/nopt.js',
265 silly resolved scripts: { test: 'node lib/nopt.js' },
265 silly resolved repository: { type: 'git', url: 'http://github.com/isaacs/nopt' },
265 silly resolved bin: { nopt: './bin/nopt.js' },
265 silly resolved license:
265 silly resolved { type: 'MIT',
265 silly resolved url: 'https://github.com/isaacs/nopt/raw/master/LICENSE' },
265 silly resolved dependencies: { abbrev: '1' },
265 silly resolved readme: 'If you want to write an option parser, and have it be good, there are\ntwo ways to do it. The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser. We\'ve all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don\'t write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system. You probably won\'t end up with a\ngood one of those, but if you don\'t give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n // my-program.js\n var nopt = require("nopt")\n , Stream = require("stream").Stream\n , path = require("path")\n , knownOpts = { "foo" : [String, null]\n , "bar" : [Stream, Number]\n , "baz" : path\n , "bloo" : [ "big", "medium", "small" ]\n , "flag" : Boolean\n , "pick" : Boolean\n , "many" : [String, Array]\n }\n , shortHands = { "foofoo" : ["--foo", "Mr. Foo"]\n , "b7" : ["--bar", "7"]\n , "m" : ["--bloo", "medium"]\n , "p" : ["--pick"]\n , "f" : ["--flag"]\n }\n // everything is optional.\n // knownOpts and shorthands default to {}\n // arg list defaults to process.argv\n // slice defaults to 2\n , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo "blerp" --no-flag\n{ "foo" : "blerp", "flag" : false }\n\n$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag\n{ bar: 7, foo: "Mr. Hand", flag: true }\n\n$ node my-program.js --foo "blerp" -f -----p\n{ foo: "blerp", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: "Mr. Foo", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.\n{ foo: "Mr. Foo", argv: { remain: ["-fp"] } }\n\n$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --blatzk true -fp # but they need a value\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with "no-"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: "/Users/isaacs/b/a/z" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array. The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: ["1", "null", "foo"] }\n\n$ node my-program.js --many foo\n{ many: ["foo"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string. No parsing is done.\n* path: A file system path. Gets resolved against cwd if not absolute.\n* url: A url. If it doesn\'t parse, it isn\'t accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`. If an option is a boolean,\n then it does not need a value, and its presence will imply `true` as\n the value. To negate boolean flags, do `--no-whatever` or `--whatever\n false`\n* NaN: Means that the option is strictly not allowed. Any value will\n fail.\n* Stream: An object matching the "Stream" class in node. Valuable\n for use when validating programmatically. (npm uses this to let you\n supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n will be parsed as a list of options. This means that multiple values\n can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values. For instance, in the example above, the\n`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `"true"`, `"false"`, and `"null"` will be\ninterpreted as their JavaScript equivalents, and numeric values will be\ninterpreted as a number.\n\nYou can also mix types and values, or multiple types, in a list. For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null. When types are ordered, this implies a\npreference, and the first type that can be used to properly interpret\nthe value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`. Each item in that\nhash is an object with a `type` member and a `validate` method. The\n`type` member is an object that matches what goes in the type list. The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`. Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found. You can change this behavior by assigning a method\nto `nopt.invalidHandler`. This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining. If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported. If you define options like this:\n\n```javascript\n{ "foolhardyelephants" : Boolean\n, "pileofmonkeys" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts. For example:\n\n```json\n{ "s" : ["--loglevel", "silent"]\n, "g" : "--global"\n, "f" : "--force"\n, "p" : "--parseable"\n, "l" : "--long"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat\'s usually not very useful to you. So they\'re sliced off by\ndefault. If you want them, then you can pass in `0` as the last\nargument, or any other number that you\'d like to slice off the start of\nthe list.\n',
265 silly resolved readmeFilename: 'README.md',
265 silly resolved bugs: { url: 'https://github.com/isaacs/nopt/issues' },
265 silly resolved homepage: 'https://github.com/isaacs/nopt',
265 silly resolved _id: '[email protected]',
265 silly resolved _from: '[email protected]' } ]
266 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
267 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
268 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
269 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
270 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
271 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
272 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
273 info installOne [email protected]
274 info installOne [email protected]
275 info installOne [email protected]
276 info installOne [email protected]
277 info installOne [email protected]
278 info installOne [email protected]
279 info installOne [email protected]
280 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools unbuild
281 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider unbuild
282 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus unbuild
283 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/bunyan unbuild
284 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1 unbuild
285 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling unbuild
286 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt unbuild
287 verbose tar unpack /Users/sowens/.npm/buffertools/1.1.0/package.tgz
288 silly lockFile fb637819--ldapjs-node-modules-buffertools tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools
289 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools /Users/sowens/.npm/fb637819--ldapjs-node-modules-buffertools.lock
290 silly lockFile ac19bf52-pm-buffertools-1-1-0-package-tgz tar:///Users/sowens/.npm/buffertools/1.1.0/package.tgz
291 verbose lock tar:///Users/sowens/.npm/buffertools/1.1.0/package.tgz /Users/sowens/.npm/ac19bf52-pm-buffertools-1-1-0-package-tgz.lock
292 verbose tar unpack /Users/sowens/.npm/dtrace-provider/0.2.8/package.tgz
293 silly lockFile bb14b553-pjs-node-modules-dtrace-provider tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider
294 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider /Users/sowens/.npm/bb14b553-pjs-node-modules-dtrace-provider.lock
295 silly lockFile 9d2ecc80-trace-provider-0-2-8-package-tgz tar:///Users/sowens/.npm/dtrace-provider/0.2.8/package.tgz
296 verbose lock tar:///Users/sowens/.npm/dtrace-provider/0.2.8/package.tgz /Users/sowens/.npm/9d2ecc80-trace-provider-0-2-8-package-tgz.lock
297 verbose tar unpack /Users/sowens/.npm/assert-plus/0.1.2/package.tgz
298 silly lockFile 477eea73--ldapjs-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus
299 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus /Users/sowens/.npm/477eea73--ldapjs-node-modules-assert-plus.lock
300 silly lockFile 2bb3c6eb-pm-assert-plus-0-1-2-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.2/package.tgz
301 verbose lock tar:///Users/sowens/.npm/assert-plus/0.1.2/package.tgz /Users/sowens/.npm/2bb3c6eb-pm-assert-plus-0-1-2-package-tgz.lock
302 verbose tar unpack /Users/sowens/.npm/bunyan/0.21.1/package.tgz
303 silly lockFile 1ba23f3e-dules-ldapjs-node-modules-bunyan tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/bunyan
304 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/bunyan /Users/sowens/.npm/1ba23f3e-dules-ldapjs-node-modules-bunyan.lock
305 silly lockFile 0461352c-ns-npm-bunyan-0-21-1-package-tgz tar:///Users/sowens/.npm/bunyan/0.21.1/package.tgz
306 verbose lock tar:///Users/sowens/.npm/bunyan/0.21.1/package.tgz /Users/sowens/.npm/0461352c-ns-npm-bunyan-0-21-1-package-tgz.lock
307 verbose tar unpack /Users/sowens/.npm/asn1/0.1.11/package.tgz
308 silly lockFile e121b6c5-modules-ldapjs-node-modules-asn1 tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1
309 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1 /Users/sowens/.npm/e121b6c5-modules-ldapjs-node-modules-asn1.lock
310 silly lockFile 0c0ec630-wens-npm-asn1-0-1-11-package-tgz tar:///Users/sowens/.npm/asn1/0.1.11/package.tgz
311 verbose lock tar:///Users/sowens/.npm/asn1/0.1.11/package.tgz /Users/sowens/.npm/0c0ec630-wens-npm-asn1-0-1-11-package-tgz.lock
312 verbose tar unpack /Users/sowens/.npm/pooling/0.4.5/package.tgz
313 silly lockFile ea90e018-ules-ldapjs-node-modules-pooling tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
314 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling /Users/sowens/.npm/ea90e018-ules-ldapjs-node-modules-pooling.lock
315 silly lockFile 2675746a-ns-npm-pooling-0-4-5-package-tgz tar:///Users/sowens/.npm/pooling/0.4.5/package.tgz
316 verbose lock tar:///Users/sowens/.npm/pooling/0.4.5/package.tgz /Users/sowens/.npm/2675746a-ns-npm-pooling-0-4-5-package-tgz.lock
317 verbose tar unpack /Users/sowens/.npm/nopt/2.1.1/package.tgz
318 silly lockFile 0a40e632-modules-ldapjs-node-modules-nopt tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
319 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt /Users/sowens/.npm/0a40e632-modules-ldapjs-node-modules-nopt.lock
320 silly lockFile 0af9fdc1-owens-npm-nopt-2-1-1-package-tgz tar:///Users/sowens/.npm/nopt/2.1.1/package.tgz
321 verbose lock tar:///Users/sowens/.npm/nopt/2.1.1/package.tgz /Users/sowens/.npm/0af9fdc1-owens-npm-nopt-2-1-1-package-tgz.lock
322 silly gunzTarPerm modes [ '755', '644' ]
323 silly gunzTarPerm modes [ '755', '644' ]
324 silly gunzTarPerm modes [ '755', '644' ]
325 silly gunzTarPerm modes [ '755', '644' ]
326 silly gunzTarPerm modes [ '755', '644' ]
327 silly gunzTarPerm modes [ '755', '644' ]
328 silly gunzTarPerm modes [ '755', '644' ]
329 silly gunzTarPerm extractEntry package.json
330 silly gunzTarPerm extractEntry package.json
331 silly gunzTarPerm extractEntry package.json
332 silly gunzTarPerm extractEntry package.json
333 silly gunzTarPerm extractEntry package.json
334 silly gunzTarPerm extractEntry package.json
335 silly gunzTarPerm extractEntry package.json
336 silly gunzTarPerm extractEntry .npmignore
337 silly gunzTarPerm extractEntry README.md
338 silly gunzTarPerm extractEntry .npmignore
339 silly gunzTarPerm extractEntry README.md
340 silly gunzTarPerm extractEntry README.md
341 silly gunzTarPerm extractEntry assert.js
342 silly gunzTarPerm extractEntry .npmignore
343 silly gunzTarPerm extractEntry README.md
344 silly gunzTarPerm extractEntry .npmignore
345 silly gunzTarPerm extractEntry README.md
346 silly gunzTarPerm extractEntry .npmignore
347 silly gunzTarPerm extractEntry README.md
348 silly gunzTarPerm extractEntry .npmignore
349 silly gunzTarPerm extractEntry README.md
350 silly gunzTarPerm extractEntry buffertools.js
351 silly gunzTarPerm extractEntry test.js
352 silly gunzTarPerm extractEntry binding.gyp
353 silly gunzTarPerm extractEntry buffertools.cc
354 silly gunzTarPerm extractEntry BoyerMoore.h
355 silly gunzTarPerm extractEntry .mailmap
356 silly gunzTarPerm extractEntry AUTHORS
357 silly gunzTarPerm extractEntry wscript
358 silly gunzTarPerm extractEntry LICENCE
359 silly gunzTarPerm extractEntry dtrace-provider.js
360 silly gunzTarPerm extractEntry foo.js
361 silly gunzTarPerm extractEntry libusdt-arch.js
362 silly gunzTarPerm extractEntry dtrace_probe.cc
363 silly gunzTarPerm extractEntry .gitmodules
364 silly gunzTarPerm extractEntry dtrace_argument.cc
365 silly gunzTarPerm extractEntry CHANGES.md
366 silly gunzTarPerm extractEntry dtrace_provider.cc
367 silly gunzTarPerm extractEntry dtrace_provider.h
368 silly gunzTarPerm extractEntry README.md~
369 silly gunzTarPerm extractEntry libusdt/.npmignore
370 silly gunzTarPerm extractEntry libusdt/README.md
371 silly gunzTarPerm extractEntry libusdt/LICENCE
372 silly gunzTarPerm extractEntry libusdt/usdt_tracepoints_x86_64.s
373 silly gunzTarPerm extractEntry libusdt/test.pl
374 silly gunzTarPerm extractEntry libusdt/test_mem_usage.c
375 silly gunzTarPerm extractEntry libusdt/test_usdt.c
376 silly gunzTarPerm extractEntry libusdt/usdt.c
377 silly gunzTarPerm extractEntry libusdt/Makefile
378 silly gunzTarPerm extractEntry libusdt/usdt_dof.c
379 silly gunzTarPerm extractEntry libusdt/usdt_dof_file.c
380 silly gunzTarPerm extractEntry libusdt/usdt_dof_sections.c
381 silly gunzTarPerm extractEntry libusdt/usdt_internal.h
382 silly gunzTarPerm extractEntry libusdt/usdt_probe.c
383 silly gunzTarPerm extractEntry libusdt/usdt_tracepoints_i386.s
384 silly gunzTarPerm extractEntry libusdt/usdt.h
385 silly gunzTarPerm extractEntry TODO.md
386 silly gunzTarPerm extractEntry libusdt-build.sh
387 silly gunzTarPerm extractEntry binding.gyp
388 silly gunzTarPerm extractEntry test/32probe-char.test.js
389 silly gunzTarPerm extractEntry test/enabledagain.test.js
390 silly gunzTarPerm extractEntry test/enabledagain_fire.js
391 silly gunzTarPerm extractEntry test/fewer-args-json.test.js
392 silly gunzTarPerm extractEntry test/fewer-args-json_fire.js
393 silly gunzTarPerm extractEntry test/enabled-disabled_fire.js
394 silly gunzTarPerm extractEntry test/fewer-args_fire.js
395 silly gunzTarPerm extractEntry test/gc.js
396 silly gunzTarPerm extractEntry test/gc.test.js
397 silly gunzTarPerm extractEntry test/gc2.js
398 silly gunzTarPerm extractEntry test/gc3.js
399 silly gunzTarPerm extractEntry test/enabled-disabled.test.js
400 silly gunzTarPerm extractEntry test/gc_fire.js
401 silly gunzTarPerm extractEntry test/dtrace-test.js
402 silly gunzTarPerm extractEntry test/json-args.test.js
403 silly gunzTarPerm extractEntry test/disambiguation_fire.js
404 silly gunzTarPerm extractEntry test/json-args_fire.js
405 silly gunzTarPerm extractEntry test/disambiguation.test.js
406 silly gunzTarPerm extractEntry test/mem.js
407 silly gunzTarPerm extractEntry test/basic_fire.js
408 silly gunzTarPerm extractEntry test/more-args.test.js
409 silly gunzTarPerm extractEntry test/basic.test.js
410 silly gunzTarPerm extractEntry test/more-args_fire.js
411 silly gunzTarPerm extractEntry test/32probe_fire.js
412 silly gunzTarPerm extractEntry test/multiple-json-args.test.js
413 silly gunzTarPerm extractEntry test/32probe.test.js
414 silly gunzTarPerm extractEntry test/multiple-json-args_fire.js
415 silly gunzTarPerm extractEntry test/32probe-char_fire.js
416 silly gunzTarPerm extractEntry test/notenabled.test.js
417 silly gunzTarPerm extractEntry test/fewer-args.test.js
418 silly gunzTarPerm extractEntry wscript
419 silly gunzTarPerm extractEntry LICENSE.txt
420 silly gunzTarPerm extractEntry LICENSE
421 silly gunzTarPerm extractEntry LICENSE
422 silly gunzTarPerm extractEntry lib/index.js
423 silly gunzTarPerm extractEntry lib/ber/errors.js
424 silly gunzTarPerm extractEntry lib/ber/index.js
425 silly gunzTarPerm extractEntry lib/ber/reader.js
426 silly gunzTarPerm extractEntry lib/ber/types.js
427 silly gunzTarPerm extractEntry lib/ber/writer.js
428 silly gunzTarPerm extractEntry tst/ber/reader.test.js
429 silly gunzTarPerm extractEntry tst/ber/writer.test.js
430 silly gunzTarPerm extractEntry .dir-locals.el
431 silly gunzTarPerm extractEntry lib/index.js
432 silly gunzTarPerm extractEntry lib/pool.js
433 silly gunzTarPerm extractEntry bin/nopt.js
434 silly gunzTarPerm extractEntry examples/my-program.js
435 silly gunzTarPerm extractEntry Makefile
436 silly gunzTarPerm extractEntry tools/timechild.js
437 silly gunzTarPerm extractEntry lib/nopt.js
438 silly lockFile 477eea73--ldapjs-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus
439 silly lockFile 477eea73--ldapjs-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus
440 silly lockFile 2bb3c6eb-pm-assert-plus-0-1-2-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.2/package.tgz
441 silly lockFile 2bb3c6eb-pm-assert-plus-0-1-2-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.2/package.tgz
442 info preinstall [email protected]
443 verbose readDependencies using package.json deps
444 verbose readDependencies using package.json deps
445 silly resolved []
446 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus
447 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/assert-plus
448 verbose linkStuff [ false,
448 verbose linkStuff false,
448 verbose linkStuff false,
448 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules' ]
449 info linkStuff [email protected]
450 verbose linkBins [email protected]
451 verbose linkMans [email protected]
452 verbose rebuildBundles [email protected]
453 info install [email protected]
454 info postinstall [email protected]
455 silly gunzTarPerm extractEntry tools/timeguard.js
456 silly gunzTarPerm extractEntry tools/timesrc.js
457 silly gunzTarPerm extractEntry tools/cutarelease.py
458 silly gunzTarPerm extractEntry tools/jsstyle
459 silly lockFile ea90e018-ules-ldapjs-node-modules-pooling tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
460 silly lockFile ea90e018-ules-ldapjs-node-modules-pooling tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
461 silly lockFile 2675746a-ns-npm-pooling-0-4-5-package-tgz tar:///Users/sowens/.npm/pooling/0.4.5/package.tgz
462 silly lockFile 2675746a-ns-npm-pooling-0-4-5-package-tgz tar:///Users/sowens/.npm/pooling/0.4.5/package.tgz
463 info preinstall [email protected]
464 silly gunzTarPerm extractEntry tools/screenshot1.png
465 silly gunzTarPerm extractEntry tools/statsd-notes.txt
466 verbose readDependencies using package.json deps
467 verbose readDependencies using package.json deps
468 silly lockFile 0a40e632-modules-ldapjs-node-modules-nopt tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
469 silly lockFile 0a40e632-modules-ldapjs-node-modules-nopt tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
470 verbose cache add [ '[email protected]', null ]
471 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
472 verbose parsed url { protocol: null,
472 verbose parsed url slashes: null,
472 verbose parsed url auth: null,
472 verbose parsed url host: null,
472 verbose parsed url port: null,
472 verbose parsed url hostname: null,
472 verbose parsed url hash: null,
472 verbose parsed url search: null,
472 verbose parsed url query: null,
472 verbose parsed url pathname: '[email protected]',
472 verbose parsed url path: '[email protected]',
472 verbose parsed url href: '[email protected]' }
473 verbose cache add name="assert-plus" spec="0.1.4" args=["assert-plus","0.1.4"]
474 verbose parsed url { protocol: null,
474 verbose parsed url slashes: null,
474 verbose parsed url auth: null,
474 verbose parsed url host: null,
474 verbose parsed url port: null,
474 verbose parsed url hostname: null,
474 verbose parsed url hash: null,
474 verbose parsed url search: null,
474 verbose parsed url query: null,
474 verbose parsed url pathname: '0.1.4',
474 verbose parsed url path: '0.1.4',
474 verbose parsed url href: '0.1.4' }
475 verbose addNamed [ 'assert-plus', '0.1.4' ]
476 verbose addNamed [ '0.1.4', '0.1.4' ]
477 silly lockFile eaee3a87-assert-plus-0-1-4 [email protected]
478 verbose lock [email protected] /Users/sowens/.npm/eaee3a87-assert-plus-0-1-4.lock
479 verbose cache add [ '[email protected]', null ]
480 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
481 verbose parsed url { protocol: null,
481 verbose parsed url slashes: null,
481 verbose parsed url auth: null,
481 verbose parsed url host: null,
481 verbose parsed url port: null,
481 verbose parsed url hostname: null,
481 verbose parsed url hash: null,
481 verbose parsed url search: null,
481 verbose parsed url query: null,
481 verbose parsed url pathname: '[email protected]',
481 verbose parsed url path: '[email protected]',
481 verbose parsed url href: '[email protected]' }
482 verbose cache add name="bunyan" spec="0.22.0" args=["bunyan","0.22.0"]
483 verbose parsed url { protocol: null,
483 verbose parsed url slashes: null,
483 verbose parsed url auth: null,
483 verbose parsed url host: null,
483 verbose parsed url port: null,
483 verbose parsed url hostname: null,
483 verbose parsed url hash: null,
483 verbose parsed url search: null,
483 verbose parsed url query: null,
483 verbose parsed url pathname: '0.22.0',
483 verbose parsed url path: '0.22.0',
483 verbose parsed url href: '0.22.0' }
484 verbose addNamed [ 'bunyan', '0.22.0' ]
485 verbose addNamed [ '0.22.0', '0.22.0' ]
486 silly lockFile f54de0af-bunyan-0-22-0 [email protected]
487 verbose lock [email protected] /Users/sowens/.npm/f54de0af-bunyan-0-22-0.lock
488 silly lockFile 0af9fdc1-owens-npm-nopt-2-1-1-package-tgz tar:///Users/sowens/.npm/nopt/2.1.1/package.tgz
489 silly lockFile 0af9fdc1-owens-npm-nopt-2-1-1-package-tgz tar:///Users/sowens/.npm/nopt/2.1.1/package.tgz
490 verbose cache add [ '[email protected]', null ]
491 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
492 verbose parsed url { protocol: null,
492 verbose parsed url slashes: null,
492 verbose parsed url auth: null,
492 verbose parsed url host: null,
492 verbose parsed url port: null,
492 verbose parsed url hostname: null,
492 verbose parsed url hash: null,
492 verbose parsed url search: null,
492 verbose parsed url query: null,
492 verbose parsed url pathname: '[email protected]',
492 verbose parsed url path: '[email protected]',
492 verbose parsed url href: '[email protected]' }
493 verbose cache add name="once" spec="1.3.0" args=["once","1.3.0"]
494 verbose parsed url { protocol: null,
494 verbose parsed url slashes: null,
494 verbose parsed url auth: null,
494 verbose parsed url host: null,
494 verbose parsed url port: null,
494 verbose parsed url hostname: null,
494 verbose parsed url hash: null,
494 verbose parsed url search: null,
494 verbose parsed url query: null,
494 verbose parsed url pathname: '1.3.0',
494 verbose parsed url path: '1.3.0',
494 verbose parsed url href: '1.3.0' }
495 verbose addNamed [ 'once', '1.3.0' ]
496 verbose addNamed [ '1.3.0', '1.3.0' ]
497 silly lockFile 13f9355b-once-1-3-0 [email protected]
498 verbose lock [email protected] /Users/sowens/.npm/13f9355b-once-1-3-0.lock
499 verbose cache add [ '[email protected]', null ]
500 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
501 verbose parsed url { protocol: null,
501 verbose parsed url slashes: null,
501 verbose parsed url auth: null,
501 verbose parsed url host: null,
501 verbose parsed url port: null,
501 verbose parsed url hostname: null,
501 verbose parsed url hash: null,
501 verbose parsed url search: null,
501 verbose parsed url query: null,
501 verbose parsed url pathname: '[email protected]',
501 verbose parsed url path: '[email protected]',
501 verbose parsed url href: '[email protected]' }
502 verbose cache add name="vasync" spec="1.4.0" args=["vasync","1.4.0"]
503 verbose parsed url { protocol: null,
503 verbose parsed url slashes: null,
503 verbose parsed url auth: null,
503 verbose parsed url host: null,
503 verbose parsed url port: null,
503 verbose parsed url hostname: null,
503 verbose parsed url hash: null,
503 verbose parsed url search: null,
503 verbose parsed url query: null,
503 verbose parsed url pathname: '1.4.0',
503 verbose parsed url path: '1.4.0',
503 verbose parsed url href: '1.4.0' }
504 verbose addNamed [ 'vasync', '1.4.0' ]
505 verbose addNamed [ '1.4.0', '1.4.0' ]
506 silly lockFile be7db8cf-vasync-1-4-0 [email protected]
507 verbose lock [email protected] /Users/sowens/.npm/be7db8cf-vasync-1-4-0.lock
508 verbose url raw assert-plus/0.1.4
509 verbose url resolving [ 'https://registry.npmjs.org/', './assert-plus/0.1.4' ]
510 verbose url resolved https://registry.npmjs.org/assert-plus/0.1.4
511 info trying registry request attempt 1 at 12:26:45
512 verbose etag "8JQD6UZQ7AETWZEZUUAGB1E5M"
513 http GET https://registry.npmjs.org/assert-plus/0.1.4
514 verbose url raw bunyan/0.22.0
515 verbose url resolving [ 'https://registry.npmjs.org/', './bunyan/0.22.0' ]
516 verbose url resolved https://registry.npmjs.org/bunyan/0.22.0
517 info trying registry request attempt 1 at 12:26:45
518 verbose etag "C1V3FPE0LJR3DHMZ83XCQCFDE"
519 http GET https://registry.npmjs.org/bunyan/0.22.0
520 info preinstall [email protected]
521 verbose url raw once/1.3.0
522 verbose url resolving [ 'https://registry.npmjs.org/', './once/1.3.0' ]
523 verbose url resolved https://registry.npmjs.org/once/1.3.0
524 info trying registry request attempt 1 at 12:26:45
525 verbose etag "1TN01NU8A4O8TWEZ600CSM4MX"
526 http GET https://registry.npmjs.org/once/1.3.0
527 verbose url raw vasync/1.4.0
528 verbose url resolving [ 'https://registry.npmjs.org/', './vasync/1.4.0' ]
529 verbose url resolved https://registry.npmjs.org/vasync/1.4.0
530 info trying registry request attempt 1 at 12:26:45
531 verbose etag "6XAKJMYCLTQ3TEZNXJOLDU39W"
532 http GET https://registry.npmjs.org/vasync/1.4.0
533 verbose readDependencies using package.json deps
534 verbose readDependencies using package.json deps
535 silly gunzTarPerm extractEntry TODO.md
536 silly gunzTarPerm extractEntry AUTHORS
537 silly gunzTarPerm extractEntry docs/bunyan.1
538 silly gunzTarPerm extractEntry docs/bunyan.1.html
539 silly gunzTarPerm extractEntry docs/bunyan.1.ronn
540 silly gunzTarPerm extractEntry docs/index.html
541 silly gunzTarPerm extractEntry examples/err.js
542 silly gunzTarPerm extractEntry examples/hi.js
543 silly gunzTarPerm extractEntry examples/level.js
544 silly gunzTarPerm extractEntry examples/long-running.js
545 silly gunzTarPerm extractEntry examples/handle-fs-error.js
546 silly gunzTarPerm extractEntry examples/raw-stream.js
547 silly gunzTarPerm extractEntry examples/ringbuffer.js
548 silly gunzTarPerm extractEntry examples/server.js
549 silly gunzTarPerm extractEntry examples/src.js
550 silly gunzTarPerm extractEntry examples/unstringifyable.js
551 silly gunzTarPerm extractEntry examples/multi.js
552 silly gunzTarPerm extractEntry lib/bunyan.js
553 silly gunzTarPerm extractEntry CHANGES.md
554 silly gunzTarPerm extractEntry test/buffer.test.js
555 silly gunzTarPerm extractEntry test/serializers.test.js
556 silly gunzTarPerm extractEntry test/ctor.test.js
557 silly gunzTarPerm extractEntry test/cycles.test.js
558 silly gunzTarPerm extractEntry test/dtrace.test.js
559 silly gunzTarPerm extractEntry test/cli.test.js
560 silly gunzTarPerm extractEntry test/log-some.js
561 silly gunzTarPerm extractEntry test/log.test.js
562 silly gunzTarPerm extractEntry test/other-api.test.js
563 silly gunzTarPerm extractEntry test/raw-stream.test.js
564 silly gunzTarPerm extractEntry test/ringbuffer.test.js
565 silly gunzTarPerm extractEntry test/child-behaviour.test.js
566 silly gunzTarPerm extractEntry test/tap4nodeunit.js
567 silly gunzTarPerm extractEntry test/error-event.test.js
568 silly gunzTarPerm extractEntry test/corpus/all.log
569 silly gunzTarPerm extractEntry test/corpus/bogus.log
570 silly gunzTarPerm extractEntry test/corpus/extrafield.log
571 silly gunzTarPerm extractEntry test/corpus/log1.log
572 silly gunzTarPerm extractEntry test/corpus/log1.log.gz
573 silly gunzTarPerm extractEntry test/corpus/log2.log
574 silly gunzTarPerm extractEntry test/corpus/non-object-res.log
575 silly gunzTarPerm extractEntry test/corpus/simple.log
576 silly gunzTarPerm extractEntry test/corpus/withreq.log
577 silly gunzTarPerm extractEntry bin/bunyan
578 verbose cache add [ 'abbrev@1', null ]
579 verbose cache add name=undefined spec="abbrev@1" args=["abbrev@1",null]
580 verbose parsed url { protocol: null,
580 verbose parsed url slashes: null,
580 verbose parsed url auth: null,
580 verbose parsed url host: null,
580 verbose parsed url port: null,
580 verbose parsed url hostname: null,
580 verbose parsed url hash: null,
580 verbose parsed url search: null,
580 verbose parsed url query: null,
580 verbose parsed url pathname: 'abbrev@1',
580 verbose parsed url path: 'abbrev@1',
580 verbose parsed url href: 'abbrev@1' }
581 verbose cache add name="abbrev" spec="1" args=["abbrev","1"]
582 verbose parsed url { protocol: null,
582 verbose parsed url slashes: null,
582 verbose parsed url auth: null,
582 verbose parsed url host: null,
582 verbose parsed url port: null,
582 verbose parsed url hostname: null,
582 verbose parsed url hash: null,
582 verbose parsed url search: null,
582 verbose parsed url query: null,
582 verbose parsed url pathname: '1',
582 verbose parsed url path: '1',
582 verbose parsed url href: '1' }
583 verbose addNamed [ 'abbrev', '1' ]
584 verbose addNamed [ null, '>=1.0.0-0 <2.0.0-0' ]
585 silly lockFile 6830b531-abbrev-1 abbrev@1
586 verbose lock abbrev@1 /Users/sowens/.npm/6830b531-abbrev-1.lock
587 silly addNameRange { name: 'abbrev', range: '>=1.0.0-0 <2.0.0-0', hasData: false }
588 verbose url raw abbrev
589 verbose url resolving [ 'https://registry.npmjs.org/', './abbrev' ]
590 verbose url resolved https://registry.npmjs.org/abbrev
591 info trying registry request attempt 1 at 12:26:45
592 verbose etag "70SD9427FSZCH2QOPWNLAFEH"
593 http GET https://registry.npmjs.org/abbrev
594 silly lockFile fb637819--ldapjs-node-modules-buffertools tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools
595 silly lockFile fb637819--ldapjs-node-modules-buffertools tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools
596 silly lockFile ac19bf52-pm-buffertools-1-1-0-package-tgz tar:///Users/sowens/.npm/buffertools/1.1.0/package.tgz
597 silly lockFile ac19bf52-pm-buffertools-1-1-0-package-tgz tar:///Users/sowens/.npm/buffertools/1.1.0/package.tgz
598 info preinstall [email protected]
599 verbose readDependencies using package.json deps
600 verbose readDependencies using package.json deps
601 silly resolved []
602 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools
603 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools
604 verbose linkStuff [ false,
604 verbose linkStuff false,
604 verbose linkStuff false,
604 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules' ]
605 info linkStuff [email protected]
606 verbose linkBins [email protected]
607 verbose linkMans [email protected]
608 verbose rebuildBundles [email protected]
609 info install [email protected]
610 verbose unsafe-perm in lifecycle false
611 silly lockFile e121b6c5-modules-ldapjs-node-modules-asn1 tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1
612 silly lockFile e121b6c5-modules-ldapjs-node-modules-asn1 tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1
613 silly lockFile 0c0ec630-wens-npm-asn1-0-1-11-package-tgz tar:///Users/sowens/.npm/asn1/0.1.11/package.tgz
614 silly lockFile 0c0ec630-wens-npm-asn1-0-1-11-package-tgz tar:///Users/sowens/.npm/asn1/0.1.11/package.tgz
615 info preinstall [email protected]
616 verbose readDependencies using package.json deps
617 verbose readDependencies using package.json deps
618 silly resolved []
619 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1
620 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/asn1
621 verbose linkStuff [ false,
621 verbose linkStuff false,
621 verbose linkStuff false,
621 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules' ]
622 info linkStuff [email protected]
623 verbose linkBins [email protected]
624 verbose linkMans [email protected]
625 verbose rebuildBundles [email protected]
626 info install [email protected]
627 info postinstall [email protected]
628 silly lockFile bb14b553-pjs-node-modules-dtrace-provider tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider
629 silly lockFile bb14b553-pjs-node-modules-dtrace-provider tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider
630 silly lockFile 9d2ecc80-trace-provider-0-2-8-package-tgz tar:///Users/sowens/.npm/dtrace-provider/0.2.8/package.tgz
631 silly lockFile 9d2ecc80-trace-provider-0-2-8-package-tgz tar:///Users/sowens/.npm/dtrace-provider/0.2.8/package.tgz
632 info preinstall [email protected]
633 verbose readDependencies using package.json deps
634 verbose readDependencies using package.json deps
635 silly resolved []
636 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider
637 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/dtrace-provider
638 verbose linkStuff [ false,
638 verbose linkStuff false,
638 verbose linkStuff false,
638 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules' ]
639 info linkStuff [email protected]
640 verbose linkBins [email protected]
641 verbose linkMans [email protected]
642 verbose rebuildBundles [email protected]
643 info install [email protected]
644 silly lockFile 1ba23f3e-dules-ldapjs-node-modules-bunyan tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/bunyan
645 silly lockFile 1ba23f3e-dules-ldapjs-node-modules-bunyan tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/bunyan
646 silly lockFile 0461352c-ns-npm-bunyan-0-21-1-package-tgz tar:///Users/sowens/.npm/bunyan/0.21.1/package.tgz
647 silly lockFile 0461352c-ns-npm-bunyan-0-21-1-package-tgz tar:///Users/sowens/.npm/bunyan/0.21.1/package.tgz
648 info preinstall [email protected]
649 verbose readDependencies using package.json deps
650 verbose readDependencies using package.json deps
651 verbose cache add [ '[email protected]', null ]
652 verbose cache add name=undefined spec="[email protected]" args=["[email protected]",null]
653 verbose parsed url { protocol: null,
653 verbose parsed url slashes: null,
653 verbose parsed url auth: null,
653 verbose parsed url host: null,
653 verbose parsed url port: null,
653 verbose parsed url hostname: null,
653 verbose parsed url hash: null,
653 verbose parsed url search: null,
653 verbose parsed url query: null,
653 verbose parsed url pathname: '[email protected]',
653 verbose parsed url path: '[email protected]',
653 verbose parsed url href: '[email protected]' }
654 verbose cache add name="mv" spec="0.0.5" args=["mv","0.0.5"]
655 verbose parsed url { protocol: null,
655 verbose parsed url slashes: null,
655 verbose parsed url auth: null,
655 verbose parsed url host: null,
655 verbose parsed url port: null,
655 verbose parsed url hostname: null,
655 verbose parsed url hash: null,
655 verbose parsed url search: null,
655 verbose parsed url query: null,
655 verbose parsed url pathname: '0.0.5',
655 verbose parsed url path: '0.0.5',
655 verbose parsed url href: '0.0.5' }
656 verbose addNamed [ 'mv', '0.0.5' ]
657 verbose addNamed [ '0.0.5', '0.0.5' ]
658 silly lockFile 79ad74e7-mv-0-0-5 [email protected]
659 verbose lock [email protected] /Users/sowens/.npm/79ad74e7-mv-0-0-5.lock
660 verbose url raw mv/0.0.5
661 verbose url resolving [ 'https://registry.npmjs.org/', './mv/0.0.5' ]
662 verbose url resolved https://registry.npmjs.org/mv/0.0.5
663 info trying registry request attempt 1 at 12:26:45
664 verbose etag "AYD8J41KPBO7E21634BWK1J1S"
665 http GET https://registry.npmjs.org/mv/0.0.5
666 http 304 https://registry.npmjs.org/once/1.3.0
667 silly registry.get cb [ 304,
667 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:45 GMT',
667 silly registry.get server: 'Apache',
667 silly registry.get connection: 'close',
667 silly registry.get etag: '"1TN01NU8A4O8TWEZ600CSM4MX"',
667 silly registry.get 'cache-control': 'max-age=1',
667 silly registry.get vary: 'Accept' } ]
668 verbose etag once/1.3.0 from cache
669 silly lockFile 13f9355b-once-1-3-0 [email protected]
670 silly lockFile 13f9355b-once-1-3-0 [email protected]
671 http 304 https://registry.npmjs.org/vasync/1.4.0
672 silly registry.get cb [ 304,
672 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:45 GMT',
672 silly registry.get server: 'Apache',
672 silly registry.get connection: 'close',
672 silly registry.get etag: '"6XAKJMYCLTQ3TEZNXJOLDU39W"',
672 silly registry.get 'cache-control': 'max-age=1',
672 silly registry.get vary: 'Accept' } ]
673 verbose etag vasync/1.4.0 from cache
674 silly lockFile be7db8cf-vasync-1-4-0 [email protected]
675 silly lockFile be7db8cf-vasync-1-4-0 [email protected]
676 http 304 https://registry.npmjs.org/abbrev
677 silly registry.get cb [ 304,
677 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:45 GMT',
677 silly registry.get server: 'Apache',
677 silly registry.get connection: 'close',
677 silly registry.get etag: '"70SD9427FSZCH2QOPWNLAFEH"',
677 silly registry.get 'cache-control': 'max-age=1',
677 silly registry.get vary: 'Accept' } ]
678 verbose etag abbrev from cache
679 silly addNameRange number 2 { name: 'abbrev', range: '>=1.0.0-0 <2.0.0-0', hasData: true }
680 silly addNameRange versions [ 'abbrev', [ '1.0.3', '1.0.4' ] ]
681 verbose addNamed [ 'abbrev', '1.0.4' ]
682 verbose addNamed [ '1.0.4', '1.0.4' ]
683 silly lockFile 64a4e3a6-abbrev-1-0-4 [email protected]
684 verbose lock [email protected] /Users/sowens/.npm/64a4e3a6-abbrev-1-0-4.lock
685 silly lockFile 64a4e3a6-abbrev-1-0-4 [email protected]
686 silly lockFile 64a4e3a6-abbrev-1-0-4 [email protected]
687 silly lockFile 6830b531-abbrev-1 abbrev@1
688 silly lockFile 6830b531-abbrev-1 abbrev@1
689 silly resolved [ { name: 'abbrev',
689 silly resolved version: '1.0.4',
689 silly resolved description: 'Like ruby\'s abbrev module, but in js',
689 silly resolved author: { name: 'Isaac Z. Schlueter', email: '[email protected]' },
689 silly resolved main: './lib/abbrev.js',
689 silly resolved scripts: { test: 'node lib/abbrev.js' },
689 silly resolved repository: { type: 'git', url: 'http://github.com/isaacs/abbrev-js' },
689 silly resolved license:
689 silly resolved { type: 'MIT',
689 silly resolved url: 'https://github.com/isaacs/abbrev-js/raw/master/LICENSE' },
689 silly resolved readme: '# abbrev-js\n\nJust like [ruby\'s Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n var abbrev = require("abbrev");\n abbrev("foo", "fool", "folding", "flop");\n \n // returns:\n { fl: \'flop\'\n , flo: \'flop\'\n , flop: \'flop\'\n , fol: \'folding\'\n , fold: \'folding\'\n , foldi: \'folding\'\n , foldin: \'folding\'\n , folding: \'folding\'\n , foo: \'foo\'\n , fool: \'fool\'\n }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n',
689 silly resolved readmeFilename: 'README.md',
689 silly resolved bugs: { url: 'https://github.com/isaacs/abbrev-js/issues' },
689 silly resolved homepage: 'https://github.com/isaacs/abbrev-js',
689 silly resolved _id: '[email protected]',
689 silly resolved _from: 'abbrev@1' } ]
690 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
691 info installOne [email protected]
692 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev unbuild
693 verbose tar unpack /Users/sowens/.npm/abbrev/1.0.4/package.tgz
694 silly lockFile 5e929a6d-modules-nopt-node-modules-abbrev tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev
695 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev /Users/sowens/.npm/5e929a6d-modules-nopt-node-modules-abbrev.lock
696 silly lockFile 4df39ef5-ens-npm-abbrev-1-0-4-package-tgz tar:///Users/sowens/.npm/abbrev/1.0.4/package.tgz
697 verbose lock tar:///Users/sowens/.npm/abbrev/1.0.4/package.tgz /Users/sowens/.npm/4df39ef5-ens-npm-abbrev-1-0-4-package-tgz.lock
698 silly gunzTarPerm modes [ '755', '644' ]
699 silly gunzTarPerm extractEntry package.json
700 silly gunzTarPerm extractEntry README.md
701 silly gunzTarPerm extractEntry LICENSE
702 silly gunzTarPerm extractEntry lib/abbrev.js
703 silly lockFile 5e929a6d-modules-nopt-node-modules-abbrev tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev
704 silly lockFile 5e929a6d-modules-nopt-node-modules-abbrev tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev
705 http 304 https://registry.npmjs.org/assert-plus/0.1.4
706 silly registry.get cb [ 304,
706 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:45 GMT',
706 silly registry.get server: 'Apache',
706 silly registry.get connection: 'close',
706 silly registry.get etag: '"8JQD6UZQ7AETWZEZUUAGB1E5M"',
706 silly registry.get 'cache-control': 'max-age=1',
706 silly registry.get vary: 'Accept' } ]
707 verbose etag assert-plus/0.1.4 from cache
708 silly lockFile 4df39ef5-ens-npm-abbrev-1-0-4-package-tgz tar:///Users/sowens/.npm/abbrev/1.0.4/package.tgz
709 silly lockFile 4df39ef5-ens-npm-abbrev-1-0-4-package-tgz tar:///Users/sowens/.npm/abbrev/1.0.4/package.tgz
710 info preinstall [email protected]
711 verbose readDependencies using package.json deps
712 verbose readDependencies using package.json deps
713 silly resolved []
714 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev
715 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules/abbrev
716 verbose linkStuff [ false,
716 verbose linkStuff false,
716 verbose linkStuff false,
716 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt/node_modules' ]
717 info linkStuff [email protected]
718 verbose linkBins [email protected]
719 verbose linkMans [email protected]
720 verbose rebuildBundles [email protected]
721 info install [email protected]
722 info postinstall [email protected]
723 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
724 info build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/nopt
725 verbose linkStuff [ false,
725 verbose linkStuff false,
725 verbose linkStuff false,
725 verbose linkStuff '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules' ]
726 info linkStuff [email protected]
727 verbose linkBins [email protected]
728 verbose link bins [ { nopt: './bin/nopt.js' },
728 verbose link bins '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/.bin',
728 verbose link bins false ]
729 verbose linkMans [email protected]
730 verbose rebuildBundles [email protected]
731 verbose rebuildBundles [ 'abbrev' ]
732 info install [email protected]
733 info postinstall [email protected]
734 silly lockFile eaee3a87-assert-plus-0-1-4 [email protected]
735 silly lockFile eaee3a87-assert-plus-0-1-4 [email protected]
736 http 304 https://registry.npmjs.org/bunyan/0.22.0
737 silly registry.get cb [ 304,
737 silly registry.get { date: 'Mon, 10 Feb 2014 20:26:45 GMT',
737 silly registry.get server: 'Apache',
737 silly registry.get connection: 'close',
737 silly registry.get etag: '"C1V3FPE0LJR3DHMZ83XCQCFDE"',
737 silly registry.get 'cache-control': 'max-age=1',
737 silly registry.get vary: 'Accept' } ]
738 verbose etag bunyan/0.22.0 from cache
739 silly lockFile f54de0af-bunyan-0-22-0 [email protected]
740 silly lockFile f54de0af-bunyan-0-22-0 [email protected]
741 silly resolved [ { name: 'once',
741 silly resolved version: '1.3.0',
741 silly resolved description: 'Run a function exactly one time',
741 silly resolved main: 'once.js',
741 silly resolved directories: { test: 'test' },
741 silly resolved dependencies: {},
741 silly resolved devDependencies: { tap: '~0.3.0' },
741 silly resolved scripts: { test: 'tap test/*.js' },
741 silly resolved repository: { type: 'git', url: 'git://github.com/isaacs/once' },
741 silly resolved keywords: [ 'once', 'function', 'one', 'single' ],
741 silly resolved author:
741 silly resolved { name: 'Isaac Z. Schlueter',
741 silly resolved email: '[email protected]',
741 silly resolved url: 'http://blog.izs.me/' },
741 silly resolved license: 'BSD',
741 silly resolved readme: '# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require(\'once\')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load(\'file\')\n loader.once(\'load\', cb)\n loader.once(\'error\', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire(\'once\').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load(\'file\')\n loader.once(\'load\', cb)\n loader.once(\'error\', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require(\'once\')\n\nfunction load (cb) {\n cb = once(cb)\n var stream = createStream()\n stream.once(\'data\', cb)\n stream.once(\'end\', function () {\n if (!cb.called) cb(new Error(\'not found\'))\n })\n}\n```\n',
741 silly resolved readmeFilename: 'README.md',
741 silly resolved bugs: { url: 'https://github.com/isaacs/once/issues' },
741 silly resolved homepage: 'https://github.com/isaacs/once',
741 silly resolved _id: '[email protected]',
741 silly resolved _from: '[email protected]' },
741 silly resolved { name: 'vasync',
741 silly resolved version: '1.4.0',
741 silly resolved description: 'utilities for observable asynchronous control flow',
741 silly resolved main: './lib/vasync.js',
741 silly resolved repository:
741 silly resolved { type: 'git',
741 silly resolved url: 'git://github.com/davepacheco/node-vasync.git' },
741 silly resolved dependencies: { jsprim: '0.3.0', verror: '1.1.0' },
741 silly resolved engines: [ 'node >=0.6.0' ],
741 silly resolved license: 'MIT',
741 silly resolved readme: '# vasync: utilities for observable asynchronous control flow\n\nThis module provides facilities for asynchronous control flow. There are many\nmodules that do this already (notably async.js). This one\'s claim to fame is\naided debuggability.\n\n\n## Observability is important\n\nWorking with Node\'s asynchronous, callback-based model is much easier with a\nhandful of simple control-flow abstractions, like:\n\n* pipelines (which invoke a list of asynchronous callbacks sequentially)\n* parallel pipelines (which invoke a list of asynchronous callbacks in parallel\n and invoke a top-level callback when the last one completes).\n* queues\n* barriers\n\nBut these structures also introduce new types of programming errors: failing to\ninvoke the callback can cause the program to hang, and inadvertently invoking it\ntwice can cause all kinds of mayhem that\'s very difficult to debug.\n\nThe facilities in this module keep track of what\'s going on so that you can\nfigure out what happened when your program goes wrong. They generally return an\nobject describing details of the current state. If your program goes wrong, you\nhave several ways of getting at this state:\n\n* On illumos-based systems, use MDB to [find the status object](http://dtrace.org/blogs/bmc/2012/05/05/debugging-node-js-memory-leaks/)\n and then [print it out](http://dtrace.org/blogs/dap/2012/01/13/playing-with-nodev8-postmortem-debugging/).\n* Provide an HTTP API (or AMQP, or whatever) that returns these pending status\n objects as JSON (see [kang](https://github.com/davepacheco/kang)).\n* Incorporate a REPL into your program and print out the status object.\n* Use the Node debugger to print out the status object.\n\n## Facilities\n\nThis module implements the following utilities:\n\n* `parallel(args, callback)`: invoke N functions in parallel (and merge the\n results)\n* `forEachParallel(args, callback)`: invoke the same function on N inputs in parallel\n* `pipeline(args, callback)`: invoke N functions in series (and stop on failure)\n* `forEachPipeline(args, callback)`: invoke the same function on N inputs in series (and stop on failure)\n* `barrier([args])`: coordinate multiple concurrent operations\n* `queuev(args)`: fixed-size worker queue\n\n### parallel(args, callback): invoke N functions in parallel and merge the results\n\nThis function takes a list of input functions (specified by the "funcs" property\nof "args") and runs them all. These input functions are expected to be\nasynchronous: they get a "callback" argument and should invoke it as\n`callback(err, result)`. The error and result will be saved and made available\nto the original caller when all of these functions complete.\n\nThis function returns the same "result" object it passes to the callback, and\nyou can use the fields in this object to debug or observe progress:\n\n* `operations`: array corresponding to the input functions, with\n * `func`: input function,\n * `status`: "pending", "ok", or "fail",\n * `err`: returned "err" value, if any, and\n * `result`: returned "result" value, if any\n* `successes`: "result" field for each of "operations" where\n "status" == "ok" (in no particular order)\n* `ndone`: number of input operations that have completed\n* `nerrors`: number of input operations that have failed\n\nThis status object lets you see in a debugger exactly which functions have\ncompleted, what they returned, and which ones are outstanding.\n\nAll errors are combined into a single "err" parameter to the final callback (see\nbelow).\n\nExample usage:\n\n console.log(mod_vasync.parallel({\n \'funcs\': [\n function f1 (callback) { mod_dns.resolve(\'joyent.com\', callback); },\n function f2 (callback) { mod_dns.resolve(\'github.com\', callback); },\n function f3 (callback) { mod_dns.resolve(\'asdfaqsdfj.com\', callback); }\n ]\n }, function (err, results) {\n console.log(\'error: %s\', err.message);\n console.log(\'results: %s\', mod_util.inspect(results, null, 3));\n }));\n\nIn the first tick, this outputs:\n\n status: { operations: \n [ { func: [Function: f1], status: \'pending\' },\n { func: [Function: f2], status: \'pending\' },\n { func: [Function: f3], status: \'pending\' } ],\n successes: [],\n ndone: 0,\n nerrors: 0 }\n\nshowing that there are three operations pending and none has yet been started.\nWhen the program finishes, it outputs this error:\n\n error: first of 1 error: queryA ENOTFOUND\n\nwhich encapsulates all of the intermediate failures. This model allows you to\nwrite the final callback like you normally would:\n\n if (err)\n return (callback(err));\n\nand still propagate useful information to callers that don\'t deal with multiple\nerrors (i.e. most callers).\n\nThe example also prints out the detailed final status, including all of the\nerrors and return values:\n\n results: { operations: \n [ { func: [Function: f1],\n funcname: \'f1\',\n status: \'ok\',\n err: null,\n result: [ \'165.225.132.33\' ] },\n { func: [Function: f2],\n funcname: \'f2\',\n status: \'ok\',\n err: null,\n result: [ \'207.97.227.239\' ] },\n { func: [Function: f3],\n funcname: \'f3\',\n status: \'fail\',\n err: { [Error: queryA ENOTFOUND] code: \'ENOTFOUND\',\n errno: \'ENOTFOUND\', syscall: \'queryA\' },\n result: undefined } ],\n successes: [ [ \'165.225.132.33\' ], [ \'207.97.227.239\' ] ],\n ndone: 3,\n nerrors: 1 }\n\nYou can use this if you want to handle all of the errors individually or to get\nat all of the individual return values.\n\nNote that "successes" is provided as a convenience and the order of items in\nthat array may not correspond to the order of the inputs. To consume output in\nan ordered manner, you should iterate over "operations" and pick out the result\nfrom each item.\n\n\n### forEachParallel(args, callback): invoke the same function on N inputs in parallel\n\nThis function is exactly like `parallel`, except that the input is specified as\na *single* function ("func") and a list of inputs ("inputs"). The function is\ninvoked on each input in parallel.\n\nThis example is exactly equivalent to the one above:\n\n console.log(mod_vasync.forEachParallel({\n \'func\': mod_dns.resolve,\n \'inputs\': [ \'joyent.com\', \'github.com\', \'asdfaqsdfj.com\' ]\n }, function (err, results) {\n console.log(\'error: %s\', err.message);\n console.log(\'results: %s\', mod_util.inspect(results, null, 3));\n }));\n\n\n### pipeline(args, callback): invoke N functions in series (and stop on failure)\n\nThe named arguments (that go inside `args`) are:\n\n* `funcs`: input functions, to be invoked in series\n* `arg`: arbitrary argument that will be passed to each function\n\nThe functions are invoked in order as `func(arg, callback)`, where "arg" is the\nuser-supplied argument from "args" and "callback" should be invoked in the usual\nway. If any function emits an error, the whole pipeline stops.\n\nThe return value and the arguments to the final callback are exactly the same as\nfor `parallel`. The error object for the final callback is just the error\nreturned by whatever pipeline function failed (if any).\n\nThis example is similar to the one above, except that it runs the steps in\nsequence and stops early because `pipeline` stops on the first error:\n\n console.log(mod_vasync.pipeline({\n \'funcs\': [\n function f1 (_, callback) { mod_fs.stat(\'/tmp\', callback); },\n function f2 (_, callback) { mod_fs.stat(\'/noexist\', callback); },\n function f3 (_, callback) { mod_fs.stat(\'/var\', callback); }\n ]\n }, function (err, results) {\n console.log(\'error: %s\', err.message);\n console.log(\'results: %s\', mod_util.inspect(results, null, 3));\n }));\n\nAs a result, the status after the first tick looks like this:\n\n { operations: \n [ { func: [Function: f1], status: \'pending\' },\n { func: [Function: f2], status: \'waiting\' },\n { func: [Function: f3], status: \'waiting\' } ],\n successes: [],\n ndone: 0,\n nerrors: 0 }\n\nNote that the second and third stages are now "waiting", rather than "pending"\nin the `parallel` case. The error and complete result look just like the\nparallel case.\n\n\n### forEachPipeline(args, callback): invoke the same function on N inputs in series (and stop on failure)\n\nThis function is exactly like `pipeline`, except that the input is specified as\na *single* function ("func") and a list of inputs ("inputs"). The function is\ninvoked on each input in series.\n\nThis example is exactly equivalent to the one above:\n\n console.log(mod_vasync.forEachPipeline({\n \'func\': mod_dns.resolve,\n \'inputs\': [ \'joyent.com\', \'github.com\', \'asdfaqsdfj.com\' ]\n }, function (err, results) {\n console.log(\'error: %s\', err.message);\n console.log(\'results: %s\', mod_util.inspect(results, null, 3));\n }));\n\n\n### barrier([args]): coordinate multiple concurrent operations\n\nReturns a new barrier object. Like `parallel`, barriers are useful for\ncoordinating several concurrent operations, but instead of specifying a list of\nfunctions to invoke, you just say how many (and optionally which ones) are\noutstanding, and this object emits `\'drain\'` when they\'ve all completed. This\nis syntactically lighter-weight, and more flexible.\n\n* Methods:\n\n * start(name): Indicates that the named operation began. The name must not\n match an operation which is already ongoing.\n * done(name): Indicates that the named operation ended.\n\n\n* Read-only public properties (for debugging):\n\n * pending: Set of pending operations. Keys are names passed to "start", and\n values are timestamps when the operation began.\n * recent: Array of recent completed operations. Each element is an object\n with a "name", "start", and "done" field. By default, 10 operations are\n remembered.\n\n\n* Options:\n\n * nrecent: number of recent operations to remember (for debugging)\n\nExample: printing sizes of files in a directory\n\n var mod_fs = require(\'fs\');\n var mod_path = require(\'path\');\n var mod_vasync = require(\'../lib/vasync\');\n\n var barrier = mod_vasync.barrier();\n\n barrier.on(\'drain\', function () {\n \tconsole.log(\'all files checked\');\n });\n\n barrier.start(\'readdir\');\n\n mod_fs.readdir(__dirname, function (err, files) {\n \tbarrier.done(\'readdir\');\n\n \tif (err)\n \t\tthrow (err);\n\n \tfiles.forEach(function (file) {\n \t\tbarrier.start(\'stat \' + file);\n\n \t\tvar path = mod_path.join(__dirname, file);\n\n \t\tmod_fs.stat(path, function (err2, stat) {\n \t\t\tbarrier.done(\'stat \' + file);\n \t\t\tconsole.log(\'%s: %d bytes\', file, stat[\'size\']);\n \t\t});\n \t});\n });\n\nThis emits:\n\n barrier-readdir.js: 602 bytes\n foreach-parallel.js: 358 bytes\n barrier-basic.js: 552 bytes\n nofail.js: 384 bytes\n pipeline.js: 490 bytes\n parallel.js: 481 bytes\n queue-serializer.js: 441 bytes\n queue-stat.js: 529 bytes\n all files checked\n\n\n### queue(worker, concurrency): fixed-size worker queue\n### queuev(args)\n\nThis function returns an object that allows up to a fixed number of tasks to be\ndispatched at any given time. The interface is compatible with that provided\nby the "async" Node library, except that the returned object\'s fields represent\na public interface you can use to introspect what\'s going on.\n\n* Arguments\n\n * worker: a function invoked as `worker(task, callback)`, where `task` is a\n task dispatched to this queue and `callback` should be invoked when the\n task completes.\n * concurrency: a positive integer indicating the maximum number of tasks\n that may be dispatched at any time. With concurrency = 1, the queue\n serializes all operations.\n\n\n* Methods\n\n * push(task, [callback]): add a task (or array of tasks) to the queue, with\n an optional callback to be invoked when each task completes. If a list of\n tasks are added, the callback is invoked for each one.\n * length(): for compatibility with node-async.\n\n\n* Read-only public properties (for debugging):\n\n * concurrency: for compatibility with node-async\n * worker: worker function, as passed into "queue"/"queuev"\n * worker\\_name: worker function\'s "name" field\n * npending: the number of tasks currently being processed\n * pending: an object (*not* an array) describing the tasks currently being\n processed\n * queued: array of tasks currently queued for processing\n\n\n* Hooks (for compatibility with node-async):\n\n * saturated\n * empty\n * drain\n\nIf the tasks are themselves simple objects, then the entire queue may be\nserialized (as via JSON.stringify) for debugging and monitoring tools. Using\nthe above fields, you can see what this queue is doing (worker\\_name), which\ntasks are queued, which tasks are being processed, and so on.\n\n### Example 1: Stat several files\n\nHere\'s an example demonstrating the queue:\n\n var mod_fs = require(\'fs\');\n var mod_vasync = require(\'../lib/vasync\');\n\n var queue;\n\n function doneOne()\n {\n \tconsole.log(\'task completed; queue state:\\n%s\\n\',\n \t JSON.stringify(queue, null, 4));\n }\n\n queue = mod_vasync.queue(mod_fs.stat, 2);\n\n console.log(\'initial queue state:\\n%s\\n\', JSON.stringify(queue, null, 4));\n\n queue.push(\'/tmp/file1\', doneOne);\n queue.push(\'/tmp/file2\', doneOne);\n queue.push(\'/tmp/file3\', doneOne);\n queue.push(\'/tmp/file4\', doneOne);\n\n console.log(\'all tasks dispatched:\\n%s\\n\', JSON.stringify(queue, null, 4));\n\nThe initial queue state looks like this:\n\n initial queue state: \n {\n "nextid": 0,\n "worker_name": "anon",\n "npending": 0,\n "pending": {},\n "queued": [],\n "concurrency": 2\n }\n\nAfter four tasks have been pushed, we see that two of them have been dispatched\nand the remaining two are queued up:\n\n all tasks pushed:\n {\n "nextid": 4,\n "worker_name": "anon",\n "npending": 2,\n "pending": {\n "1": {\n "id": 1,\n "task": "/tmp/file1"\n },\n "2": {\n "id": 2,\n "task": "/tmp/file2"\n }\n },\n "queued": [\n {\n "id": 3,\n "task": "/tmp/file3"\n },\n {\n "id": 4,\n "task": "/tmp/file4"\n }\n ],\n "concurrency": 2\n }\n\nAs they complete, we see tasks moving from "queued" to "pending", and completed\ntasks disappear:\n\n task completed; queue state:\n {\n "nextid": 4,\n "worker_name": "anon",\n "npending": 1,\n "pending": {\n "3": {\n "id": 3,\n "task": "/tmp/file3"\n }\n },\n "queued": [\n {\n "id": 4,\n "task": "/tmp/file4"\n }\n ],\n "concurrency": 2\n }\n\nWhen all tasks have completed, the queue state looks like it started:\n\n task completed; queue state:\n {\n "nextid": 4,\n "worker_name": "anon",\n "npending": 0,\n "pending": {},\n "queued": [],\n "concurrency": 2\n }\n\n\n### Example 2: A simple serializer\n\nYou can use a queue with concurrency 1 and where the tasks are themselves\nfunctions to ensure that an arbitrary asynchronous function never runs\nconcurrently with another one, no matter what each one does. Since the tasks\nare the actual functions to be invoked, the worker function just invokes each\none:\n\n var mod_vasync = require(\'../lib/vasync\');\n\n var queue = mod_vasync.queue(\n function (task, callback) { task(callback); }, 1);\n\n queue.push(function (callback) {\n \tconsole.log(\'first task begins\');\n \tsetTimeout(function () {\n \t\tconsole.log(\'first task ends\');\n \t\tcallback();\n \t}, 500);\n });\n\n queue.push(function (callback) {\n \tconsole.log(\'second task begins\');\n \tprocess.nextTick(function () {\n \t\tconsole.log(\'second task ends\');\n \t\tcallback();\n \t});\n });\n\nThis example outputs:\n\n $ node examples/queue-serializer.js \n first task begins\n first task ends\n second task begins\n second task ends\n',
741 silly resolved readmeFilename: 'README.md',
741 silly resolved bugs: { url: 'https://github.com/davepacheco/node-vasync/issues' },
741 silly resolved homepage: 'https://github.com/davepacheco/node-vasync',
741 silly resolved _id: '[email protected]',
741 silly resolved _from: '[email protected]' },
741 silly resolved { author: { name: 'Mark Cavage', email: '[email protected]' },
741 silly resolved name: 'assert-plus',
741 silly resolved description: 'Extra assertions on top of node\'s assert module',
741 silly resolved version: '0.1.4',
741 silly resolved main: './assert.js',
741 silly resolved devDependencies: {},
741 silly resolved optionalDependencies: {},
741 silly resolved repository:
741 silly resolved { type: 'git',
741 silly resolved url: 'https://github.com/mcavage/node-assert-plus.git' },
741 silly resolved engines: { node: '>=0.8' },
741 silly resolved readme: '# node-assert-plus\n\nThis library is a super small wrapper over node\'s assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, \'myArg\')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require(\'assert-plus\');\n\n function fooAccount(options, callback) {\n\t assert.object(options, \'options\');\n\t\tassert.number(options.id, \'options.id);\n\t\tassert.bool(options.isManager, \'options.isManager\');\n\t\tassert.string(options.name, \'options.name\');\n\t\tassert.arrayOfString(options.email, \'options.email\');\n\t\tassert.func(callback, \'callback\');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren\'t* part of node\'s core assert API are simply assumed to\ntake an argument, and then a string \'name\' that\'s not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, \'foo\');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, \'foo\');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, \'foo\');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don\'t want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the "Software"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n',
741 silly resolved readmeFilename: 'README.md',
741 silly resolved bugs: { url: 'https://github.com/mcavage/node-assert-plus/issues' },
741 silly resolved homepage: 'https://github.com/mcavage/node-assert-plus',
741 silly resolved dependencies: {},
741 silly resolved _id: '[email protected]',
741 silly resolved _from: '[email protected]' },
741 silly resolved { name: 'bunyan',
741 silly resolved version: '0.22.0',
741 silly resolved description: 'a JSON Logger library for node.js services',
741 silly resolved author:
741 silly resolved { name: 'Trent Mick',
741 silly resolved email: '[email protected]',
741 silly resolved url: 'http://trentm.com' },
741 silly resolved main: './lib/bunyan.js',
741 silly resolved bin: { bunyan: './bin/bunyan' },
741 silly resolved repository: { type: 'git', url: 'git://github.com/trentm/node-bunyan.git' },
741 silly resolved engines: [ 'node >=0.6.0' ],
741 silly resolved keywords: [ 'log', 'logging', 'log4j', 'json' ],
741 silly resolved dependencies: { mv: '0.0.5', 'dtrace-provider': '0.2.8' },
741 silly resolved '// comment': '\'mv\' required for RotatingFileStream',
741 silly resolved optionalDependencies: { mv: '0.0.5', 'dtrace-provider': '0.2.8' },
741 silly resolved devDependencies: { nodeunit: '0.7.4', ben: '0.0.0', verror: '1.3.3' },
741 silly resolved scripts: { test: 'make test' },
741 silly resolved contributors:
741 silly resolved [ [Object],
741 silly resolved [Object],
741 silly resolved [Object],
741 silly resolved [Object],
741 silly resolved [Object],
741 silly resolved [Object],
741 silly resolved [Object] ],
741 silly resolved readme: 'Bunyan is **a simple and fast JSON logging library** for node.js services:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: "myapp"});\n log.info("hi");\n\nand **a `bunyan` CLI tool** for nicely viewing those logs:\n\n![bunyan CLI screenshot](https://raw.github.com/trentm/node-bunyan/master/tools/screenshot1.png)\n\nManifesto: Server logs should be structured. JSON\'s a good format. Let\'s do\nthat. A log record is one line of `JSON.stringify`\'d output. Let\'s also\nspecify some common names for the requisite and common fields for a log\nrecord (see below).\n\nAlso: log4j is way more than you need.\n\n\n# Current Status\n\nSolid core functionality is there. Joyent is using this for a number of\nproduction services. Bunyan supports node 0.6 and greater. Follow\n<a href="https://twitter.com/intent/user?screen_name=trentmick" target="_blank">@trentmick</a>\nfor updates to Bunyan.\n\nThere is an email discussion list\n[[email protected]](mailto:[email protected]),\nalso [as a forum in the\nbrowser](https://groups.google.com/forum/?fromgroups#!forum/bunyan-logging).\n\n\n# Installation\n\n npm install bunyan\n\n**Tip**: The `bunyan` CLI tool is written to be compatible (within reason) with\nall versions of Bunyan logs. Therefore you might want to `npm install -g bunyan`\nto get the bunyan CLI on your PATH, then use local bunyan installs for\nnode.js library usage of bunyan in your apps.\n\n\n# Features\n\n- elegant [log method API](#log-method-api)\n- extensible [streams](#streams) system for controlling where log records\n go (to a stream, to a file, [log file rotation](#stream-type-rotating-file),\n etc.)\n- [`bunyan` CLI](#cli-usage) for pretty-printing and filtering of Bunyan logs\n- simple include of log call source location (file, line, function) with\n [`src: true`](#src)\n- light-weight specialization of Logger instances with [`log.child`](#logchild)\n- custom rendering of logged objects with ["serializers"](#serializers)\n- [Runtime log snooping via Dtrace support](#dtrace-support)\n\n\n# Introduction\n\nLike most logging libraries you create a Logger instance and call methods\nnamed after the logging levels:\n\n $ cat hi.js\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: \'myapp\'});\n log.info(\'hi\');\n log.warn({lang: \'fr\'}, \'au revoir\');\n\nAll loggers must provide a "name". This is somewhat akin to the log4j logger\n"name", but Bunyan doesn\'t do hierarchical logger names.\n\n**Bunyan log records are JSON.** A few fields are added automatically:\n"pid", "hostname", "time" and "v".\n\n $ node hi.js\n {"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0}\n {"name":"myapp","hostname":"banana.local","pid":40161,"level":40,"lang":"fr","msg":"au revoir","time":"2013-01-04T18:46:23.853Z","v":0}\n\n\n## Log Method API\n\nThe example above shows two different ways to call `log.info(...)`. The\nfull API is:\n\n log.info(); // Returns a boolean: is the "info" level enabled?\n // This is equivalent to `log.isInfoEnabled()` or\n // `log.isEnabledFor(INFO)` in log4j.\n\n log.info(\'hi\'); // Log a simple string message.\n log.info(\'hi %s\', bob, anotherVar); // Uses `util.format` for msg formatting.\n\n log.info({foo: \'bar\'}, \'hi\');\n // Adds "foo" field to log record. You can add any number\n // of additional fields here.\n\n log.info(err); // Special case to log an `Error` instance to the record.\n // This adds an "err" field with exception details\n // (including the stack) and sets "msg" to the exception\n // message.\n log.info(err, \'more on this: %s\', more);\n // ... or you can specify the "msg".\n\nNote that this implies **you cannot pass any object as the first argument\nto log it**. IOW, `log.info(mywidget)` may not be what you expect. Instead\nof a string representation of `mywidget` that other logging libraries may\ngive you, Bunyan will try to JSON-ify your object. It is a Bunyan best\npractice to always give a field name to included objects, e.g.:\n\n log.info({widget: mywidget}, ...)\n\nThis will dove-tail with [Bunyan serializer support](#serializers), discussed\nlater.\n\nThe same goes for all of Bunyan\'s log levels: `log.trace`, `log.debug`,\n`log.info`, `log.warn`, and `log.fatal`. See the [levels section](#levels)\nbelow for details and suggestions.\n\n\n## CLI Usage\n\nBunyan log output is a stream of JSON objects. This is great for processing,\nbut not for reading directly. A **`bunyan` tool** is provided **for\npretty-printing bunyan logs** and for **filtering** (e.g.\n`| bunyan -c \'this.foo == "bar"\'`). Using our example above:\n\n $ node hi.js | ./bin/bunyan\n [2013-01-04T19:01:18.241Z] INFO: myapp/40208 on banana.local: hi\n [2013-01-04T19:01:18.242Z] WARN: myapp/40208 on banana.local: au revoir (lang=fr)\n\nSee the screenshot above for an example of the default coloring of rendered\nlog output. That example also shows the nice formatting automatically done for\nsome well-known log record fields (e.g. `req` is formatted like an HTTP request,\n`res` like an HTTP response, `err` like an error stack trace).\n\nOne interesting feature is **filtering** of log content, which can be useful\nfor digging through large log files or for analysis. We can filter only\nrecords above a certain level:\n\n $ node hi.js | bunyan -l warn\n [2013-01-04T19:08:37.182Z] WARN: myapp/40353 on banana.local: au revoir (lang=fr)\n\nOr filter on the JSON fields in the records (e.g. only showing the French\nrecords in our contrived example):\n\n $ node hi.js | bunyan -c \'this.lang == "fr"\'\n [2013-01-04T19:08:26.411Z] WARN: myapp/40342 on banana.local: au revoir (lang=fr)\n\nSee `bunyan --help` for other facilities.\n\n\n## Streams Introduction\n\nBy default, log output is to stdout and at the "info" level. Explicitly that\nlooks like:\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n stream: process.stdout,\n level: \'info\'\n });\n\nThat is an abbreviated form for a single stream. **You can define multiple\nstreams at different levels**.\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n streams: [\n {\n level: \'info\',\n stream: process.stdout, // log INFO and above to stdout\n },\n {\n level: \'error\',\n path: \'/var/log/myapp-error.log\' // log ERROR and above to a file\n }\n ]\n });\n\nMore on streams in the [Streams section](#streams) below.\n\n\n## log.child\n\nBunyan has a concept of a child logger to **specialize a logger for a\nsub-component of your application**, i.e. to create a new logger with\nadditional bound fields that will be included in its log records. A child\nlogger is created with `log.child(...)`.\n\nIn the following example, logging on a "Wuzzle" instance\'s `this.log` will\nbe exactly as on the parent logger with the addition of the `widget_type`\nfield:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({name: \'myapp\'});\n\n function Wuzzle(options) {\n this.log = options.log.child({widget_type: \'wuzzle\'});\n this.log.info(\'creating a wuzzle\')\n }\n Wuzzle.prototype.woos = function () {\n this.log.warn(\'This wuzzle is woosey.\')\n }\n\n log.info(\'start\');\n var wuzzle = new Wuzzle({log: log});\n wuzzle.woos();\n log.info(\'done\');\n\nRunning that looks like (raw):\n\n $ node myapp.js\n {"name":"myapp","hostname":"myhost","pid":34572,"level":30,"msg":"start","time":"2013-01-04T07:47:25.814Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"widget_type":"wuzzle","level":30,"msg":"creating a wuzzle","time":"2013-01-04T07:47:25.815Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"widget_type":"wuzzle","level":40,"msg":"This wuzzle is woosey.","time":"2013-01-04T07:47:25.815Z","v":0}\n {"name":"myapp","hostname":"myhost","pid":34572,"level":30,"msg":"done","time":"2013-01-04T07:47:25.816Z","v":0}\n\nAnd with the `bunyan` CLI (using the "short" output mode):\n\n $ node myapp.js | bunyan -o short\n 07:46:42.707Z INFO myapp: start\n 07:46:42.709Z INFO myapp: creating a wuzzle (widget_type=wuzzle)\n 07:46:42.709Z WARN myapp: This wuzzle is woosey. (widget_type=wuzzle)\n 07:46:42.709Z INFO myapp: done\n\n\nA more practical example is in the\n[node-restify](https://github.com/mcavage/node-restify) web framework.\nRestify uses Bunyan for its logging. One feature of its integration, is that\nif `server.use(restify.requestLogger())` is used, each restify request handler\nincludes a `req.log` logger that is:\n\n log.child({req_id: <unique request id>}, true)\n\nApps using restify can then use `req.log` and have all such log records\ninclude the unique request id (as "req\\_id"). Handy.\n\n\n## Serializers\n\nBunyan has a concept of **"serializers" to produce a JSON-able object from a\nJavaScript object**, so you can easily do the following:\n\n log.info({req: <request object>}, \'something about handling this request\');\n\nSerializers is a mapping of log record field name, "req" in this example, to\na serializer function. That looks like this:\n\n function reqSerializer(req) {\n return {\n method: req.method,\n url: req.url,\n headers: req.headers\n }\n }\n var log = bunyan.createLogger({\n name: \'myapp\',\n serializers: {\n req: reqSerializer\n }\n });\n\nOr this:\n\n var log = bunyan.createLogger({\n name: \'myapp\',\n serializers: {req: bunyan.stdSerializers.req}\n });\n\nbecause Buyan includes a small set of standard serializers. To use all the\nstandard serializers you can use:\n\n var log = bunyan.createLogger({\n ...\n serializers: bunyan.stdSerializers\n });\n\n**Note**: Your own serializers should never throw, otherwise you\'ll get an\nugly message on stderr from Bunyan (along with the traceback) and the field\nin your log record will be replaced with a short error message.\n\n\n## src\n\nThe **source file, line and function of the log call site** can be added to\nlog records by using the `src: true` config option:\n\n var log = bunyan.createLogger({src: true, ...});\n\nThis adds the call source info with the \'src\' field, like this:\n\n {\n "name": "src-example",\n "hostname": "banana.local",\n "pid": 123,\n "component": "wuzzle",\n "level": 4,\n "msg": "This wuzzle is woosey.",\n "time": "2012-02-06T04:19:35.605Z",\n "src": {\n "file": "/Users/trentm/tm/node-bunyan/examples/src.js",\n "line": 20,\n "func": "Wuzzle.woos"\n },\n "v": 0\n }\n\n**WARNING: Determining the call source info is slow. Never use this option\nin production.**\n\n\n# Levels\n\nThe log levels in bunyan are as follows. The level descriptions are best\npractice *opinions*.\n\n- "fatal" (60): The service/app is going to stop or become unusable now.\n An operator should definitely look into this soon.\n- "error" (50): Fatal for a particular request, but the service/app continues\n servicing other requests. An operator should look at this soon(ish).\n- "warn" (40): A note on something that should probably be looked at by an\n operator eventually.\n- "info" (30): Detail on regular operation.\n- "debug" (20): Anything else, i.e. too verbose to be included in "info" level.\n- "trace" (10): Logging from external libraries used by your app or *very*\n detailed application logging.\n\nSuggestions: Use "debug" sparingly. Information that will be useful to debug\nerrors *post mortem* should usually be included in "info" messages if it\'s\ngenerally relevant or else with the corresponding "error" event. Don\'t rely\non spewing mostly irrelevant debug messages all the time and sifting through\nthem when an error occurs.\n\nIntegers are used for the actual level values (10 for "trace", ..., 60 for\n"fatal") and constants are defined for the (bunyan.TRACE ... bunyan.DEBUG).\nThe lowercase level names are aliases supported in the API.\n\nHere is the API for changing levels in an existing logger:\n\n log.level() -> INFO // gets current level (lowest level of all streams)\n\n log.level(INFO) // set all streams to level INFO\n log.level("info") // set all streams to level INFO\n\n log.levels() -> [DEBUG, INFO] // get array of levels of all streams\n log.levels(0) -> DEBUG // get level of stream at index 0\n log.levels("foo") // get level of stream with name "foo"\n\n log.levels(0, INFO) // set level of stream 0 to INFO\n log.levels(0, "info") // can use "info" et al aliases\n log.levels("foo", WARN) // set stream named "foo" to WARN\n\n\n\n# Log Record Fields\n\nThis section will describe *rules* for the Bunyan log format: field names,\nfield meanings, required fields, etc. However, a Bunyan library doesn\'t\nstrictly enforce all these rules while records are being emitted. For example,\nBunyan will add a `time` field with the correct format to your log records,\nbut you can specify your own. It is the caller\'s responsibility to specify\nthe appropriate format.\n\nThe reason for the above leniency is because IMO logging a message should\nnever break your app. This leads to this rule of logging: **a thrown\nexception from `log.info(...)` or equivalent (other than for calling with the\nincorrect signature) is always a bug in Bunyan.**\n\n\nA typical Bunyan log record looks like this:\n\n {"name":"myserver","hostname":"banana.local","pid":123,"req":{"method":"GET","url":"/path?q=1#anchor","headers":{"x-hi":"Mom","connection":"close"}},"level":3,"msg":"start request","time":"2012-02-03T19:02:46.178Z","v":0}\n\nPretty-printed:\n\n {\n "name": "myserver",\n "hostname": "banana.local",\n "pid": 123,\n "req": {\n "method": "GET",\n "url": "/path?q=1#anchor",\n "headers": {\n "x-hi": "Mom",\n "connection": "close"\n },\n "remoteAddress": "120.0.0.1",\n "remotePort": 51244\n },\n "level": 3,\n "msg": "start request",\n "time": "2012-02-03T19:02:57.534Z",\n "v": 0\n }\n\n\nCore fields:\n\n- `v`: Required. Integer. Added by Bunyan. Cannot be overriden.\n This is the Bunyan log format version (`require(\'bunyan\').LOG_VERSION`).\n The log version is a single integer. `0` is until I release a version\n "1.0.0" of node-bunyan. Thereafter, starting with `1`, this will be\n incremented if there is any backward incompatible change to the log record\n format. Details will be in "CHANGES.md" (the change log).\n- `level`: Required. Integer. Added by Bunyan. Cannot be overriden.\n See the "Levels" section.\n- `name`: Required. String. Provided at Logger creation.\n You must specify a name for your logger when creating it. Typically this\n is the name of the service/app using Bunyan for logging.\n- `hostname`: Required. String. Provided or determined at Logger creation.\n You can specify your hostname at Logger creation or it will be retrieved\n vi `os.hostname()`.\n- `pid`: Required. Integer. Filled in automatically at Logger creation.\n- `time`: Required. String. Added by Bunyan. Can be overriden.\n The date and time of the event in [ISO 8601\n Extended Format](http://en.wikipedia.org/wiki/ISO_8601) format and in UTC,\n as from\n [`Date.toISOString()`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString).\n- `msg`: Required. String.\n Every `log.debug(...)` et al call must provide a log message.\n- `src`: Optional. Object giving log call source info. This is added\n automatically by Bunyan if the "src: true" config option is given to the\n Logger. Never use in production as this is really slow.\n\n\nGo ahead and add more fields, and nested ones are fine (and recommended) as\nwell. This is why we\'re using JSON. Some suggestions and best practices\nfollow (feedback from actual users welcome).\n\n\nRecommended/Best Practice Fields:\n\n- `err`: Object. A caught JS exception. Log that thing with `log.info(err)`\n to get:\n\n ...\n "err": {\n "message": "boom",\n "name": "TypeError",\n "stack": "TypeError: boom\\n at Object.<anonymous> ..."\n },\n "msg": "boom",\n ...\n\n Or use the `bunyan.stdSerializers.err` serializer in your Logger and\n do this `log.error({err: err}, "oops")`. See "examples/err.js".\n\n- `req_id`: String. A request identifier. Including this field in all logging\n tied to handling a particular request to your server is strongly suggested.\n This allows post analysis of logs to easily collate all related logging\n for a request. This really shines when you have a SOA with multiple services\n and you carry a single request ID from the top API down through all APIs\n (as [node-restify](https://github.com/mcavage/node-restify) facilitates\n with its \'Request-Id\' header).\n\n- `req`: An HTTP server request. Bunyan provides `bunyan.stdSerializers.req`\n to serialize a request with a suggested set of keys. Example:\n\n {\n "method": "GET",\n "url": "/path?q=1#anchor",\n "headers": {\n "x-hi": "Mom",\n "connection": "close"\n },\n "remoteAddress": "120.0.0.1",\n "remotePort": 51244\n }\n\n- `res`: An HTTP server response. Bunyan provides `bunyan.stdSerializers.res`\n to serialize a response with a suggested set of keys. Example:\n\n {\n "statusCode": 200,\n "header": "HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\nConnection: keep-alive\\r\\nTransfer-Encoding: chunked\\r\\n\\r\\n"\n }\n\n\nOther fields to consider:\n\n- `req.username`: Authenticated user (or for a 401, the user attempting to\n auth).\n- Some mechanism to calculate response latency. "restify" users will have\n a "X-Response-Time" header. A `latency` custom field would be fine.\n- `req.body`: If you know that request bodies are small (common in APIs,\n for example), then logging the request body is good.\n\n\n# Streams\n\nA "stream" is Bunyan\'s name for an output for log messages (the equivalent\nto a log4j Appender). Ultimately Bunyan uses a\n[Writable Stream](http://nodejs.org/docs/latest/api/all.html#writable_Stream)\ninterface, but there are some additional attributes used to create and\nmanage the stream. A Bunyan Logger instance has one or more streams.\nIn general streams are specified with the "streams" option:\n\n var bunyan = require(\'bunyan\');\n var log = bunyan.createLogger({\n name: "foo",\n streams: [\n {\n stream: process.stderr,\n level: "debug"\n },\n ...\n ]\n });\n\nFor convenience, if there is only one stream, it can specified with the\n"stream" and "level" options (internally converted to a `Logger.streams`).\n\n var log = bunyan.createLogger({\n name: "foo",\n stream: process.stderr,\n level: "debug"\n });\n\nNote that "file" streams do not support this shortcut (partly for historical\nreasons and partly to not make it difficult to add a literal "path" field\non log records).\n\nIf neither "streams" nor "stream" are specified, the default is a stream of\ntype "stream" emitting to `process.stdout` at the "info" level.\n\n\n## stream errors\n\nBunyan re-emits error events from the created `WriteStream`. So you can\ndo this:\n\n var log = bunyan.createLogger({name: \'mylog\', streams: [{path: LOG_PATH}]});\n log.on(\'error\', function (err, stream) {\n // Handle stream write or create error here.\n });\n\n\n## stream type: `stream`\n\nA `type === \'stream\'` is a plain ol\' node.js [Writable\nStream](http://nodejs.org/docs/latest/api/all.html#writable_Stream). A\n"stream" (the writeable stream) field is required. E.g.: `process.stdout`,\n`process.stderr`.\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n stream: process.stderr\n // `type: \'stream\'` is implied\n }]\n });\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>stream</td>\n<td>Yes</td>\n<td>-</td>\n<td>A "Writable Stream", e.g. a std handle or an open file write stream.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>No</td>\n<td>n/a</td>\n<td>`type == \'stream\'` is implied if the `stream` field is given.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n## stream type: `file`\n\nA `type === \'file\'` stream requires a "path" field. Bunyan will open this\nfile for appending. E.g.:\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n path: \'/var/log/foo.log\',\n // `type: \'file\'` is implied\n }]\n });\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>path</td>\n<td>Yes</td>\n<td>-</td>\n<td>A file path to which to log.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>No</td>\n<td>n/a</td>\n<td>`type == \'file\'` is implied if the `path` field is given.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n## stream type: `rotating-file`\n\nA `type === \'rotating-file\'` is a file stream that handles file automatic\nrotation.\n\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [{\n type: \'rotating-file\',\n path: \'/var/log/foo.log\',\n period: \'1d\', // daily rotation\n count: 3 // keep 3 back copies\n }]\n });\n\nThis will rotate \'/var/log/foo.log\' every day (at midnight) to:\n\n /var/log/foo.log.0 # yesterday\n /var/log/foo.log.1 # 1 day ago\n /var/log/foo.log.2 # 2 days ago\n\n*Currently*, there is no support for providing a template for the rotated\nfiles, or for rotating when the log reaches a threshold size.\n\n<table>\n<tr>\n<th>Field</th>\n<th>Required?</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n<tr>\n<td>type</td>\n<td>Yes</td>\n<td>-</td>\n<td>"rotating-file"</td>\n</tr>\n<tr>\n<td>path</td>\n<td>Yes</td>\n<td>-</td>\n<td>A file path to which to log. Rotated files will be "$path.0",\n"$path.1", ...</td>\n</tr>\n<tr>\n<td>period</td>\n<td>No</td>\n<td>1d</td>\n<td>The period at which to rotate. This is a string of the format\n"$number$scope" where "$scope" is one of "h" (hours), "d" (days), "w" (weeks),\n"m" (months), "y" (years). Or one of the following names can be used\n"hourly" (means 1h), "daily" (1d), "weekly" (1w), "monthly" (1m),\n"yearly" (1y). Rotation is done at the start of the scope: top of the hour (h),\nmidnight (d), start of Sunday (w), start of the 1st of the month (m),\nstart of Jan 1st (y).</td>\n</tr>\n<tr>\n<td>count</td>\n<td>No</td>\n<td>10</td>\n<td>The number of rotated files to keep.</td>\n</tr>\n<tr>\n<td>level</td>\n<td>No</td>\n<td>info</td>\n<td>The level at which logging to this stream is enabled. If not\nspecified it defaults to "info". If specified this can be one of the\nlevel strings ("trace", "debug", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).</td>\n</tr>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>-</td>\n<td>A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream "name" isn\'t\nused for anything else.</td>\n</tr>\n</table>\n\n\n**Note on log rotation**: Often you may be using external log rotation utilities\nlike `logrotate` on Linux or `logadm` on SmartOS/Illumos. In those cases, unless\nyour are ensuring "copy and truncate" sematics (via `copytruncate` with\nlogrotate or `-c` with logadm) then the fd for your \'file\' stream will change.\nYou can tell bunyan to reopen the file stream with code like this in your\napp:\n\n var log = bunyan.createLogger(...);\n ...\n process.on(\'SIGUSR2\', function () {\n log.reopenFileStreams();\n });\n\nwhere you\'d configure your log rotation to send SIGUSR2 (or some other signal)\nto your process. Any other mechanism to signal your app to run\n`log.reopenFileStreams()` would work as well.\n\n\n## stream type: `raw`\n\n- `raw`: Similar to a "stream" writeable stream, except that the write method\n is given raw log record *Object*s instead of a JSON-stringified string.\n This can be useful for hooking on further processing to all Bunyan logging:\n pushing to an external service, a RingBuffer (see below), etc.\n\n\n\n## `raw` + RingBuffer Stream\n\nBunyan comes with a special stream called a RingBuffer which keeps the last N\nrecords in memory and does *not* write the data anywhere else. One common\nstrategy is to log \'info\' and higher to a normal log file but log all records\n(including \'trace\') to a ringbuffer that you can access via a debugger, or your\nown HTTP interface, or a post-mortem facility like MDB or node-panic.\n\nTo use a RingBuffer:\n\n /* Create a ring buffer that stores the last 100 records. */\n var bunyan = require(\'bunyan\');\n var ringbuffer = new bunyan.RingBuffer({ limit: 100 });\n var log = bunyan.createLogger({\n name: \'foo\',\n streams: [\n {\n level: \'info\',\n stream: process.stdout\n },\n {\n level: \'trace\',\n type: \'raw\', // use \'raw\' to get raw log record objects\n stream: ringbuffer\n }\n ]\n });\n\n log.info(\'hello world\');\n console.log(ringbuffer.records);\n\nThis example emits:\n\n [ { name: \'foo\',\n hostname: \'912d2b29\',\n pid: 50346,\n level: 30,\n msg: \'hello world\',\n time: \'2012-06-19T21:34:19.906Z\',\n v: 0 } ]\n\n\n## third-party streams\n\n- syslog:\n [mcavage/node-bunyan-syslog](https://github.com/mcavage/node-bunyan-syslog)\n provides support for directing bunyan logging to a syslog server.\n\n- TODO: eventually https://github.com/trentm/node-bunyan-winston\n\n\n\n# Runtime log snooping via DTrace\n\nOn systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives\nlike SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`)\nthat makes available the following probes:\n\n log-trace\n log-debug\n log-info\n log-warn\n log-error\n log-fatal\n\nEach of these probes has a single argument: the string that would be\nwritten to the log. Note that when a probe is enabled, it will\nfire whenever the corresponding function is called, even if the level of\nthe log message is less than that of any stream.\n\n\n## DTrace examples\n\nTrace all log messages coming from any Bunyan module on the system.\n(The `-x strsize=4k` is to raise dtrace\'s default 256 byte buffer size\nbecause log messages are longer than typical dtrace probes.)\n\n dtrace -x strsize=4k -qn \'bunyan*:::log-*{printf("%d: %s: %s", pid, probefunc, copyinstr(arg0))}\'\n\nTrace all log messages coming from the "wuzzle" component:\n\n dtrace -x strsize=4k -qn \'bunyan*:::log-*/strstr(this->str = copyinstr(arg0), "\\"component\\":\\"wuzzle\\"") != NULL/{printf("%s", this->str)}\'\n\nAggregate debug messages from process 1234, by message:\n\n dtrace -x strsize=4k -n \'bunyan1234:::log-debug{@[copyinstr(arg0)] = count()}\'\n\nHave the bunyan CLI pretty-print the traced logs:\n\n dtrace -x strsize=4k -qn \'bunyan1234:::log-*{printf("%s", copyinstr(arg0))}\' | bunyan\n\nA convenience handle has been made for this:\n\n bunyan -p 1234\n\n\nOn systems that support the\n[`jstack`](http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/) action\nvia a node.js helper, get a stack backtrace for any debug message that\nincludes the string "danger!":\n\n dtrace -x strsize=4k -qn \'log-debug/strstr(copyinstr(arg0), "danger!") != NULL/{printf("\\n%s", copyinstr(arg0)); jstack()}\'\n\nOutput of the above might be:\n\n {"name":"foo","hostname":"763bf293-d65c-42d5-872b-4abe25d5c4c7.local","pid":12747,"level":20,"msg":"danger!","time":"2012-10-30T18:28:57.115Z","v":0}\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n\n# Versioning\n\nThe scheme I follow is most succintly described by the bootstrap guys\n[here](https://github.com/twitter/bootstrap#versioning).\n\ntl;dr: All versions are `<major>.<minor>.<patch>` which will be incremented for\nbreaking backward compat and major reworks, new features without breaking\nchange, and bug fixes, respectively.\n\n\n# License\n\nMIT. See "LICENSE.txt".\n\n\n# See Also\n\n- Bunyan syslog support: <https://github.com/mcavage/node-bunyan-syslog>.\n- Bunyan + Graylog2: <https://github.com/mhart/gelf-stream>.\n- An example of a Bunyan shim to the Winston logging system:\n <https://github.com/trentm/node-bunyan-winston>.\n- [Bunyan for Bash](https://github.com/trevoro/bash-bunyan).\n- TODO: `RequestCaptureStream` example from restify.\n',
741 silly resolved readmeFilename: 'README.md',
741 silly resolved bugs: { url: 'https://github.com/trentm/node-bunyan/issues' },
741 silly resolved homepage: 'https://github.com/trentm/node-bunyan',
741 silly resolved _id: '[email protected]',
741 silly resolved _from: '[email protected]' } ]
742 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
743 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
744 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
745 info install [email protected] into /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling
746 info installOne [email protected]
747 info installOne [email protected]
748 info installOne [email protected]
749 info installOne [email protected]
750 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/once unbuild
751 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync unbuild
752 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/assert-plus unbuild
753 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/bunyan unbuild
754 verbose tar unpack /Users/sowens/.npm/once/1.3.0/package.tgz
755 silly lockFile 465d112e-odules-pooling-node-modules-once tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/once
756 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/once /Users/sowens/.npm/465d112e-odules-pooling-node-modules-once.lock
757 silly lockFile 09518eb9-owens-npm-once-1-3-0-package-tgz tar:///Users/sowens/.npm/once/1.3.0/package.tgz
758 verbose lock tar:///Users/sowens/.npm/once/1.3.0/package.tgz /Users/sowens/.npm/09518eb9-owens-npm-once-1-3-0-package-tgz.lock
759 verbose tar unpack /Users/sowens/.npm/vasync/1.4.0/package.tgz
760 silly lockFile a2cf3047-ules-pooling-node-modules-vasync tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync
761 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync /Users/sowens/.npm/a2cf3047-ules-pooling-node-modules-vasync.lock
762 silly lockFile c413599f-ens-npm-vasync-1-4-0-package-tgz tar:///Users/sowens/.npm/vasync/1.4.0/package.tgz
763 verbose lock tar:///Users/sowens/.npm/vasync/1.4.0/package.tgz /Users/sowens/.npm/c413599f-ens-npm-vasync-1-4-0-package-tgz.lock
764 verbose tar unpack /Users/sowens/.npm/assert-plus/0.1.4/package.tgz
765 silly lockFile cf5428f6-pooling-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/assert-plus
766 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/assert-plus /Users/sowens/.npm/cf5428f6-pooling-node-modules-assert-plus.lock
767 silly lockFile 174f458f-pm-assert-plus-0-1-4-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.4/package.tgz
768 verbose lock tar:///Users/sowens/.npm/assert-plus/0.1.4/package.tgz /Users/sowens/.npm/174f458f-pm-assert-plus-0-1-4-package-tgz.lock
769 verbose tar unpack /Users/sowens/.npm/bunyan/0.22.0/package.tgz
770 silly lockFile cc40ea78-ules-pooling-node-modules-bunyan tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/bunyan
771 verbose lock tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/bunyan /Users/sowens/.npm/cc40ea78-ules-pooling-node-modules-bunyan.lock
772 silly lockFile 88b1883f-ns-npm-bunyan-0-22-0-package-tgz tar:///Users/sowens/.npm/bunyan/0.22.0/package.tgz
773 verbose lock tar:///Users/sowens/.npm/bunyan/0.22.0/package.tgz /Users/sowens/.npm/88b1883f-ns-npm-bunyan-0-22-0-package-tgz.lock
774 silly gunzTarPerm modes [ '755', '644' ]
775 silly gunzTarPerm modes [ '755', '644' ]
776 silly gunzTarPerm modes [ '755', '644' ]
777 silly gunzTarPerm modes [ '755', '644' ]
778 silly gunzTarPerm extractEntry package.json
779 silly gunzTarPerm extractEntry package.json
780 silly gunzTarPerm extractEntry package.json
781 silly gunzTarPerm extractEntry package.json
782 silly gunzTarPerm extractEntry README.md
783 silly gunzTarPerm extractEntry LICENSE
784 silly gunzTarPerm extractEntry .npmignore
785 silly gunzTarPerm extractEntry README.md
786 silly gunzTarPerm extractEntry README.md
787 silly gunzTarPerm extractEntry assert.js
788 silly gunzTarPerm extractEntry .npmignore
789 silly gunzTarPerm extractEntry README.md
790 silly gunzTarPerm extractEntry once.js
791 silly gunzTarPerm extractEntry test/once.js
792 silly gunzTarPerm extractEntry LICENSE
793 silly gunzTarPerm extractEntry LICENSE.txt
794 silly gunzTarPerm extractEntry Makefile
795 silly gunzTarPerm extractEntry tools/timechild.js
796 silly gunzTarPerm extractEntry .gitmodules
797 silly gunzTarPerm extractEntry Makefile
798 info [email protected] Failed to exec install script
799 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/buffertools unbuild
800 info preuninstall [email protected]
801 verbose unsafe-perm in lifecycle false
802 info uninstall [email protected]
803 verbose false,/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules,/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules unbuild [email protected]
804 info postuninstall [email protected]
805 verbose about to build /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs
806 info /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs unbuild
807 info preuninstall [email protected]
808 info uninstall [email protected]
809 verbose true,/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules,/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules unbuild [email protected]
810 verbose /Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/.bin,[object Object] binRoot
811 info postuninstall [email protected]
812 silly gunzTarPerm extractEntry Makefile.targ
813 silly gunzTarPerm extractEntry examples/barrier-basic.js
814 silly lockFile cf5428f6-pooling-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/assert-plus
815 silly lockFile cf5428f6-pooling-node-modules-assert-plus tar:///Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/assert-plus
816 silly lockFile 174f458f-pm-assert-plus-0-1-4-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.4/package.tgz
817 silly lockFile 174f458f-pm-assert-plus-0-1-4-package-tgz tar:///Users/sowens/.npm/assert-plus/0.1.4/package.tgz
818 error error rolling back Error: ENOTEMPTY, rmdir '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync'
818 error error rolling back [email protected] { [Error: ENOTEMPTY, rmdir '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync']
818 error error rolling back stack: 'Error: ENOTEMPTY, rmdir \'/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync\'',
818 error error rolling back errno: -66,
818 error error rolling back code: 'ENOTEMPTY',
818 error error rolling back path: '/Users/sowens/Documents/workspace/DemoWebsockServer/node_modules/ldapjs/node_modules/pooling/node_modules/vasync' }
819 error [email protected] install: `node-gyp rebuild`
819 error Exit status 1
820 error Failed at the [email protected] install script.
820 error This is most likely a problem with the buffertools package,
820 error not with npm itself.
820 error Tell the author that this fails on your system:
820 error node-gyp rebuild
820 error You can get their info via:
820 error npm owner ls buffertools
820 error There is likely additional logging output above.
821 error System Darwin 12.5.0
822 error command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "ldapjs"
823 error cwd /Users/sowens/Documents/workspace/DemoWebsockServer
824 error node -v v0.11.11-pre
825 error npm -v 1.3.22
826 error code ELIFECYCLE
827 verbose exit [ 1, true ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment