vulcan 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. data/README.md +1 -80
  2. data/lib/vulcan/cli.rb +12 -33
  3. data/lib/vulcan/version.rb +1 -1
  4. data/server/bin/make +3 -1
  5. data/server/lib/spawner.js +4 -9
  6. data/server/node_modules/connect-form/node_modules/formidable/Readme.md +2 -13
  7. data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +7 -19
  8. data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +1 -12
  9. data/server/node_modules/connect-form/node_modules/formidable/package.json +1 -1
  10. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +10 -0
  11. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +9 -0
  12. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +1 -1
  13. data/server/node_modules/cradle/lib/cradle.js +1 -0
  14. data/server/node_modules/cradle/node_modules/vows/LICENSE +20 -0
  15. data/server/node_modules/cradle/node_modules/vows/Makefile +7 -0
  16. data/server/node_modules/cradle/node_modules/vows/README.md +39 -0
  17. data/server/node_modules/cradle/node_modules/vows/bin/vows +515 -0
  18. data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +27 -0
  19. data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +215 -0
  20. data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +77 -0
  21. data/server/node_modules/cradle/node_modules/vows/lib/vows.js +193 -0
  22. data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +131 -0
  23. data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +55 -0
  24. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +29 -0
  25. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +2 -0
  26. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +61 -0
  27. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +54 -0
  28. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +54 -0
  29. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +38 -0
  30. data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +28 -0
  31. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +67 -0
  32. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +16 -0
  33. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +8 -0
  34. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +44 -0
  35. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +39 -0
  36. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +90 -0
  37. data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +319 -0
  38. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +20 -0
  39. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +4 -0
  40. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +72 -0
  41. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +233 -0
  42. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +14 -0
  43. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +55 -0
  44. data/server/node_modules/cradle/node_modules/vows/package.json +14 -0
  45. data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +135 -0
  46. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +18 -0
  47. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +18 -0
  48. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +17 -0
  49. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +18 -0
  50. data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +140 -0
  51. data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +133 -0
  52. data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +51 -0
  53. data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +374 -0
  54. data/server/node_modules/cradle/package.json +3 -3
  55. data/server/node_modules/cradle/test/cache-test.js +7 -6
  56. data/server/node_modules/cradle/test/cradle-test.js +5 -4
  57. data/server/node_modules/cradle/test/response-test.js +6 -5
  58. data/server/node_modules/express/History.md +1 -53
  59. data/server/node_modules/express/Makefile +9 -3
  60. data/server/node_modules/express/Readme.md +1 -3
  61. data/server/node_modules/express/bin/express +66 -65
  62. data/server/node_modules/express/lib/express.js +1 -1
  63. data/server/node_modules/express/lib/request.js +9 -23
  64. data/server/node_modules/express/lib/response.js +2 -3
  65. data/server/node_modules/express/lib/utils.js +0 -13
  66. data/server/node_modules/express/lib/view.js +16 -19
  67. data/server/node_modules/express/lib/view/view.js +1 -2
  68. data/server/node_modules/express/node_modules/connect/lib/connect.js +1 -1
  69. data/server/node_modules/express/node_modules/connect/lib/http.js +0 -2
  70. data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +31 -135
  71. data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +1 -5
  72. data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +2 -2
  73. data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +21 -26
  74. data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +38 -91
  75. data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +1 -1
  76. data/server/node_modules/express/node_modules/connect/lib/utils.js +4 -11
  77. data/server/node_modules/express/node_modules/connect/package.json +6 -7
  78. data/server/node_modules/express/node_modules/connect/test.js +31 -44
  79. data/server/node_modules/express/node_modules/mime/index.js +1 -0
  80. data/server/node_modules/express/node_modules/mime/mime.js +3 -3
  81. data/server/node_modules/express/node_modules/mime/{types/mime.types → mime.types} +0 -0
  82. data/server/node_modules/express/node_modules/mime/{types/node.types → node.types} +0 -17
  83. data/server/node_modules/express/node_modules/mime/package.json +10 -21
  84. data/server/node_modules/express/node_modules/mime/test.js +3 -2
  85. data/server/node_modules/express/node_modules/qs/History.md +0 -11
  86. data/server/node_modules/express/node_modules/qs/Makefile +3 -1
  87. data/server/node_modules/express/node_modules/qs/Readme.md +4 -2
  88. data/server/node_modules/express/node_modules/qs/lib/querystring.js +74 -100
  89. data/server/node_modules/express/node_modules/qs/package.json +2 -9
  90. data/server/node_modules/express/node_modules/qs/support/expresso/History.md +128 -0
  91. data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +53 -0
  92. data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +61 -0
  93. data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +856 -0
  94. data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +1080 -0
  95. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +377 -0
  96. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +290 -0
  97. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +3 -0
  98. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +42 -0
  99. data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +4 -0
  100. data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +16 -0
  101. data/server/node_modules/express/node_modules/qs/support/expresso/package.json +12 -0
  102. data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +91 -0
  103. data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +12 -0
  104. data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +13 -0
  105. data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +14 -0
  106. data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +146 -0
  107. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +39 -0
  108. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +48 -0
  109. data/server/node_modules/express/node_modules/qs/support/should/History.md +22 -0
  110. data/server/node_modules/express/node_modules/qs/support/should/Makefile +6 -0
  111. data/server/node_modules/express/node_modules/qs/support/should/Readme.md +248 -0
  112. data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +53 -0
  113. data/server/node_modules/express/node_modules/qs/support/should/index.js +2 -0
  114. data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +91 -0
  115. data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +548 -0
  116. data/server/node_modules/express/node_modules/qs/support/should/package.json +8 -0
  117. data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +358 -0
  118. data/server/node_modules/express/node_modules/qs/test/{parse.js → parse.test.js} +2 -1
  119. data/server/node_modules/express/node_modules/qs/test/{stringify.js → stringify.test.js} +0 -0
  120. data/server/node_modules/express/package.json +8 -9
  121. data/server/node_modules/node-uuid/README.md +67 -166
  122. data/server/node_modules/node-uuid/package.json +3 -5
  123. data/server/node_modules/node-uuid/{benchmark → test}/benchmark-native.c +0 -0
  124. data/server/node_modules/node-uuid/test/benchmark.js +27 -0
  125. data/server/node_modules/node-uuid/test/test.html +0 -3
  126. data/server/node_modules/node-uuid/test/test.js +57 -214
  127. data/server/node_modules/node-uuid/uuid.js +56 -225
  128. data/server/node_modules/restler/README.md +7 -20
  129. data/server/node_modules/restler/bin/restler +1 -1
  130. data/server/node_modules/restler/lib/multipartform.js +8 -9
  131. data/server/node_modules/restler/lib/restler.js +22 -64
  132. data/server/node_modules/restler/package.json +2 -2
  133. data/server/node_modules/restler/test/restler.js +2 -22
  134. data/server/node_modules/restler/test/test_helper.js +1 -20
  135. data/server/package.json +10 -10
  136. data/server/web.js +7 -30
  137. metadata +96 -89
  138. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/plain.txt +0 -1
  139. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/no-filename/generic.http +0 -13
  140. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/no-filename.js +0 -3
  141. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +0 -14
  142. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +0 -286
  143. data/server/node_modules/express/node_modules/connect/node_modules/formidable/TODO +0 -3
  144. data/server/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +0 -70
  145. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +0 -43
  146. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +0 -48
  147. data/server/node_modules/express/node_modules/connect/node_modules/formidable/index.js +0 -1
  148. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +0 -61
  149. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +0 -377
  150. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +0 -3
  151. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +0 -312
  152. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +0 -25
  153. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +0 -6
  154. data/server/node_modules/express/node_modules/connect/node_modules/formidable/package.json +0 -22
  155. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +0 -19
  156. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +0 -1
  157. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +0 -1
  158. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/no-filename/generic.http +0 -13
  159. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +0 -3
  160. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +0 -26
  161. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +0 -24
  162. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +0 -23
  163. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +0 -24
  164. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +0 -22
  165. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +0 -22
  166. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +0 -22
  167. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +0 -3
  168. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +0 -21
  169. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multi_video.upload +0 -0
  170. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +0 -72
  171. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +0 -89
  172. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +0 -24
  173. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +0 -80
  174. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +0 -104
  175. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +0 -715
  176. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +0 -50
  177. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +0 -45
  178. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +0 -72
  179. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +0 -2
  180. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +0 -63
  181. data/server/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +0 -47
  182. data/server/node_modules/express/node_modules/mkdirp/LICENSE +0 -21
  183. data/server/node_modules/express/node_modules/mkdirp/README.markdown +0 -21
  184. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js +0 -6
  185. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.orig +0 -6
  186. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.rej +0 -19
  187. data/server/node_modules/express/node_modules/mkdirp/index.js +0 -20
  188. data/server/node_modules/express/node_modules/mkdirp/package.json +0 -23
  189. data/server/node_modules/express/node_modules/mkdirp/test/mkdirp.js +0 -28
  190. data/server/node_modules/express/node_modules/mkdirp/test/race.js +0 -41
  191. data/server/node_modules/express/node_modules/mkdirp/test/rel.js +0 -32
  192. data/server/node_modules/express/node_modules/qs/test/mocha.opts +0 -2
  193. data/server/node_modules/express/testing/foo/app.js +0 -35
  194. data/server/node_modules/express/testing/foo/package.json +0 -9
  195. data/server/node_modules/express/testing/foo/public/stylesheets/style.css +0 -8
  196. data/server/node_modules/express/testing/foo/routes/index.js +0 -10
  197. data/server/node_modules/express/testing/foo/views/index.jade +0 -2
  198. data/server/node_modules/express/testing/foo/views/layout.jade +0 -6
  199. data/server/node_modules/express/testing/index.js +0 -43
  200. data/server/node_modules/express/testing/public/test.txt +0 -2971
  201. data/server/node_modules/express/testing/views/page.html +0 -1
  202. data/server/node_modules/express/testing/views/page.jade +0 -3
  203. data/server/node_modules/express/testing/views/test.md +0 -1
  204. data/server/node_modules/express/testing/views/user/index.jade +0 -1
  205. data/server/node_modules/express/testing/views/user/list.jade +0 -1
  206. data/server/node_modules/node-uuid/benchmark/README.md +0 -53
  207. data/server/node_modules/node-uuid/benchmark/bench.gnu +0 -174
  208. data/server/node_modules/node-uuid/benchmark/bench.sh +0 -34
  209. data/server/node_modules/node-uuid/benchmark/benchmark.js +0 -84
  210. data/server/node_modules/node-uuid/test/benchmark-native +0 -0
  211. data/server/node_modules/node-uuid/test/compare_v1.js +0 -63
