vulcan 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ })();