From 5e4543195d8028fb4164c3981f2fb99b186ef92c Mon Sep 17 00:00:00 2001 From: Christoph Tavan Date: Sat, 7 Mar 2020 11:47:23 +0100 Subject: [PATCH] feat: native ES Module support for Node.js See: https://nodejs.org/docs/latest-v12.x/api/esm.html#esm_dual_commonjs_es_module_packages Closes #342 --- .local/wrapper.mjs | 1 + examples/node-esmodules/README.md | 6 ++++ examples/node-esmodules/example.js | 43 +++++++++++++++++++++++ examples/node-esmodules/package-lock.json | 11 ++++++ examples/node-esmodules/package.json | 12 +++++++ package.json | 7 +++- wrapper.mjs | 5 +++ 7 files changed, 84 insertions(+), 1 deletion(-) create mode 120000 .local/wrapper.mjs create mode 100644 examples/node-esmodules/README.md create mode 100644 examples/node-esmodules/example.js create mode 100644 examples/node-esmodules/package-lock.json create mode 100644 examples/node-esmodules/package.json create mode 100644 wrapper.mjs diff --git a/.local/wrapper.mjs b/.local/wrapper.mjs new file mode 120000 index 00000000..4d9f862a --- /dev/null +++ b/.local/wrapper.mjs @@ -0,0 +1 @@ +../wrapper.mjs \ No newline at end of file diff --git a/examples/node-esmodules/README.md b/examples/node-esmodules/README.md new file mode 100644 index 00000000..f1a1e233 --- /dev/null +++ b/examples/node-esmodules/README.md @@ -0,0 +1,6 @@ +# uuid example Node.js ESModules + +``` +npm install +npm test +``` diff --git a/examples/node-esmodules/example.js b/examples/node-esmodules/example.js new file mode 100644 index 00000000..d63b6974 --- /dev/null +++ b/examples/node-esmodules/example.js @@ -0,0 +1,43 @@ +import { v1 as uuidv1, v4 as uuidv4, v3 as uuidv3, v5 as uuidv5 } from 'uuid'; +import * as uuid from 'uuid'; + +console.log('uuidv1()', uuidv1()); + +console.log('uuidv4()', uuidv4()); + +// ... using predefined DNS namespace (for domain names) +console.log('uuidv3() DNS', uuidv3('hello.example.com', uuidv3.DNS)); + +// ... using predefined URL namespace (for, well, URLs) +console.log('uuidv3() URL', uuidv3('http://example.com/hello', uuidv3.URL)); + +// ... 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 = '55238d15-c926-4598-b49d-cf4e913ba13c'; +console.log('uuidv3() MY_NAMESPACE', uuidv3('Hello, World!', MY_NAMESPACE)); + +// ... using predefined DNS namespace (for domain names) +console.log('uuidv5() DNS', uuidv5('hello.example.com', uuidv5.DNS)); + +// ... using predefined URL namespace (for, well, URLs) +console.log('uuidv5() URL', uuidv5('http://example.com/hello', uuidv5.URL)); + +// ... 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'; +console.log('uuidv5() MY_NAMESPACE', uuidv5('Hello, World!', MY_NAMESPACE)); + +console.log('Same with default export'); + +console.log('uuid.v1()', uuid.v1()); +console.log('uuid.v4()', uuid.v4()); +console.log('uuid.v3() DNS', uuid.v3('hello.example.com', uuid.v3.DNS)); +console.log('uuid.v3() URL', uuid.v3('http://example.com/hello', uuid.v3.URL)); +console.log('uuid.v3() MY_NAMESPACE', uuid.v3('Hello, World!', MY_NAMESPACE)); +console.log('uuid.v5() DNS', uuid.v5('hello.example.com', uuid.v5.DNS)); +console.log('uuid.v5() URL', uuid.v5('http://example.com/hello', uuid.v5.URL)); +console.log('uuid.v5() MY_NAMESPACE', uuid.v5('Hello, World!', MY_NAMESPACE)); diff --git a/examples/node-esmodules/package-lock.json b/examples/node-esmodules/package-lock.json new file mode 100644 index 00000000..407244eb --- /dev/null +++ b/examples/node-esmodules/package-lock.json @@ -0,0 +1,11 @@ +{ + "name": "uuid-example-node-esmodules", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "uuid": { + "version": "file:../../.local" + } + } +} diff --git a/examples/node-esmodules/package.json b/examples/node-esmodules/package.json new file mode 100644 index 00000000..24265f5e --- /dev/null +++ b/examples/node-esmodules/package.json @@ -0,0 +1,12 @@ +{ + "name": "uuid-example-node-esmodules", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "test": "node --experimental-modules example.js" + }, + "dependencies": { + "uuid": "file:../../.local" + } +} diff --git a/package.json b/package.json index 14fe1ef6..500b706f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,10 @@ }, "sideEffects": false, "main": "dist/index.js", + "exports": { + "require": "dist/index.js", + "import": "./wrapper.mjs" + }, "module": "dist/esm-node/index.js", "browser": { "./dist/md5.js": "./dist/md5-browser.js", @@ -34,7 +38,8 @@ "v1.js", "v3.js", "v4.js", - "v5.js" + "v5.js", + "wrapper.mjs" ], "devDependencies": { "@babel/cli": "7.8.4", diff --git a/wrapper.mjs b/wrapper.mjs new file mode 100644 index 00000000..87e7f2e7 --- /dev/null +++ b/wrapper.mjs @@ -0,0 +1,5 @@ +import uuid from './dist/index.js'; +export const v1 = uuid.v1; +export const v3 = uuid.v3; +export const v4 = uuid.v4; +export const v5 = uuid.v5;