@@ -1,14 +1,12 @@
1
1
  {
2
2
  "name" : "node-uuid",
3
- "description" : "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
3
+ "description" : "Simple, fast generation of RFC4122(v4) UUIDs.",
4
4
  "url" : "http://github.com/broofa/node-uuid",
5
5
  "keywords" : ["uuid", "guid", "rfc4122"],
6
6
  "author" : "Robert Kieffer <robert@broofa.com>",
7
- "contributors" : [
8
- {"name": "Christoph Tavan <dev@tavan.de>", "github": "https://github.com/ctavan"}
9
- ],
7
+ "contributors" : [],
10
8
  "dependencies" : [],
11
9
  "lib" : ".",
12
10
  "main" : "./uuid.js",
13
- "version" : "1.3.3"
11
+ "version" : "1.2.0"
14
12
  }
@@ -0,0 +1,27 @@
1
+ var nodeuuid = require('../uuid'),
2
+ uuidjs = require('uuid').generate,
3
+ N = 5e5;
4
+
5
+ function rate(msg, t) {
6
+ console.log(msg + ': ' +
7
+ (N / (Date.now() - t) * 1e3 | 0) +
8
+ ' uuids/second');
9
+ }
10
+
11
+ // node-uuid - string form
12
+ for (var i = 0, t = Date.now(); i < N; i++) nodeuuid();
13
+ rate('nodeuuid()', t);
14
+
15
+ for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary');
16
+ rate('nodeuuid(\'binary\')', t);
17
+
18
+ var buffer = new nodeuuid.BufferClass(16);
19
+ for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary', buffer);
20
+ rate('nodeuuid(\'binary\', buffer)', t);
21
+
22
+ // node-uuid - string form
23
+ for (var i = 0, t = Date.now(); i < N; i++) uuidjs();
24
+ rate('uuidjs()', t);
25
+
26
+ for (var i = 0, t = Date.now(); i < N; i++) uuidjs('binary');
27
+ rate('uuidjs(\'binary\')', t);
@@ -5,9 +5,6 @@
5
5
  font-family: monospace;
