Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ES-Module support #331

Closed
wants to merge 15 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .babelrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module.exports = {
presets: [],
plugins: [],
env: {
commonjs: {
plugins: [
'babel-plugin-add-module-exports',
],
presets: [
['@babel/preset-env', {targets: {node: '8'}, modules: 'commonjs'}],
],
},
esm: {
presets: [
['@babel/preset-env', {modules: false}],
],
},
},
};
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!.babelrc.js
9 changes: 7 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,15 @@
"env": {
"browser": true,
"commonjs": true,
"node": true,
"mocha": true
"es6": true,
"mocha": true,
"node": true
},
"extends": ["eslint:recommended"],
"globals": {
"msCrypto": true
},
"parser": "babel-eslint",
"rules": {
"array-bracket-spacing": ["warn", "never"],
"arrow-body-style": ["warn", "as-needed"],
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
.idea/**
.DS_Store
node_modules
tmp
dist/
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
language: node_js
node_js:
- "6"
- "8"
- "10"
- "12"
script: npm run ci
162 changes: 83 additions & 79 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,88 +9,104 @@ 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
* Cross-platform: CommonJS build for Node.js and [ECMAScript Modules](#ecmascript-modules) for the
browser.
* 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)
## Quickstart - Node.js/CommonJS

```shell
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
const uuid = require('uuid');
uuid.v4(); // ⇨ '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'
const uuid = require('uuid');
uuid.v1(); // ⇨ '2c5ea4c0-4067-11e9-8b2d-1b9d6bcdbbfd'

```

Version 3 (namespace):

```javascript
const uuidv3 = require('uuid/v3');
const uuid = require('uuid');

// ... using predefined DNS namespace (for domain names)
uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6'
uuid.v3('hello.example.com', uuid.v3.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'
uuid.v3('http://example.com/hello', uuid.v3.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(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
uuid.v3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686'

```

Version 5 (namespace):

```javascript
const uuidv5 = require('uuid/v5');
const uuid = require('uuid');

// ... using predefined DNS namespace (for domain names)
uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec'
uuid.v5('hello.example.com', uuid.v5.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'
uuid.v5('http://example.com/hello', uuid.v5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1'

// ... 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); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
uuid.v5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'

```

## 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 uuid} from 'uuid';
uuid(); // ⇨ '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.

## API

### Version 1
### Version 1 (Timestamp + Node)

```javascript
const uuidv1 = require('uuid/v1');
const uuid = require('uuid');

// Incantations
uuidv1();
uuidv1(options);
uuidv1(options, buffer, offset);
uuid.v1();
uuid.v1(options);
uuid.v1(options, buffer, offset);
```

Generate and return a RFC4122 v1 (timestamp-based) UUID.
Expand Down Expand Up @@ -118,7 +134,7 @@ const v1options = {
msecs: new Date('2011-11-01').getTime(),
nsecs: 5678
};
uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
uuid.v1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'

```

Expand All @@ -127,38 +143,32 @@ Example: In-place generation of two binary IDs
```javascript
// Generate two ids in an array
const arr = new Array();
uuidv1(null, arr, 0); // ⇨
uuid.v1(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); // ⇨
uuid.v1(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');
const uuid = require('uuid');

// Incantations
uuidv3(name, namespace);
uuidv3(name, namespace, buffer);
uuidv3(name, namespace, buffer, offset);
uuid.v3(name, namespace);
uuid.v3(name, namespace, buffer);
uuid.v3(name, namespace, buffer, offset);
```

Generate and return a RFC4122 v3 UUID.
Expand All @@ -173,19 +183,19 @@ Returns `buffer`, if specified, otherwise the string form of the UUID
Example:

```javascript
uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424'
uuid.v3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424'

```

### Version 4
### Version 4 (Random)

```javascript
const uuidv4 = require('uuid/v4')
const uuid = require('uuid');

// Incantations
uuidv4();
uuidv4(options);
uuidv4(options, buffer, offset);
uuid.v4();
uuid.v4(options);
uuid.v4(options, buffer, offset);
```

Generate and return a RFC4122 v4 UUID.
Expand All @@ -207,46 +217,40 @@ const v4options = {
0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
]
};
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
uuid.v4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'

```

Example: Generate two IDs in a single buffer

```javascript
const buffer = new Array();
uuidv4(null, buffer, 0); // ⇨
uuid.v4(null, buffer, 0); // ⇨
// [
// 155, 29, 235,
// 77, 59, 125,
// 75, 173, 155,
// 221, 43, 13,
// 123, 61, 203,
// 155, 29, 235, 77, 59,
// 125, 75, 173, 155, 221,
// 43, 13, 123, 61, 203,
// 109
// ]
uuidv4(null, buffer, 16); // ⇨
uuid.v4(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
// 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
### Version 5 (Namespace)

```javascript
const uuidv5 = require('uuid/v5');
const uuid = require('uuid');

// Incantations
uuidv5(name, namespace);
uuidv5(name, namespace, buffer);
uuidv5(name, namespace, buffer, offset);
uuid.v5(name, namespace);
uuid.v5(name, namespace, buffer);
uuid.v5(name, namespace, buffer, offset);
```

Generate and return a RFC4122 v5 UUID.
Expand All @@ -261,7 +265,7 @@ Returns `buffer`, if specified, otherwise the string form of the UUID
Example:

```javascript
uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b'
uuid.v5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b'

```

Expand Down
Loading