diff options
Diffstat (limited to 'deps/npm/node_modules/uuid')
-rw-r--r-- | deps/npm/node_modules/uuid/.eslintrc.json | 5 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/CHANGELOG.md | 57 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/HISTORY.md | 27 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/README.md | 162 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/README_js.md | 280 | ||||
-rwxr-xr-x | deps/npm/node_modules/uuid/bin/uuid | 15 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/md5-browser.js | 216 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/md5.js | 25 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/rng-browser.js | 21 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/rng.js | 10 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/sha1-browser.js | 6 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/sha1.js | 28 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/lib/v35.js | 53 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/package.json | 33 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/v1.js | 37 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/v3.js | 4 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/v4.js | 2 | ||||
-rw-r--r-- | deps/npm/node_modules/uuid/v5.js | 45 |
18 files changed, 850 insertions, 176 deletions
diff --git a/deps/npm/node_modules/uuid/.eslintrc.json b/deps/npm/node_modules/uuid/.eslintrc.json index 638b0a56fd..734a8e14c7 100644 --- a/deps/npm/node_modules/uuid/.eslintrc.json +++ b/deps/npm/node_modules/uuid/.eslintrc.json @@ -7,16 +7,16 @@ "mocha": true }, "extends": ["eslint:recommended"], - "installedESLint": true, "rules": { "array-bracket-spacing": ["warn", "never"], "arrow-body-style": ["warn", "as-needed"], "arrow-parens": ["warn", "as-needed"], "arrow-spacing": "warn", - "brace-style": "warn", + "brace-style": ["warn", "1tbs"], "camelcase": "warn", "comma-spacing": ["warn", {"after": true}], "dot-notation": "warn", + "eqeqeq": ["warn", "smart"], "indent": ["warn", 2, { "SwitchCase": 1, "FunctionDeclaration": {"parameters": 1}, @@ -33,6 +33,7 @@ "no-trailing-spaces": "warn", "no-undef": "error", "no-unused-vars": ["warn", {"args": "none"}], + "one-var": ["warn", "never"], "padded-blocks": ["warn", "never"], "object-curly-spacing": ["warn", "never"], "quotes": ["warn", "single"], diff --git a/deps/npm/node_modules/uuid/CHANGELOG.md b/deps/npm/node_modules/uuid/CHANGELOG.md new file mode 100644 index 0000000000..d9fe59c150 --- /dev/null +++ b/deps/npm/node_modules/uuid/CHANGELOG.md @@ -0,0 +1,57 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +<a name="3.2.1"></a> +## [3.2.1](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.2.1) (2018-01-16) + + +### Bug Fixes + +* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) + + + +<a name="3.2.0"></a> +# [3.2.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + + +### Bug Fixes + +* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/kelektiv/node-uuid/commit/09fa824)) +* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) + + +### Features + +* Add v3 Support ([#217](https://github.com/kelektiv/node-uuid/issues/217)) ([d94f726](https://github.com/kelektiv/node-uuid/commit/d94f726)) + + + +# 3.0.1 (2016-11-28) + + * split uuid versions into separate files + +# 3.0.0 (2016-11-17) + + * remove .parse and .unparse + +# 2.0.0 + + * Removed uuid.BufferClass + +# 1.4.0 + + * Improved module context detection + * Removed public RNG functions + +# 1.3.2 + + * Improve tests and handling of v1() options (Issue #24) + * Expose RNG option to allow for perf testing with different generators + +# 1.3.0 + + * Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! + * Support for node.js crypto API + * De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/deps/npm/node_modules/uuid/HISTORY.md b/deps/npm/node_modules/uuid/HISTORY.md deleted file mode 100644 index 02daad3f61..0000000000 --- a/deps/npm/node_modules/uuid/HISTORY.md +++ /dev/null @@ -1,27 +0,0 @@ -# 3.0.1 (2016-11-28) - - * split uuid versions into separate files - -# 3.0.0 (2016-11-17) - - * remove .parse and .unparse - -# 2.0.0 - - * Removed uuid.BufferClass - -# 1.4.0 - - * Improved module context detection - * Removed public RNG functions - -# 1.3.2 - - * Improve tests and handling of v1() options (Issue #24) - * Expose RNG option to allow for perf testing with different generators - -# 1.3.0 - - * Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! - * Support for node.js crypto API - * De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/deps/npm/node_modules/uuid/README.md b/deps/npm/node_modules/uuid/README.md index 5adaa8f946..cddaa14469 100644 --- a/deps/npm/node_modules/uuid/README.md +++ b/deps/npm/node_modules/uuid/README.md @@ -1,14 +1,21 @@ +<!-- + -- This file is auto-generated from README_js.md. Changes should be made there. + --> + # uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. Features: -* Support for version 1, 4 and 5 UUIDs +* Support for version 1, 3, 4 and 5 UUIDs * Cross-platform * Uses cryptographically-strong random number APIs (when available) * Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + ## Quickstart - CommonJS (Recommended) ```shell @@ -21,14 +28,36 @@ Version 1 (timestamp): ```javascript const uuidv1 = require('uuid/v1'); -uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' +uuidv1(); // ⇨ 'f64f2940-fae4-11e7-8c5f-ef356f279131' + +``` + +Version 3 (namespace): + +```javascript +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' + ``` Version 4 (random): ```javascript const uuidv4 = require('uuid/v4'); -uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' +uuidv4(); // ⇨ '416ac246-e7ac-49ff-93b4-f7e94d997e6b' + ``` Version 5 (namespace): @@ -37,14 +66,18 @@ Version 5 (namespace): const uuidv5 = require('uuid/v5'); // ... using predefined DNS namespace (for domain names) -uuidv5('hello.example.com', uuidv5.DNS)); // -> 'fdda765f-fc57-5604-a269-52a7df8164ec' +uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' // ... using predefined URL namespace (for, well, URLs) -uuidv5('http://example.com/hello', uuidv5.URL); // -> '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' +uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' // ... using a custom namespace -const MY_NAMESPACE = '<UUID string you previously generated elsewhere>'; -uuidv5('Hello, World!', MY_NAMESPACE); // -> '90123e1c-7512-523e-bb28-76fab9f2f73d' +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' + ``` ## Quickstart - Browser-ready Versions @@ -60,6 +93,15 @@ uuidv1(); // -> v1 UUID </script> ``` +For version 3 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv3@latest"></script> +<script> +uuidv3('http://example.com/hello', uuidv3.URL); // -> v3 UUID +</script> +``` + For version 4 uuids: ```html @@ -85,7 +127,7 @@ uuidv5('http://example.com/hello', uuidv5.URL); // -> v5 UUID ```javascript const uuidv1 = require('uuid/v1'); -// Allowed arguments +// Incantations uuidv1(); uuidv1(options); uuidv1(options, buffer, offset); @@ -97,7 +139,7 @@ Generate and return a RFC4122 v1 (timestamp-based) UUID. * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. @@ -110,21 +152,51 @@ Note: The <node> id is generated guaranteed to stay constant for the lifetime of Example: Generate string UUID with fully-specified options ```javascript -uuidv1({ +const v1options = { node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], clockseq: 0x1234, msecs: new Date('2011-11-01').getTime(), nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + ``` Example: In-place generation of two binary IDs ```javascript // Generate two ids in an array -const arr = new Array(32); // -> [] -uuidv1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuidv1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ [ 246, 87, 141, 176, 250, 228, 17, 231, 146, 52, 239, 53, 111, 39, 145, 49 ] +uuidv1(null, arr, 16); // ⇨ [ 246, 87, 141, 176, 250, 228, 17, 231, 146, 52, 239, 53, 111, 39, 145, 49, 246, 87, 180, 192, 250, 228, 17, 231, 146, 52, 239, 53, 111, 39, 145, 49 ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + ``` ### Version 4 @@ -132,7 +204,7 @@ uuidv1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 0 ```javascript const uuidv4 = require('uuid/v4') -// Allowed arguments +// Incantations uuidv4(); uuidv4(options); uuidv4(options, buffer, offset); @@ -148,38 +220,40 @@ Generate and return a RFC4122 v4 UUID. Returns `buffer`, if specified, otherwise the string form of the UUID -Example: Generate string UUID with fully-specified options +Example: Generate string UUID with predefined `random` values ```javascript -uuid.v4({ +const v4options = { random: [ 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + ``` Example: Generate two IDs in a single buffer ```javascript -const buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ [ 175, 10, 162, 184, 217, 255, 77, 139, 161, 80, 41, 200, 70, 238, 196, 250 ] +uuidv4(null, buffer, 16); // ⇨ [ 175, 10, 162, 184, 217, 255, 77, 139, 161, 80, 41, 200, 70, 238, 196, 250, 75, 162, 105, 153, 48, 238, 77, 58, 169, 56, 158, 207, 106, 160, 47, 239 ] + ``` ### Version 5 ```javascript -const uuidv5 = require('uuid/v4'); +const uuidv5 = require('uuid/v5'); -// Allowed arguments +// Incantations uuidv5(name, namespace); uuidv5(name, namespace, buffer); uuidv5(name, namespace, buffer, offset); ``` -Generate and return a RFC4122 v4 UUID. +Generate and return a RFC4122 v5 UUID. * `name` - (String | Array[]) "name" to create UUID with * `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values @@ -191,37 +265,29 @@ Returns `buffer`, if specified, otherwise the string form of the UUID Example: ```javascript -// Generate a unique namespace (typically you would do this once, outside of -// your project, then bake this value into your code) -const uuidv4 = require('uuid/v4'); -const MY_NAMESPACE = uuidv4(); // +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' -// Generate a couple namespace uuids -const uuidv5 = require('uuid/v5'); -uuidv5('hello', MY_NAMESPACE); -uuidv5('world', MY_NAMESPACE); ``` -## Testing +## Command Line -```shell -npm test -``` +UUIDs can be generated from the command line with the `uuid` command. -## Deprecated / Browser-ready API +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 -The API below is available for legacy purposes and is not expected to be available post-3.X +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` -```javascript -const uuid = require('uuid'); +Type `uuid --help` for usage details -uuid.v1(...); // alias of uuid/v1 -uuid.v4(...); // alias of uuid/v4 -uuid(...); // alias of uuid/v4 +## Testing -// uuid.v5() is not supported in this API +```shell +npm test ``` -## Legacy node-uuid package - -The code for the legacy node-uuid package is available in the `node-uuid` branch. +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd)
\ No newline at end of file diff --git a/deps/npm/node_modules/uuid/README_js.md b/deps/npm/node_modules/uuid/README_js.md new file mode 100644 index 0000000000..f34453be40 --- /dev/null +++ b/deps/npm/node_modules/uuid/README_js.md @@ -0,0 +1,280 @@ +```javascript --hide +runmd.onRequire = path => path.replace(/^uuid/, './'); +``` + +# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript --run v1 +const uuidv1 = require('uuid/v1'); +uuidv1(); // RESULT +``` + +Version 3 (namespace): + +```javascript --run v3 +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // RESULT +``` + +Version 4 (random): + +```javascript --run v4 +const uuidv4 = require('uuid/v4'); +uuidv4(); // RESULT +``` + +Version 5 (namespace): + +```javascript --run v5 +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // RESULT +``` + +## Quickstart - Browser-ready Versions + +Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). + +For version 1 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv1@latest"></script> +<script> +uuidv1(); // -> v1 UUID +</script> +``` + +For version 3 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv3@latest"></script> +<script> +uuidv3('http://example.com/hello', uuidv3.URL); // -> v3 UUID +</script> +``` + +For version 4 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv4@latest"></script> +<script> +uuidv4(); // -> v4 UUID +</script> +``` + +For version 5 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv5@latest"></script> +<script> +uuidv5('http://example.com/hello', uuidv5.URL); // -> v5 UUID +</script> +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The <node> id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) + +Example: Generate string UUID with fully-specified options + +```javascript --run v1 +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // RESULT +``` + +Example: In-place generation of two binary IDs + +```javascript --run v1 +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // RESULT +uuidv1(null, arr, 16); // RESULT +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v3 +uuidv3('hello world', MY_NAMESPACE); // RESULT +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript --run v4 +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // RESULT +``` + +Example: Generate two IDs in a single buffer + +```javascript --run v4 +const buffer = new Array(); +uuidv4(null, buffer, 0); // RESULT +uuidv4(null, buffer, 16); // RESULT +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v5 +uuidv5('hello world', MY_NAMESPACE); // RESULT +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` diff --git a/deps/npm/node_modules/uuid/bin/uuid b/deps/npm/node_modules/uuid/bin/uuid index 2fd26d7642..502626e60f 100755 --- a/deps/npm/node_modules/uuid/bin/uuid +++ b/deps/npm/node_modules/uuid/bin/uuid @@ -5,6 +5,7 @@ function usage() { console.log('Usage:'); console.log(' uuid'); console.log(' uuid v1'); + console.log(' uuid v3 <name> <namespace uuid>'); console.log(' uuid v4'); console.log(' uuid v5 <name> <namespace uuid>'); console.log(' uuid --help'); @@ -25,6 +26,20 @@ switch (version) { console.log(uuidV1()); break; + case 'v3': + var uuidV3 = require('../v3'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v3 name not specified'); + assert(namespace != null, 'v3 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV3.URL; + if (namespace == 'DNS') namespace = uuidV3.DNS; + + console.log(uuidV3(name, namespace)); + break; + case 'v4': var uuidV4 = require('../v4'); console.log(uuidV4()); diff --git a/deps/npm/node_modules/uuid/lib/md5-browser.js b/deps/npm/node_modules/uuid/lib/md5-browser.js new file mode 100644 index 0000000000..9b3b6c7eff --- /dev/null +++ b/deps/npm/node_modules/uuid/lib/md5-browser.js @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/deps/npm/node_modules/uuid/lib/md5.js b/deps/npm/node_modules/uuid/lib/md5.js new file mode 100644 index 0000000000..7044b872f5 --- /dev/null +++ b/deps/npm/node_modules/uuid/lib/md5.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/deps/npm/node_modules/uuid/lib/rng-browser.js b/deps/npm/node_modules/uuid/lib/rng-browser.js index ac39b1289b..14d21170d5 100644 --- a/deps/npm/node_modules/uuid/lib/rng-browser.js +++ b/deps/npm/node_modules/uuid/lib/rng-browser.js @@ -2,25 +2,26 @@ // browser this is a little complicated due to unknown quality of Math.random() // and inconsistent support for the `crypto` API. We do the best we can via // feature-detection -var rng; -var crypto = global.crypto || global.msCrypto; // for IE 11 -if (crypto && crypto.getRandomValues) { +// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto)); +if (getRandomValues) { // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef - rng = function whatwgRNG() { - crypto.getRandomValues(rnds8); + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); return rnds8; }; -} - -if (!rng) { +} else { // Math.random()-based (RNG) // // If all else fails, use Math.random(). It's fast, but is of unspecified // quality. var rnds = new Array(16); - rng = function() { + + module.exports = function mathRNG() { for (var i = 0, r; i < 16; i++) { if ((i & 0x03) === 0) r = Math.random() * 0x100000000; rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; @@ -29,5 +30,3 @@ if (!rng) { return rnds; }; } - -module.exports = rng; diff --git a/deps/npm/node_modules/uuid/lib/rng.js b/deps/npm/node_modules/uuid/lib/rng.js index 4a0182fd68..58f0dc9cfb 100644 --- a/deps/npm/node_modules/uuid/lib/rng.js +++ b/deps/npm/node_modules/uuid/lib/rng.js @@ -1,10 +1,8 @@ // Unique ID creation requires a high quality random # generator. In node.js // this is pretty straight-forward - we use the crypto API. -var rb = require('crypto').randomBytes; +var crypto = require('crypto'); -function rng() { - return rb(16); -} - -module.exports = rng; +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; diff --git a/deps/npm/node_modules/uuid/lib/sha1-browser.js b/deps/npm/node_modules/uuid/lib/sha1-browser.js index dbc3184208..5758ed75c9 100644 --- a/deps/npm/node_modules/uuid/lib/sha1-browser.js +++ b/deps/npm/node_modules/uuid/lib/sha1-browser.js @@ -54,7 +54,11 @@ function sha1(bytes) { W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); } - var a = H[0], b = H[1], c = H[2], d = H[3], e = H[4]; + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; for (var t=0; t<80; t++) { var s = Math.floor(t/20); diff --git a/deps/npm/node_modules/uuid/lib/sha1.js b/deps/npm/node_modules/uuid/lib/sha1.js index e8771ce540..0b54b25072 100644 --- a/deps/npm/node_modules/uuid/lib/sha1.js +++ b/deps/npm/node_modules/uuid/lib/sha1.js @@ -3,19 +3,23 @@ var crypto = require('crypto'); function sha1(bytes) { - // support modern Buffer API - if (typeof Buffer.from === 'function') { - if (Array.isArray(bytes)) bytes = Buffer.from(bytes); - else if (typeof bytes === 'string') bytes = Buffer.from(bytes, 'utf8'); - } + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } - // support pre-v4 Buffer API - else { - if (Array.isArray(bytes)) bytes = new Buffer(bytes); - else if (typeof bytes === 'string') bytes = new Buffer(bytes, 'utf8'); - } - - return crypto.createHash('sha1').update(bytes).digest(); + return crypto.createHash('sha1').update(bytes).digest(); } module.exports = sha1; diff --git a/deps/npm/node_modules/uuid/lib/v35.js b/deps/npm/node_modules/uuid/lib/v35.js new file mode 100644 index 0000000000..842c60ea2b --- /dev/null +++ b/deps/npm/node_modules/uuid/lib/v35.js @@ -0,0 +1,53 @@ +var bytesToUuid = require('./bytesToUuid'); + +function uuidToBytes(uuid) { + // Note: We assume we're being passed a valid uuid string + var bytes = []; + uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { + bytes.push(parseInt(hex, 16)); + }); + + return bytes; +} + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + var bytes = new Array(str.length); + for (var i = 0; i < str.length; i++) { + bytes[i] = str.charCodeAt(i); + } + return bytes; +} + +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { + var off = buf && offset || 0; + + if (typeof(value) == 'string') value = stringToBytes(value); + if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); + + if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + + // Per 4.3 + var bytes = hashfunc(namespace.concat(value)); + bytes[6] = (bytes[6] & 0x0f) | version; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + if (buf) { + for (var idx = 0; idx < 16; ++idx) { + buf[off+idx] = bytes[idx]; + } + } + + return buf || bytesToUuid(bytes); + }; + + generateUUID.name = name; + + // Pre-defined namespaces, per Appendix C + generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + return generateUUID; +}; diff --git a/deps/npm/node_modules/uuid/package.json b/deps/npm/node_modules/uuid/package.json index 8aebdb2ed1..7ea5d38da2 100644 --- a/deps/npm/node_modules/uuid/package.json +++ b/deps/npm/node_modules/uuid/package.json @@ -1,36 +1,38 @@ { - "_from": "uuid@3.1.0", - "_id": "uuid@3.1.0", + "_from": "uuid@3.2.1", + "_id": "uuid@3.2.1", "_inBundle": false, - "_integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "_integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "_location": "/uuid", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "uuid@3.1.0", + "raw": "uuid@3.2.1", "name": "uuid", "escapedName": "uuid", - "rawSpec": "3.1.0", + "rawSpec": "3.2.1", "saveSpec": null, - "fetchSpec": "3.1.0" + "fetchSpec": "3.2.1" }, "_requiredBy": [ "#USER", "/", + "/npm-registry-couchapp/couchapp/nano/cloudant-follow/request", "/request", "/tap/coveralls/request" ], - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "_shasum": "3dd3d3e790abc24d7b0d3a034ffababe28ebbc04", - "_spec": "uuid@3.1.0", + "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "_shasum": "12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14", + "_spec": "uuid@3.2.1", "_where": "/Users/rebecca/code/npm", "bin": { "uuid": "./bin/uuid" }, "browser": { "./lib/rng.js": "./lib/rng-browser.js", - "./lib/sha1.js": "./lib/sha1-browser.js" + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" }, "bugs": { "url": "https://github.com/kelektiv/node-uuid/issues" @@ -58,10 +60,14 @@ "email": "shtylman@gmail.com" } ], + "dependencies": {}, "deprecated": false, "description": "RFC4122 (v1, v4, and v5) UUIDs", "devDependencies": { - "mocha": "3.1.2" + "eslint": "4.5.0", + "mocha": "3.1.2", + "runmd": "1.0.1", + "standard-version": "4.2.0" }, "homepage": "https://github.com/kelektiv/node-uuid#readme", "keywords": [ @@ -76,7 +82,10 @@ "url": "git+https://github.com/kelektiv/node-uuid.git" }, "scripts": { + "md": "runmd --watch --output=README.md README_js.md", + "prepare": "runmd --output=README.md README_js.md", + "release": "standard-version", "test": "mocha test/test.js" }, - "version": "3.1.0" + "version": "3.2.1" } diff --git a/deps/npm/node_modules/uuid/v1.js b/deps/npm/node_modules/uuid/v1.js index 613f67e2e8..d84c0f4523 100644 --- a/deps/npm/node_modules/uuid/v1.js +++ b/deps/npm/node_modules/uuid/v1.js @@ -6,20 +6,12 @@ var bytesToUuid = require('./lib/bytesToUuid'); // Inspired by https://github.com/LiosK/UUID.js // and http://docs.python.org/library/uuid.html -// random #'s we need to init node and clockseq -var _seedBytes = rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; +var _nodeId; +var _clockseq; // Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; +var _lastMSecs = 0; +var _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details function v1(options, buf, offset) { @@ -27,9 +19,27 @@ function v1(options, buf, offset) { var b = buf || []; options = options || {}; - + var node = options.node || _nodeId; var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + // UUID timestamps are 100 nano-second units since the Gregorian epoch, // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' @@ -89,7 +99,6 @@ function v1(options, buf, offset) { b[i++] = clockseq & 0xff; // `node` - var node = options.node || _nodeId; for (var n = 0; n < 6; ++n) { b[i + n] = node[n]; } diff --git a/deps/npm/node_modules/uuid/v3.js b/deps/npm/node_modules/uuid/v3.js new file mode 100644 index 0000000000..ee7e14c0f0 --- /dev/null +++ b/deps/npm/node_modules/uuid/v3.js @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5);
\ No newline at end of file diff --git a/deps/npm/node_modules/uuid/v4.js b/deps/npm/node_modules/uuid/v4.js index 38b6f76a98..1f07be1c53 100644 --- a/deps/npm/node_modules/uuid/v4.js +++ b/deps/npm/node_modules/uuid/v4.js @@ -5,7 +5,7 @@ function v4(options, buf, offset) { var i = buf && offset || 0; if (typeof(options) == 'string') { - buf = options == 'binary' ? new Array(16) : null; + buf = options === 'binary' ? new Array(16) : null; options = null; } options = options || {}; diff --git a/deps/npm/node_modules/uuid/v5.js b/deps/npm/node_modules/uuid/v5.js index 39cc35e7c8..4945baf385 100644 --- a/deps/npm/node_modules/uuid/v5.js +++ b/deps/npm/node_modules/uuid/v5.js @@ -1,42 +1,3 @@ -var sha1 = require('./lib/sha1-browser'); -var bytesToUuid = require('./lib/bytesToUuid'); - -function uuidToBytes(uuid) { - // Note: We assume we're being passed a valid uuid string - var bytes = []; - uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { - bytes.push(parseInt(hex, 16)); - }); - - return bytes; -} - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - var bytes = new Array(str.length); - for (var i = 0; i < str.length; i++) { - bytes[i] = str.charCodeAt(i); - } - return bytes; -} - -function v5(name, namespace, buf, offset) { - if (typeof(name) == 'string') name = stringToBytes(name); - if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); - - if (!Array.isArray(name)) throw TypeError('name must be an array of bytes'); - if (!Array.isArray(namespace) || namespace.length != 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); - - // Per 4.3 - var bytes = sha1(namespace.concat(name)); - bytes[6] = (bytes[6] & 0x0f) | 0x50; - bytes[8] = (bytes[8] & 0x3f) | 0x80; - - return buf || bytesToUuid(bytes); -} - -// Pre-defined namespaces, per Appendix C -v5.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -v5.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; - -module.exports = v5; +var v35 = require('./lib/v35.js'); +var sha1 = require('./lib/sha1'); +module.exports = v35('v5', 0x50, sha1); |