6
6
  font-size: 8pt;
7
7
  }
8
- div.log {color: #444;}
9
- div.warn {color: #550;}
10
- div.error {color: #800; font-weight: bold;}
11
8
  </style>
12
9
  <script src="../uuid.js"></script>
13
10
  </head>
@@ -1,240 +1,83 @@
1
- if (!this.uuid) {
2
- // node.js
1
+ if (typeof(uuid) == 'undefined') {
3
2
  uuid = require('../uuid');
4
3
  }
5
4
 
6
- //
7
- // x-platform log/assert shims
8
- //
9
-
10
- function _log(msg, type) {
11
- type = type || 'log';
5
+ var UUID_FORMAT = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89a-fAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/;
6
+ var N = 1e5;
12
7
 
8
+ function log(msg) {
13
9
  if (typeof(document) != 'undefined') {
14
- document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>');
10
+ document.write('<div>' + msg + '</div>');
15
11
  }
16
12
  if (typeof(console) != 'undefined') {
17
- var color = {
18
- log: '\033[30m',
19
- warn: '\033[33m',
20
- error: '\033[31m'
21
- }
22
- console[type](color[type] + msg + color.log);
23
- }
24
- }
25
-
26
- function log(msg) {_log(msg, 'log');}
27
- function warn(msg) {_log(msg, 'warn');}
28
- function error(msg) {_log(msg, 'error');}
29
-
30
- function assert(res, msg) {
31
- if (!res) {
32
- error('FAIL: ' + msg);
33
- } else {
34
- log('Pass: ' + msg);
13
+ console.log(msg);
35
14
  }
36
15
  }
37
16
 
38
- //
39
- // Unit tests
40
- //
41
-
42
- // Verify ordering of v1 ids created with explicit times
43
- var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00
44
-
45
- function compare(name, ids) {
46
- ids = ids.map(function(id) {
47
- return id.split('-').reverse().join('-');
48
- }).sort();
49
- var sorted = ([].concat(ids)).sort();
50
-
51
- assert(sorted.toString() == ids.toString(), name + ' have expected order');
52
- }
53
-
54
- // Verify ordering of v1 ids created using default behavior
55
- compare('uuids with current time', [
56
- uuid.v1(),
57
- uuid.v1(),
58
- uuid.v1(),
59
- uuid.v1(),
60
- uuid.v1()
61
- ]);
62
-
63
- // Verify ordering of v1 ids created with explicit times
64
- compare('uuids with time option', [
65
- uuid.v1({msecs: TIME - 10*3600*1000}),
66
- uuid.v1({msecs: TIME - 1}),
67
- uuid.v1({msecs: TIME}),
68
- uuid.v1({msecs: TIME + 1}),
69
- uuid.v1({msecs: TIME + 28*24*3600*1000}),
70
- ]);
71
-
72
- assert(
73
- uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}),
74
- 'IDs created at same msec are different'
75
- );
76
-
77
- // Verify throw if too many ids created
78
- var thrown = false;
79
- try {
80
- uuid.v1({msecs: TIME, nsecs: 10000});
81
- } catch (e) {
82
- thrown = true;
17
+ function rate(msg, t) {
18
+ log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids/second');
83
19
  }
84
- assert(thrown, 'Exception thrown when > 10K ids created in 1 ms');
85
-
86
- // Verify clock regression bumps clockseq
87
- var uidt = uuid.v1({msecs: TIME});
88
- var uidtb = uuid.v1({msecs: TIME - 1});
89
- assert(
90
- parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1,
91
- 'Clock regression by msec increments the clockseq'
92
- );
93
-
94
- // Verify clock regression bumps clockseq
95
- var uidtn = uuid.v1({msecs: TIME, nsecs: 10});
96
- var uidtnb = uuid.v1({msecs: TIME, nsecs: 9});
97
- assert(
98
- parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1,
99
- 'Clock regression by nsec increments the clockseq'
100
- );
101
-
102
- // Verify explicit options produce expected id
103
- var id = uuid.v1({
104
- msecs: 1321651533573,
105
- nsecs: 5432,
106
- clockseq: 0x385c,
107
- node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ]
108
- });
109
- assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id');
110
20
 
111
- // Verify adjacent ids across a msec boundary are 1 time unit apart
112
- var u0 = uuid.v1({msecs: TIME, nsecs: 9999});
113
- var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0});
114
-
115
- var before = u0.split('-')[0], after = u1.split('-')[0];
116
- var dt = parseInt(after, 16) - parseInt(before, 16);
117
- assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart');
118
-
119
- //
120
- // Test parse/unparse
121
- //
122
-
123
- id = '00112233445566778899aabbccddeeff';
124
- assert(uuid.unparse(uuid.parse(id.substr(0,10))) ==
125
- '00112233-4400-0000-0000-000000000000', 'Short parse');
126
- assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) ==
127
- '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse');
128
-
129
- //
130
21
  // Perf tests
