Comparing version 3.4.0 to 7.0.0-beta.0
@@ -7,70 +7,55 @@ # Changelog | ||
### Features | ||
* rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) | ||
- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) | ||
### [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) | ||
## [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) | ||
<a name="3.3.2"></a> | ||
### Bug Fixes | ||
- no longer run ci tests on node v4 | ||
- upgrade dependencies | ||
## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) | ||
### Bug Fixes | ||
* typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) | ||
- typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) | ||
<a name="3.3.1"></a> | ||
## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) | ||
### Bug Fixes | ||
* fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) | ||
- fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) | ||
<a name="3.3.0"></a> | ||
# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) | ||
### Bug Fixes | ||
* assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) | ||
* fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) | ||
* Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) | ||
* mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) | ||
- assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) | ||
- fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) | ||
- Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) | ||
- mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) | ||
### Features | ||
* enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) | ||
- enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) | ||
<a name="3.2.1"></a> | ||
## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) | ||
### Bug Fixes | ||
* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) | ||
- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) | ||
<a name="3.2.0"></a> | ||
# [3.2.0](https://github.com/uuidjs/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/uuidjs/uuid/commit/09fa824)) | ||
* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) | ||
- remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) | ||
- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) | ||
### Features | ||
* Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) | ||
- Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) | ||
# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) | ||
@@ -80,42 +65,37 @@ | ||
* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) | ||
* Fix typo (#178) | ||
* Simple typo fix (#165) | ||
- (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) | ||
- Fix typo (#178) | ||
- Simple typo fix (#165) | ||
### Features | ||
* v5 support in CLI (#197) | ||
* V5 support (#188) | ||
- v5 support in CLI (#197) | ||
- V5 support (#188) | ||
# 3.0.1 (2016-11-28) | ||
* split uuid versions into separate files | ||
- split uuid versions into separate files | ||
# 3.0.0 (2016-11-17) | ||
* remove .parse and .unparse | ||
- remove .parse and .unparse | ||
# 2.0.0 | ||
* Removed uuid.BufferClass | ||
- Removed uuid.BufferClass | ||
# 1.4.0 | ||
* Improved module context detection | ||
* Removed public RNG functions | ||
- 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 | ||
- 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 | ||
- 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 |
{ | ||
"name": "uuid", | ||
"version": "3.4.0", | ||
"version": "7.0.0-beta.0", | ||
"description": "RFC4122 (v1, v4, and v5) UUIDs", | ||
@@ -17,25 +17,65 @@ "commitlint": { | ||
"bin": { | ||
"uuid": "./bin/uuid" | ||
"uuid": "dist/bin/uuid" | ||
}, | ||
"sideEffects": false, | ||
"main": "dist/index.js", | ||
"module": "dist/esm-browser/index.js", | ||
"files": [ | ||
"CHANGELOG.md", | ||
"CONTRIBUTING.md", | ||
"LICENSE.md", | ||
"README.md", | ||
"dist", | ||
"v1.js", | ||
"v3.js", | ||
"v4.js", | ||
"v5.js" | ||
], | ||
"devDependencies": { | ||
"@commitlint/cli": "~8.2.0", | ||
"@commitlint/config-conventional": "~8.2.0", | ||
"eslint": "~6.4.0", | ||
"husky": "~3.0.5", | ||
"mocha": "6.2.0", | ||
"runmd": "1.2.1", | ||
"standard-version": "7.0.0" | ||
"@babel/cli": "7.8.3", | ||
"@babel/core": "7.8.3", | ||
"@babel/preset-env": "7.8.3", | ||
"@commitlint/cli": "8.3.5", | ||
"@commitlint/config-conventional": "8.3.4", | ||
"babel-eslint": "10.0.3", | ||
"babel-plugin-add-module-exports": "1.0.2", | ||
"browserstack-local": "1.4.4", | ||
"bundlewatch": "0.2.5", | ||
"eslint": "6.8.0", | ||
"eslint-config-prettier": "6.9.0", | ||
"eslint-plugin-prettier": "3.1.2", | ||
"esm": "3.2.25", | ||
"http-server": "0.12.1", | ||
"husky": "3.0.9", | ||
"jest": "24.9.0", | ||
"lint-staged": "10.0.1", | ||
"npm-run-all": "4.1.5", | ||
"prettier": "1.19.1", | ||
"rollup": "1.30.0", | ||
"rollup-plugin-terser": "5.2.0", | ||
"runmd": "1.3.2", | ||
"selenium-webdriver": "3.6.0", | ||
"standard-version": "7.0.1" | ||
}, | ||
"scripts": { | ||
"lint": "eslint .", | ||
"test": "npm run lint && mocha test/test.js", | ||
"examples:browser-webpack:build": "cd examples/browser-webpack && npm install && npm run build", | ||
"examples:browser-rollup:build": "cd examples/browser-rollup && npm install && npm run build", | ||
"examples:browser-esmodules:build": "cd examples/browser-esmodules && npm install && npm run build", | ||
"lint": "npm run eslint:check && npm run prettier:check", | ||
"eslint:check": "eslint src/ test/ examples/ *.js", | ||
"eslint:fix": "eslint --fix src/ test/ examples/ *.js", | ||
"pretest": "npm run build", | ||
"test": "BABEL_ENV=commonjs node --throw-deprecation node_modules/.bin/jest test/unit/", | ||
"pretest:browser": "npm run build && npm-run-all --parallel examples:**", | ||
"test:browser": "BABEL_ENV=commonjs jest --forceExit --verbose test/browser/${BROWSER:-}*", | ||
"prettier:check": "prettier --ignore-path .prettierignore --check '**/*.{js,jsx,json,md}'", | ||
"prettier:fix": "prettier --ignore-path .prettierignore --write '**/*.{js,jsx,json,md}'", | ||
"ci": "npm run lint && npm run test && npm run prettier:check && npm run docs:diff && npm run bundlewatch", | ||
"bundlewatch": "( node --version | grep -vq 'v12' ) || ( npm run pretest:browser && CI_REPO_OWNER=uuidjs CI_REPO_NAME=uuid CI_COMMIT_SHA=$GITHUB_SHA CI_BRANCH=${GITHUB_REF##refs/heads/} bundlewatch --config bundlewatch.config.json )", | ||
"md": "runmd --watch --output=README.md README_js.md", | ||
"release": "standard-version", | ||
"prepare": "runmd --output=README.md README_js.md" | ||
"docs": "( node --version | grep -q 'v12' ) && ( npm run build && runmd --output=README.md README_js.md )", | ||
"docs:diff": "( node --version | grep -vq 'v12' ) || ( npm run docs && git diff --quiet README.md )", | ||
"build": "./scripts/build.sh", | ||
"release": "standard-version --no-verify" | ||
}, | ||
"browser": { | ||
"./lib/rng.js": "./lib/rng-browser.js", | ||
"./lib/sha1.js": "./lib/sha1-browser.js", | ||
"./lib/md5.js": "./lib/md5-browser.js" | ||
}, | ||
"repository": { | ||
@@ -47,5 +87,20 @@ "type": "git", | ||
"hooks": { | ||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS" | ||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS", | ||
"pre-commit": "lint-staged" | ||
} | ||
}, | ||
"lint-staged": { | ||
"*.{js,jsx,json,md}": [ | ||
"prettier --write" | ||
], | ||
"*.{js,jsx}": [ | ||
"eslint --fix" | ||
] | ||
}, | ||
"standard-version": { | ||
"scripts": { | ||
"postchangelog": "prettier --write CHANGELOG.md", | ||
"postcommit": "npm run build" | ||
} | ||
} | ||
} |
333
README.md
@@ -5,18 +5,48 @@ <!-- | ||
# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # | ||
# uuid [![Build Status](https://github.com/uuidjs/uuid/workflows/CI/badge.svg)](https://github.com/uuidjs/uuid/actions) | ||
Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. | ||
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)) | ||
- Support for version 1, 3, 4 and 5 UUIDs | ||
- Cross-platform: CommonJS build for Node.js and [ECMAScript Modules](#ecmascript-modules) for the | ||
browser. | ||
- Uses cryptographically-strong random number APIs | ||
- Zero-dependency, small footprint | ||
[**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.] | ||
⚠️⚠️⚠️ This is the README of the upcoming major version of this library. You can still [access the README | ||
of the current stable version](https://github.com/uuidjs/uuid/blob/v3.4.0/README.md). ⚠️⚠️⚠️ | ||
## Quickstart - CommonJS (Recommended) | ||
## Upgrading from v3.x of this Module | ||
In v3.x of this library we were promoting the use of deep requires to reduce bundlesize for browser | ||
builds: | ||
```javascript | ||
const uuidv4 = require('uuid/v4'); | ||
uuidv4(); | ||
``` | ||
As of v7.x this library has been converted to ECMAScript Modules and deep requires are now | ||
deprecated and may be removed in a future major version of this library. | ||
Since all modern bundlers like rollup or Webpack support tree-shaking for ECMAScript Modules out of | ||
the box we now encourage you to use modern `import` syntax instead, see [ECMAScript Modules / | ||
ESM](#ecmascript-modules--esm): | ||
```javascript | ||
import { v4 as uuidv4 } from 'uuid'; | ||
uuidv4(); | ||
``` | ||
For use as CommonJS module with Node.js you can use: | ||
```javascript | ||
const { v4: uuidv4 } = require('uuid'); | ||
uuidv4(); | ||
``` | ||
## Quickstart - Node.js/CommonJS | ||
```shell | ||
@@ -26,10 +56,18 @@ npm install uuid | ||
Then generate your uuid version of choice ... | ||
Then generate a random UUID (v4 algorithm), which is almost always what you want ... | ||
Version 4 (random): | ||
```javascript | ||
import { v4 as uuidv4 } from 'uuid'; | ||
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d' | ||
``` | ||
Or generate UUIDs with other algorithms of your choice ... | ||
Version 1 (timestamp): | ||
```javascript | ||
const uuidv1 = require('uuid/v1'); | ||
uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' | ||
import { v1 as uuidv1 } from 'uuid'; | ||
uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8b2d-1b9d6bcdbbfd' | ||
``` | ||
@@ -40,3 +78,3 @@ | ||
```javascript | ||
const uuidv3 = require('uuid/v3'); | ||
import { v3 as uuidv3 } from 'uuid'; | ||
@@ -55,17 +93,8 @@ // ... using predefined DNS namespace (for domain names) | ||
uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' | ||
``` | ||
Version 4 (random): | ||
```javascript | ||
const uuidv4 = require('uuid/v4'); | ||
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' | ||
``` | ||
Version 5 (namespace): | ||
```javascript | ||
const uuidv5 = require('uuid/v5'); | ||
import { v5 as uuidv5 } from 'uuid'; | ||
@@ -84,13 +113,115 @@ // ... using predefined DNS namespace (for domain names) | ||
uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' | ||
``` | ||
## Supported Platforms | ||
- Node.js: All LTS, i.e. 8.x, 10.x, 12.x | ||
- Browsers (with bundlers like webpack/rollup): | ||
- Chrome: >= 49 | ||
- Safari: >= 10 | ||
- Firefox: >= 44 | ||
- Edge: >= 15 | ||
- IE: 11 | ||
## ECMAScript Modules / ESM | ||
For usage in the browser `uuid` provides support for [ECMAScript | ||
Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) that enable | ||
tree-shaking for bundlers, like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking) | ||
([example](./examples/browser-rollup/)) and [webpack](https://webpack.js.org/guides/tree-shaking/) | ||
([example](./examples/browser-webpack/)). | ||
```javascript | ||
import { v4 as uuidv4 } from 'uuid'; | ||
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' | ||
``` | ||
There is experimental native ESM support for [the browser](./examples/browser-esmodules/) but it | ||
should not be considered ready for production use and may change or disappear in future releases. | ||
To run the examples you must first create a dist build of this library in the module root: | ||
``` | ||
npm run build | ||
``` | ||
## API | ||
### Version 1 | ||
### Version 4 (Random) | ||
```javascript | ||
const uuidv1 = require('uuid/v1'); | ||
import { v4 as uuidv4 } from 'uuid'; | ||
// 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. Takes precedence over `options.rng`. | ||
- `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to `options.random`. | ||
- `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 | ||
const v4options = { | ||
random: [ | ||
0x10, | ||
0x91, | ||
0x56, | ||
0xbe, | ||
0xc4, | ||
0xfb, | ||
0xc1, | ||
0xea, | ||
0x71, | ||
0xb4, | ||
0xef, | ||
0xe1, | ||
0x67, | ||
0x1c, | ||
0x58, | ||
0x36, | ||
], | ||
}; | ||
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' | ||
``` | ||
Example: Generate two IDs in a single buffer | ||
```javascript | ||
const buffer = new Array(); | ||
uuidv4(null, buffer, 0); // ⇨ | ||
// [ | ||
// 155, 29, 235, 77, 59, | ||
// 125, 75, 173, 155, 221, | ||
// 43, 13, 123, 61, 203, | ||
// 109 | ||
// ] | ||
uuidv4(null, buffer, 16); // ⇨ | ||
// [ | ||
// 155, 29, 235, 77, 59, 125, 75, 173, | ||
// 155, 221, 43, 13, 123, 61, 203, 109, | ||
// 27, 157, 107, 205, 187, 253, 75, 45, | ||
// 155, 93, 171, 141, 251, 189, 75, 237 | ||
// ] | ||
``` | ||
### Version 1 (Timestamp + Node) | ||
⚠️⚠️⚠️ **Please make sure to check whether you really need the timestamp properties of Version 1 UUIDs | ||
before using them. In many cases, Version 4 random UUIDs are the better choice. [This | ||
FAQ](https://github.com/tc39/proposal-uuid#faq) covers more details.** ⚠️⚠️⚠️ | ||
```javascript | ||
import { v1 as uuidv1 } from 'uuid'; | ||
// Incantations | ||
uuidv1(); | ||
@@ -103,12 +234,12 @@ uuidv1(options); | ||
* `options` - (Object) Optional uuid state to apply. Properties may include: | ||
- `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. | ||
- `random` - (Number[16]) Array of 16 numbers (0-255) to use for initialization of `node` and `clockseq` as described above. Takes precedence over `options.rng`. | ||
- `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to `options.random`. | ||
- `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. | ||
- `offset` - (Number) Starting index in `buffer` at which to begin writing. | ||
* `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 | ||
@@ -125,6 +256,5 @@ | ||
msecs: new Date('2011-11-01').getTime(), | ||
nsecs: 5678 | ||
nsecs: 5678, | ||
}; | ||
uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' | ||
``` | ||
@@ -137,22 +267,22 @@ | ||
const arr = new Array(); | ||
uuidv1(null, arr, 0); // ⇨ | ||
uuidv1(null, arr, 0); // ⇨ | ||
// [ | ||
// 44, 94, 164, 192, 64, 103, | ||
// 17, 233, 146, 52, 155, 29, | ||
// 235, 77, 59, 125 | ||
// 44, 94, 164, 192, 64, | ||
// 103, 17, 233, 146, 52, | ||
// 27, 157, 107, 205, 187, | ||
// 253 | ||
// ] | ||
uuidv1(null, arr, 16); // ⇨ | ||
// [ | ||
// 44, 94, 164, 192, 64, 103, 17, 233, | ||
// 146, 52, 155, 29, 235, 77, 59, 125, | ||
// 44, 94, 164, 193, 64, 103, 17, 233, | ||
// 146, 52, 155, 29, 235, 77, 59, 125 | ||
// 44, 94, 164, 192, 64, 103, 17, 233, | ||
// 146, 52, 27, 157, 107, 205, 187, 253, | ||
// 44, 94, 164, 193, 64, 103, 17, 233, | ||
// 146, 52, 27, 157, 107, 205, 187, 253 | ||
// ] | ||
``` | ||
### Version 3 | ||
### Version 3 (Namespace) | ||
```javascript | ||
const uuidv3 = require('uuid/v3'); | ||
import { v3 as uuidv3 } from 'uuid'; | ||
@@ -167,6 +297,6 @@ // Incantations | ||
* `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 | ||
- `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 | ||
@@ -178,67 +308,11 @@ Returns `buffer`, if specified, otherwise the string form of the UUID | ||
```javascript | ||
uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' | ||
uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' | ||
``` | ||
### Version 4 | ||
### Version 5 (Namespace) | ||
```javascript | ||
const uuidv4 = require('uuid/v4') | ||
import { v5 as uuidv5 } from 'uuid'; | ||
// 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 | ||
const v4options = { | ||
random: [ | ||
0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, | ||
0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 | ||
] | ||
}; | ||
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' | ||
``` | ||
Example: Generate two IDs in a single buffer | ||
```javascript | ||
const buffer = new Array(); | ||
uuidv4(null, buffer, 0); // ⇨ | ||
// [ | ||
// 155, 29, 235, 77, 59, | ||
// 125, 75, 173, 155, 221, | ||
// 43, 13, 123, 61, 203, | ||
// 109 | ||
// ] | ||
uuidv4(null, buffer, 16); // ⇨ | ||
// [ | ||
// 155, 29, 235, 77, 59, 125, 75, 173, | ||
// 155, 221, 43, 13, 123, 61, 203, 109, | ||
// 27, 157, 107, 205, 187, 253, 75, 45, | ||
// 155, 93, 171, 141, 251, 189, 75, 237 | ||
// ] | ||
``` | ||
### Version 5 | ||
```javascript | ||
const uuidv5 = require('uuid/v5'); | ||
// Incantations | ||
uuidv5(name, namespace); | ||
@@ -251,6 +325,6 @@ uuidv5(name, namespace, buffer); | ||
* `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 | ||
- `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 | ||
@@ -262,4 +336,3 @@ Returns `buffer`, if specified, otherwise the string form of the UUID | ||
```javascript | ||
uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' | ||
uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' | ||
``` | ||
@@ -281,9 +354,29 @@ | ||
## Testing | ||
## UMD Build | ||
```shell | ||
npm test | ||
If you want to load a minified UMD build directly in the browser you can use one of the popular npm | ||
CDNs: | ||
```html | ||
<script src="https://unpkg.com/uuid@latest/dist/umd/uuidv4.min.js"></script> | ||
<script> | ||
alert(uuidv4()); | ||
</script> | ||
``` | ||
or | ||
```html | ||
<script src="https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/uuidv4.min.js"></script> | ||
<script> | ||
alert(uuidv4()); | ||
</script> | ||
``` | ||
Available bundles: | ||
- https://unpkg.com/uuid@latest/dist/umd/ | ||
- https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/ | ||
---- | ||
Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) |
113
v1.js
@@ -1,109 +0,8 @@ | ||
var rng = require('./lib/rng'); | ||
var bytesToUuid = require('./lib/bytesToUuid'); | ||
const util = require('util'); | ||
// **`v1()` - Generate time-based UUID** | ||
// | ||
// Inspired by https://github.com/LiosK/UUID.js | ||
// and http://docs.python.org/library/uuid.html | ||
const v1 = require('./dist/v1.js'); | ||
var _nodeId; | ||
var _clockseq; | ||
// Previous uuid creation time | ||
var _lastMSecs = 0; | ||
var _lastNSecs = 0; | ||
// See https://github.com/uuidjs/uuid for API details | ||
function v1(options, buf, offset) { | ||
var i = buf && offset || 0; | ||
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' | ||
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. | ||
var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); | ||
// Per 4.2.1.2, use count of uuid's generated during the current clock | ||
// cycle to simulate higher resolution clock | ||
var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; | ||
// Time since last uuid creation (in msecs) | ||
var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; | ||
// Per 4.2.1.2, Bump clockseq on clock regression | ||
if (dt < 0 && options.clockseq === undefined) { | ||
clockseq = clockseq + 1 & 0x3fff; | ||
} | ||
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new | ||
// time interval | ||
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { | ||
nsecs = 0; | ||
} | ||
// Per 4.2.1.2 Throw error if too many uuids are requested | ||
if (nsecs >= 10000) { | ||
throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); | ||
} | ||
_lastMSecs = msecs; | ||
_lastNSecs = nsecs; | ||
_clockseq = clockseq; | ||
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch | ||
msecs += 12219292800000; | ||
// `time_low` | ||
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; | ||
b[i++] = tl >>> 24 & 0xff; | ||
b[i++] = tl >>> 16 & 0xff; | ||
b[i++] = tl >>> 8 & 0xff; | ||
b[i++] = tl & 0xff; | ||
// `time_mid` | ||
var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; | ||
b[i++] = tmh >>> 8 & 0xff; | ||
b[i++] = tmh & 0xff; | ||
// `time_high_and_version` | ||
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version | ||
b[i++] = tmh >>> 16 & 0xff; | ||
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) | ||
b[i++] = clockseq >>> 8 | 0x80; | ||
// `clock_seq_low` | ||
b[i++] = clockseq & 0xff; | ||
// `node` | ||
for (var n = 0; n < 6; ++n) { | ||
b[i + n] = node[n]; | ||
} | ||
return buf ? buf : bytesToUuid(b); | ||
} | ||
module.exports = v1; | ||
module.exports = util.deprecate( | ||
v1, | ||
"Deep requiring like `const uuidv1 = require('uuid/v1');` is deprecated as of uuid@7.x. Please require the top-level module when using the Node.js CommonJS module or use ECMAScript Modules when bundling for the browser. See https://github.com/uuidjs/uuid/blob/master/README.md#upgrading-from-v3x-of-this-module for more information.", | ||
); |
10
v3.js
@@ -1,4 +0,8 @@ | ||
var v35 = require('./lib/v35.js'); | ||
var md5 = require('./lib/md5'); | ||
const util = require('util'); | ||
module.exports = v35('v3', 0x30, md5); | ||
const v3 = require('./dist/v3.js'); | ||
module.exports = util.deprecate( | ||
v3, | ||
"Deep requiring like `const uuidv3 = require('uuid/v3');` is deprecated as of uuid@7.x. Please require the top-level module when using the Node.js CommonJS module or use ECMAScript Modules when bundling for the browser. See https://github.com/uuidjs/uuid/blob/master/README.md#upgrading-from-v3x-of-this-module for more information.", | ||
); |
33
v4.js
@@ -1,29 +0,8 @@ | ||
var rng = require('./lib/rng'); | ||
var bytesToUuid = require('./lib/bytesToUuid'); | ||
const util = require('util'); | ||
function v4(options, buf, offset) { | ||
var i = buf && offset || 0; | ||
const v4 = require('./dist/v4.js'); | ||
if (typeof(options) == 'string') { | ||
buf = options === 'binary' ? new Array(16) : null; | ||
options = null; | ||
} | ||
options = options || {}; | ||
var rnds = options.random || (options.rng || rng)(); | ||
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved` | ||
rnds[6] = (rnds[6] & 0x0f) | 0x40; | ||
rnds[8] = (rnds[8] & 0x3f) | 0x80; | ||
// Copy bytes to buffer, if provided | ||
if (buf) { | ||
for (var ii = 0; ii < 16; ++ii) { | ||
buf[i + ii] = rnds[ii]; | ||
} | ||
} | ||
return buf || bytesToUuid(rnds); | ||
} | ||
module.exports = v4; | ||
module.exports = util.deprecate( | ||
v4, | ||
"Deep requiring like `const uuidv4 = require('uuid/v4');` is deprecated as of uuid@7.x. Please require the top-level module when using the Node.js CommonJS module or use ECMAScript Modules when bundling for the browser. See https://github.com/uuidjs/uuid/blob/master/README.md#upgrading-from-v3x-of-this-module for more information.", | ||
); |
11
v5.js
@@ -1,3 +0,8 @@ | ||
var v35 = require('./lib/v35.js'); | ||
var sha1 = require('./lib/sha1'); | ||
module.exports = v35('v5', 0x50, sha1); | ||
const util = require('util'); | ||
const v5 = require('./dist/v5.js'); | ||
module.exports = util.deprecate( | ||
v5, | ||
"Deep requiring like `const uuidv5 = require('uuid/v5');` is deprecated as of uuid@7.x. Please require the top-level module when using the Node.js CommonJS module or use ECMAScript Modules when bundling for the browser. See https://github.com/uuidjs/uuid/blob/master/README.md#upgrading-from-v5x-of-this-module for more information.", | ||
); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
68693
36
773
0
369
24
1