131
- //
132
-
133
- var generators = {
134
- v1: uuid.v1,
135
- v4: uuid.v4
136
- };
22
+ log('- - - Performance Data - - -');
23
+ for (var i = 0, t = Date.now(); i < N; i++) uuid();
24
+ rate('uuid()', t);
25
+ for (var i = 0, t = Date.now(); i < N; i++) uuid('binary');
26
+ rate('uuid(\'binary\')', t);
27
+ var buf = new uuid.BufferClass(16);
28
+ for (var i = 0, t = Date.now(); i < N; i++) uuid('binary', buf);
29
+ rate('uuid(\'binary\', buffer)', t);
30
+
31
+ var counts = {}, max = 0;
32
+
33
+ var b = new uuid.BufferClass(16);
34
+ for (var i = 0; i < N; i++) {
35
+ id = uuid();
36
+ if (!UUID_FORMAT.test(id)) {
37
+ throw Error(id + ' is not a valid UUID string');
38
+ }
137
39
 
138
- var UUID_FORMAT = {
139
- v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i,
140
- v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i
141
- };
40
+ if (id != uuid.unparse(uuid.parse(id))) {
41
+ throw Error(id + ' does not parse/unparse');
42
+ }
142
43
 
143
- var N = 1e4;
44
+ // Count digits for our randomness check
45
+ var digits = id.replace(/-/g, '').split('');
46
+ for (var j = digits.length-1; j >= 0; j--) {
47
+ var c = digits[j];
48
+ max = Math.max(max, counts[c] = (counts[c] || 0) + 1);
49
+ }
50
+ }
144
51
 
145
52
  // Get %'age an actual value differs from the ideal value
146
53
  function divergence(actual, ideal) {
147
54
  return Math.round(100*100*(actual - ideal)/ideal)/100;
148
55
  }
149
56
 
150
- function rate(msg, t) {
151
- log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second');
152
- }
153
-
154
- for (var version in generators) {
155
- var counts = {}, max = 0;
156
- var generator = generators[version];
157
- var format = UUID_FORMAT[version];
158
-
159
- log('\nSanity check ' + N + ' ' + version + ' uuids');
160
- for (var i = 0, ok = 0; i < N; i++) {
161
- id = generator();
162
- if (!format.test(id)) {
163
- throw Error(id + ' is not a valid UUID string');
164
- }
165
-
166
- if (id != uuid.unparse(uuid.parse(id))) {
167
- assert(fail, id + ' is not a valid id');
168
- }
169
-
170
- // Count digits for our randomness check
171
- if (version == 'v4') {
172
- var digits = id.replace(/-/g, '').split('');
173
- for (var j = digits.length-1; j >= 0; j--) {
174
- var c = digits[j];
175
- max = Math.max(max, counts[c] = (counts[c] || 0) + 1);
176
- }
177
- }
178
- }
179
-
180
- // Check randomness for v4 UUIDs
181
- if (version == 'v4') {
182
- // Limit that we get worried about randomness. (Purely empirical choice, this!)
183
- var limit = 2*100*Math.sqrt(1/N);
184
-
185
- log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)');
186
-
187
- for (var i = 0; i < 16; i++) {
188
- var c = i.toString(16);
189
- var bar = '', n = counts[c], p = Math.round(n/max*100|0);
190
-
191
- // 1-3,5-8, and D-F: 1:16 odds over 30 digits
192
- var ideal = N*30/16;
193
- if (i == 4) {
194
- // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits
195
- ideal = N*(1 + 30/16);
196
- } else if (i >= 8 && i <= 11) {
197
- // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits
198
- ideal = N*(1/4 + 30/16);
199
- } else {
200
- // Otherwise: 1:16 odds on 30 digits
201
- ideal = N*30/16;
202
- }
203
- var d = divergence(n, ideal);
204
-
205
- // Draw bar using UTF squares (just for grins)
206
- var s = n/max*50 | 0;
207
- while (s--) bar += '=';
208
-
209
- assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)');
210
- }
211
- }
212
- }
213
-
214
- // Perf tests
215
- for (var version in generators) {
216
- log('\nPerformance testing ' + version + ' UUIDs');
217
- var generator = generators[version];
218
- var buf = new uuid.BufferClass(16);
219
-
220
- if (version == 'v4') {
221
- ['mathRNG', 'whatwgRNG', 'nodeRNG'].forEach(function(rng) {
222
- if (uuid[rng]) {
223
- var options = {rng: uuid[rng]};
224
- for (var i = 0, t = Date.now(); i < N; i++) generator(options);
225
- rate('uuid.' + version + '() with ' + rng, t);
226
- } else {
227
- log('uuid.' + version + '() with ' + rng + ': not defined');
228
- }
229
- });
57
+ log('<br />- - - Distribution of Hex Digits (% deviation from ideal) - - -');
58
+
59
+ // Check randomness
60
+ for (var i = 0; i < 16; i++) {
61
+ var c = i.toString(16);
62
+ var bar = '', n = counts[c], p = Math.round(n/max*100|0);
63
+
64
+ // 1-3,5-8, and D-F: 1:16 odds over 30 digits
65
+ var ideal = N*30/16;
66
+ if (i == 4) {
67
+ // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits
68
+ ideal = N*(1 + 30/16);
69
+ } else if (i >= 8 && i <= 11) {
70
+ // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits
71
+ ideal = N*(1/4 + 30/16);
230
72
  } else {
231
- for (var i = 0, t = Date.now(); i < N; i++) generator();
232
- rate('uuid.' + version + '()', t);
73
+ // Otherwise: 1:16 odds on 30 digits
74
+ ideal = N*30/16;
233
75
  }
76
+ var d = divergence(n, ideal);
234
77
 
235
- for (var i = 0, t = Date.now(); i < N; i++) generator('binary');
236
- rate('uuid.' + version + '(\'binary\')', t);
78
+ // Draw bar using UTF squares (just for grins)
79
+ var s = n/max*50 | 0;
80
+ while (s--) bar += '=';
237
81
 
238
- for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf);
239
- rate('uuid.' + version + '(\'binary\', buffer)', t);
82
+ log(c + ' |' + bar + '| ' + counts[c] + ' (' + d + '%)');
240
83
  }
@@ -1,249 +1,80 @@
1
- // node-uuid/uuid.js
2
- //
3
- // Copyright (c) 2010 Robert Kieffer
4
- // Dual licensed under the MIT and GPL licenses.
5
- // Documentation and details at https://github.com/broofa/node-uuid
6
1
  (function() {
7
- var _global = this;
2
+ /*
3
+ * Generate a RFC4122(v4) UUID
4
+ *
5
+ * Documentation at https://github.com/broofa/node-uuid
6
+ */
8
7
 
9
- // Unique ID creation requires a high quality random # generator, but
10
- // Math.random() does not guarantee "cryptographic quality". So we feature
11
- // detect for more robust APIs, normalizing each method to return 128-bits
12
- // (16 bytes) of random data.
13
- var mathRNG, nodeRNG, whatwgRNG;
14
-
15
- // Math.random()-based RNG. All platforms, very fast, unknown quality
16
- var _rndBytes = new Array(16);
17
- mathRNG = function() {
18
- var r, b = _rndBytes, i = 0;
19
-
20
- for (var i = 0, r; i < 16; i++) {
21
- if ((i & 0x03) == 0) r = Math.random() * 0x100000000;
22
- b[i] = r >>> ((i & 0x03) << 3) & 0xff;
23
- }
24
-
25
- return b;
26
- }
27
-
28
- // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
29
- // WebKit only (currently), moderately fast, high quality
30
- if (_global.crypto && crypto.getRandomValues) {
31
- var _rnds = new Uint32Array(4);
32
- whatwgRNG = function() {
33
- crypto.getRandomValues(_rnds);
34
-
35
- for (var c = 0 ; c < 16; c++) {
36
- _rndBytes[c] = _rnds[c >> 2] >>> ((c & 0x03) * 8) & 0xff;
37
- }
38
- return _rndBytes;
39
- }
40
- }
41
-
42
- // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
43
- // Node.js only, moderately fast, high quality
44
- try {
45
- var _rb = require('crypto').randomBytes;
46
- nodeRNG = _rb && function() {
47
- return _rb(16);
48
- };
49
- } catch (e) {}
50
-
51
- // Select RNG with best quality
52
- var _rng = nodeRNG || whatwgRNG || mathRNG;
53
-
54
- // Buffer class to use
8
+ // Use node.js Buffer class if available, otherwise use the Array class
55
9
  var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array;
56
10
 
57
- // Maps for number <-> hex string conversion
58
- var _byteToHex = [];
59
- var _hexToByte = {};
11
+ // Buffer used for generating string uuids
12
+ var _buf = new BufferClass(16);
13
+
14
+ // Cache number <-> hex string for octet values
15
+ var toString = [];
16
+ var toNumber = {};
60
17
  for (var i = 0; i < 256; i++) {
61
- _byteToHex[i] = (i + 0x100).toString(16).substr(1);
62
- _hexToByte[_byteToHex[i]] = i;
18
+ toString[i] = (i + 0x100).toString(16).substr(1);
19
+ toNumber[toString[i]] = i;
63
20
  }
64
21
 
65
- // **`parse()` - Parse a UUID into it's component bytes**
66
- function parse(s, buf, offset) {
67
- var i = (buf && offset) || 0, ii = 0;
68
-
69
- buf = buf || [];
70
- s.toLowerCase().replace(/[0-9a-f]{2}/g, function(byte) {
71
- if (ii < 16) { // Don't overflow!
72
- buf[i + ii++] = _hexToByte[byte];
73
- }
22
+ function parse(s) {
23
+ var buf = new BufferClass(16);
24
+ var i = 0, ton = toNumber;
25
+ s.toLowerCase().replace(/[0-9a-f][0-9a-f]/g, function(octet) {
26
+ buf[i++] = toNumber[octet];
74
27
  });
75
-
76
- // Zero out remaining bytes if string was short
77
- while (ii < 16) {
78
- buf[i + ii++] = 0;
79
- }
80
-
81
28
  return buf;
82
29
  }
83
30
 
84
- // **`unparse()` - Convert UUID byte array (ala parse()) into a string**
85
- function unparse(buf, offset) {
86
- var i = offset || 0, bth = _byteToHex;
87
- return bth[buf[i++]] + bth[buf[i++]] +
88
- bth[buf[i++]] + bth[buf[i++]] + '-' +
89
- bth[buf[i++]] + bth[buf[i++]] + '-' +
90
- bth[buf[i++]] + bth[buf[i++]] + '-' +
91
- bth[buf[i++]] + bth[buf[i++]] + '-' +
92
- bth[buf[i++]] + bth[buf[i++]] +
93
- bth[buf[i++]] + bth[buf[i++]] +
94
- bth[buf[i++]] + bth[buf[i++]];
31
+ function unparse(buf) {
32
+ var tos = toString, b = buf;
33
+ return tos[b[0]] + tos[b[1]] + tos[b[2]] + tos[b[3]] + '-' +
34
+ tos[b[4]] + tos[b[5]] + '-' +
35
+ tos[b[6]] + tos[b[7]] + '-' +
36
+ tos[b[8]] + tos[b[9]] + '-' +
37
+ tos[b[10]] + tos[b[11]] + tos[b[12]] +
38
+ tos[b[13]] + tos[b[14]] + tos[b[15]];
95
39
  }
96
40
 
97
- // **`v1()` - Generate time-based UUID**
98
- //
99
- // Inspired by https://github.com/LiosK/UUID.js
100
- // and http://docs.python.org/library/uuid.html
101
-
102
- // random #'s we need to init node and clockseq
103
- var _seedBytes = _rng();
104
-
105
- // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
106
- var _nodeId = [
107
- _seedBytes[0] | 0x01,
108
- _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
109
- ];
110
-
111
- // Per 4.2.2, randomize (14 bit) clockseq
112
- var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
113
-
114
- // Previous uuid creation time
115
- var _lastMSecs = 0, _lastNSecs = 0;
116
-
117
- // See https://github.com/broofa/node-uuid for API details
118
- function v1(options, buf, offset) {
41
+ var b32 = 0x100000000, ff = 0xff;
42
+ function uuid(fmt, buf, offset) {
43
+ var b = fmt != 'binary' ? _buf : (buf ? buf : new BufferClass(16));
119
44
  var i = buf && offset || 0;
120
- var b = buf || [];
121
-
122
- options = options || {};
123
-
124
- var clockseq = options.clockseq != null ? options.clockseq : _clockseq;
125
-
126
- // UUID timestamps are 100 nano-second units since the Gregorian epoch,
127
- // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
128
- // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
129
- // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
130
- var msecs = options.msecs != null ? options.msecs : new Date().getTime();
131
-
132
- // Per 4.2.1.2, use count of uuid's generated during the current clock
133
- // cycle to simulate higher resolution clock
134
- var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1;
135
-
136
- // Time since last uuid creation (in msecs)
137
- var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
138
45
 
139
- // Per 4.2.1.2, Bump clockseq on clock regression
140
- if (dt < 0 && options.clockseq == null) {
141
- clockseq = clockseq + 1 & 0x3fff;
142
- }
46
+ var r = Math.random()*b32;
47
+ b[i++] = r & ff;
48
+ b[i++] = r>>>8 & ff;
49
+ b[i++] = r>>>16 & ff;
50
+ b[i++] = r>>>24 & ff;
51
+ r = Math.random()*b32;
52
+ b[i++] = r & ff;
53
+ b[i++] = r>>>8 & ff;
54
+ b[i++] = r>>>16 & 0x0f | 0x40; // See RFC4122 sect. 4.1.3
55
+ b[i++] = r>>>24 & ff;
56
+ r = Math.random()*b32;
57
+ b[i++] = r & 0x3f | 0x80; // See RFC4122 sect. 4.4
58
+ b[i++] = r>>>8 & ff;
59
+ b[i++] = r>>>16 & ff;
60
+ b[i++] = r>>>24 & ff;
61
+ r = Math.random()*b32;
62
+ b[i++] = r & ff;
63
+ b[i++] = r>>>8 & ff;
64
+ b[i++] = r>>>16 & ff;
65
+ b[i++] = r>>>24 & ff;
66
+
67
+ return fmt === undefined ? unparse(b) : b;
68
+ };
143
69
 
144
- // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
145
- // time interval
146
- if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {
147
- nsecs = 0;
148
- }
149
-
150
- // Per 4.2.1.2 Throw error if too many uuids are requested
151
- if (nsecs >= 10000) {
152
- throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
153
- }
154
-
155
- _lastMSecs = msecs;
156
- _lastNSecs = nsecs;
157
- _clockseq = clockseq;
158
-
159
- // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
160
- msecs += 12219292800000;
161
-
162
- // `time_low`
163
- var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
164
- b[i++] = tl >>> 24 & 0xff;
165
- b[i++] = tl >>> 16 & 0xff;
166
- b[i++] = tl >>> 8 & 0xff;
167
- b[i++] = tl & 0xff;
168
-
169
- // `time_mid`
170
- var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
171
- b[i++] = tmh >>> 8 & 0xff;
172
- b[i++] = tmh & 0xff;
173
-
174
- // `time_high_and_version`
175
- b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
176
- b[i++] = tmh >>> 16 & 0xff;
177
-
178
- // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
179
- b[i++] = clockseq >>> 8 | 0x80;
180
-
181
- // `clock_seq_low`
182
- b[i++] = clockseq & 0xff;
183
-
184
- // `node`
185
- var node = options.node || _nodeId;
186
- for (var n = 0; n < 6; n++) {
187
- b[i + n] = node[n];
188
- }
189
-
190
- return buf ? buf : unparse(b);
191
- }
192
-
193
- // **`v4()` - Generate random UUID**
194
-
195
- // See https://github.com/broofa/node-uuid for API details
196
- function v4(options, buf, offset) {
197
- // Deprecated - 'format' argument, as supported in v1.2
198
- var i = buf && offset || 0;
199
-
200
- if (typeof(options) == 'string') {
201
- buf = options == 'binary' ? new BufferClass(16) : null;
202
- options = null;
203
- }
204
- options = options || {};
205
-
206
- var rnds = options.random || (options.rng || _rng)();
207
-
208
- // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
209
- rnds[6] = (rnds[6] & 0x0f) | 0x40;
210
- rnds[8] = (rnds[8] & 0x3f) | 0x80;
211
-
212
- // Copy bytes to buffer, if provided
213
- if (buf) {
214
- for (var ii = 0; ii < 16; ii++) {
215
- buf[i + ii] = rnds[ii];
216
- }
217
- }
218
-
219
- return buf || unparse(rnds);
220
- }
221
-
222
- // Export public API
223
- var uuid = v4;
224
- uuid.v1 = v1;
225
- uuid.v4 = v4;
226
70
  uuid.parse = parse;
227
71
  uuid.unparse = unparse;
228
72
  uuid.BufferClass = BufferClass;
229
73
 
230
- // Export RNG options
231
- uuid.mathRNG = mathRNG;
232
- uuid.nodeRNG = nodeRNG;
233
- uuid.whatwgRNG = whatwgRNG;
234
-
235
74
  if (typeof(module) != 'undefined') {
236
- // Play nice with node.js
237
75
  module.exports = uuid;
238
76
  } else {
239
- // Play nice with browsers
240
- var _previousRoot = _global.uuid;
241
-
242
- // **`noConflict()` - (browser only) to reset global 'uuid' var**
243
- uuid.noConflict = function() {
244
- _global.uuid = _previousRoot;
245
- return uuid;
246
- }
247
- _global.uuid = uuid;
77
+ // In browser? Set as top-level function
78
+ this.uuid = uuid;
248
79
  }
249
- }());
80
+ })();