diff --git a/examples/browser-rollup/example-all.js b/examples/browser-rollup/example-all.js index f67de6c2..4e421731 100644 --- a/examples/browser-rollup/example-all.js +++ b/examples/browser-rollup/example-all.js @@ -1,9 +1,20 @@ -import { v1 as uuidv1, v4 as uuidv4, v3 as uuidv3, v5 as uuidv5 } from 'uuid'; +import { + parse as uuidParse, + stringify as uuidStringify, + v1 as uuidv1, + v3 as uuidv3, + v4 as uuidv4, + v5 as uuidv5, + validate as uuidValidate, + version as uuidVersion, +} from 'uuid'; import * as uuid from 'uuid'; import testpage from '../utils/testpage'; testpage(function (addTest, done) { + addTest('Named exports'); + addTest('uuidv1()', uuidv1()); addTest('uuidv4()', uuidv4()); @@ -34,7 +45,13 @@ testpage(function (addTest, done) { // const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; addTest('uuidv5() MY_NAMESPACE', uuidv5('Hello, World!', MY_NAMESPACE)); - addTest('Same with default export'); + // Utility functions + addTest('uuidParse()', uuidParse(MY_NAMESPACE)); + addTest('uuidStringify()', uuidStringify(uuidParse(MY_NAMESPACE))); + addTest('uuidValidate()', uuidValidate(MY_NAMESPACE)); + addTest('uuidVersion()', uuidVersion(MY_NAMESPACE)); + + addTest('Default export'); addTest('uuid.v1()', uuid.v1()); addTest('uuid.v4()', uuid.v4()); @@ -45,5 +62,10 @@ testpage(function (addTest, done) { addTest('uuid.v5() URL', uuid.v5('http://example.com/hello', uuid.v5.URL)); addTest('uuid.v5() MY_NAMESPACE', uuid.v5('Hello, World!', MY_NAMESPACE)); + addTest('uuid.parse()', uuid.parse(MY_NAMESPACE)); + addTest('uuid.stringify()', uuid.stringify(uuid.parse(MY_NAMESPACE))); + addTest('uuid.validate()', uuid.validate(MY_NAMESPACE)); + addTest('uuid.version()', uuid.version(MY_NAMESPACE)); + done(); }); diff --git a/examples/browser-webpack/example-all.js b/examples/browser-webpack/example-all.js index f67de6c2..4e421731 100644 --- a/examples/browser-webpack/example-all.js +++ b/examples/browser-webpack/example-all.js @@ -1,9 +1,20 @@ -import { v1 as uuidv1, v4 as uuidv4, v3 as uuidv3, v5 as uuidv5 } from 'uuid'; +import { + parse as uuidParse, + stringify as uuidStringify, + v1 as uuidv1, + v3 as uuidv3, + v4 as uuidv4, + v5 as uuidv5, + validate as uuidValidate, + version as uuidVersion, +} from 'uuid'; import * as uuid from 'uuid'; import testpage from '../utils/testpage'; testpage(function (addTest, done) { + addTest('Named exports'); + addTest('uuidv1()', uuidv1()); addTest('uuidv4()', uuidv4()); @@ -34,7 +45,13 @@ testpage(function (addTest, done) { // const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; addTest('uuidv5() MY_NAMESPACE', uuidv5('Hello, World!', MY_NAMESPACE)); - addTest('Same with default export'); + // Utility functions + addTest('uuidParse()', uuidParse(MY_NAMESPACE)); + addTest('uuidStringify()', uuidStringify(uuidParse(MY_NAMESPACE))); + addTest('uuidValidate()', uuidValidate(MY_NAMESPACE)); + addTest('uuidVersion()', uuidVersion(MY_NAMESPACE)); + + addTest('Default export'); addTest('uuid.v1()', uuid.v1()); addTest('uuid.v4()', uuid.v4()); @@ -45,5 +62,10 @@ testpage(function (addTest, done) { addTest('uuid.v5() URL', uuid.v5('http://example.com/hello', uuid.v5.URL)); addTest('uuid.v5() MY_NAMESPACE', uuid.v5('Hello, World!', MY_NAMESPACE)); + addTest('uuid.parse()', uuid.parse(MY_NAMESPACE)); + addTest('uuid.stringify()', uuid.stringify(uuid.parse(MY_NAMESPACE))); + addTest('uuid.validate()', uuid.validate(MY_NAMESPACE)); + addTest('uuid.version()', uuid.version(MY_NAMESPACE)); + done(); }); diff --git a/examples/utils/testpage.js b/examples/utils/testpage.js index 13cdb6b5..b78ae0d8 100644 --- a/examples/utils/testpage.js +++ b/examples/utils/testpage.js @@ -1,23 +1,37 @@ export default function test(callback) { - const ul = document.createElement('ul'); - document.body.appendChild(ul); + const style = document.createElement('style'); + style.appendChild( + document.createTextNode( + [ + 'body {font-family: monospace;}', + 'dt, dd {display: inline-block; margin: 0;}', + 'dt {min-width: 15em;}', + ].join('\n') + ) + ); + document.body.appendChild(style); function addTest(title, result) { - const li = document.createElement('li'); + // join() result if it's array-like + if (result instanceof Uint8Array || Array.isArray(result)) { + result = Array.prototype.join.apply(result); + } - const h2 = document.createElement('h2'); - h2.innerHTML = title; - li.appendChild(h2); + let el; + if (result === undefined) { + el = document.createElement('h2'); + el.innerHTML = title; + } else { + el = document.createElement('div'); + el.className = 'test_result'; + el.innerHTML = '
' + title + '
:
' + result + '
'; + } - const p = document.createElement('p'); - p.innerHTML = result; - li.appendChild(p); - - ul.appendChild(li); + document.body.appendChild(el); } function done() { - const div = document.createElement('div'); + const div = document.createElement('h2'); div.id = 'done'; document.body.appendChild(div); } diff --git a/package-lock.json b/package-lock.json index 7958fc1b..b2ff5473 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14145,15 +14145,6 @@ "json-stringify-safe": "^5.0.1" } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", diff --git a/prettier.config.js b/prettier.config.js index a7925694..78ef1dd7 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -3,5 +3,5 @@ module.exports = { printWidth: 100, proseWrap: 'never', singleQuote: true, - trailingComma: 'all', + trailingComma: 'es5', }; diff --git a/src/rng-browser.js b/src/rng-browser.js index ff7bc09a..1af1e4c9 100644 --- a/src/rng-browser.js +++ b/src/rng-browser.js @@ -17,7 +17,7 @@ const rnds8 = new Uint8Array(16); export default function rng() { if (!getRandomValues) { throw new Error( - 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported', + 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported' ); } diff --git a/src/uuid-bin.js b/src/uuid-bin.js index f7305adc..a411b193 100644 --- a/src/uuid-bin.js +++ b/src/uuid-bin.js @@ -14,7 +14,7 @@ function usage() { console.log(' uuid v5 '); console.log(' uuid --help'); console.log( - '\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122', + '\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122' ); } diff --git a/test/browser/browser.spec.js b/test/browser/browser.spec.js index 3ee235f4..a0d9d543 100644 --- a/test/browser/browser.spec.js +++ b/test/browser/browser.spec.js @@ -1,10 +1,10 @@ /* global browser:false, $:false, $$:false */ const v1Regex = new RegExp( - /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, + /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i ); const v4Regex = new RegExp( - /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, + /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i ); const v1 = (result) => expect(result).toMatch(v1Regex); @@ -15,7 +15,12 @@ const v3custom = (result) => expect(result).toBe('f5a52d34-dcd7-30f7-b581-0112fa const v5dns = (result) => expect(result).toBe('fdda765f-fc57-5604-a269-52a7df8164ec'); const v5url = (result) => expect(result).toBe('3bbcee75-cecc-5b56-8031-b6641c1ed1f1'); const v5custom = (result) => expect(result).toBe('c49c5142-4d9a-5940-a926-612ede0ec632'); -const ignore = (result) => true; + +const parse = (result) => + expect(result).toEqual('85,35,141,21,201,38,69,152,180,157,207,78,145,59,161,60'); +const stringify = (result) => expect(result).toBe('55238d15-c926-4598-b49d-cf4e913ba13c'); +const validate = (result) => expect(result).toBe('true'); +const version = (result) => expect(result).toBe('4'); const expectations = { 'uuidv1()': v1, @@ -26,7 +31,12 @@ const expectations = { 'uuidv5() DNS': v5dns, 'uuidv5() URL': v5url, 'uuidv5() MY_NAMESPACE': v5custom, - 'Same with default export': ignore, + + 'uuidParse()': parse, + 'uuidStringify()': stringify, + 'uuidValidate()': validate, + 'uuidVersion()': version, + 'uuid.v1()': v1, 'uuid.v4()': v4, 'uuid.v3() DNS': v3dns, @@ -35,6 +45,11 @@ const expectations = { 'uuid.v5() DNS': v5dns, 'uuid.v5() URL': v5url, 'uuid.v5() MY_NAMESPACE': v5custom, + + 'uuid.parse()': parse, + 'uuid.stringify()': stringify, + 'uuid.validate()': validate, + 'uuid.version()': version, }; const expectationTitles = Object.keys(expectations); @@ -47,7 +62,7 @@ describe('BrowserStack Local Testing', () => { await browser.waitUntil(async () => $('#done').isExisting(), 30000); - const elements = await $$('li'); + const elements = await $$('.test_result'); // Unfortunately the WebDriver API is not thread safe and we cannot use Promise.all() to // query it in parallel: @@ -56,10 +71,11 @@ describe('BrowserStack Local Testing', () => { for (let i = 0; i < elements.length; ++i) { const element = elements[i]; - const h2 = await element.$('h2'); - const title = await h2.getText(); - const p = await element.$('p'); - const result = await p.getText(); + const titleEl = await element.$('dt'); + const title = await titleEl.getText(); + const resultEl = await element.$('dd'); + const result = await resultEl.getText(); + expectations[title](result); titles.push(title); } diff --git a/test/unit/parse.test.js b/test/unit/parse.test.js index 7137d953..5611563e 100644 --- a/test/unit/parse.test.js +++ b/test/unit/parse.test.js @@ -34,7 +34,7 @@ describe('parse', () => { 0x3a, 0x08, 0x4b, - ]), + ]) ); }); @@ -49,14 +49,14 @@ describe('parse', () => { // Verify upper/lower case neutrality assert.deepStrictEqual( parse('0f5abcd1-c194-47f3-905b-2df7263a084b'), - parse('0f5abcd1-c194-47f3-905b-2df7263a084b'.toUpperCase()), + parse('0f5abcd1-c194-47f3-905b-2df7263a084b'.toUpperCase()) ); }); test('Null UUID case', () => { assert.deepStrictEqual( parse('00000000-0000-0000-0000-000000000000'), - Uint8Array.from(new Array(16).fill(0)), + Uint8Array.from(new Array(16).fill(0)) ); }); diff --git a/test/unit/v1.test.js b/test/unit/v1.test.js index c0defc76..6c200265 100644 --- a/test/unit/v1.test.js +++ b/test/unit/v1.test.js @@ -53,7 +53,7 @@ describe('v1', () => { const uidtb = v1({ msecs: TIME - 1 }); assert( parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq', + 'Clock regression by msec increments the clockseq' ); }); @@ -63,7 +63,7 @@ describe('v1', () => { const uidtnb = v1({ msecs: TIME, nsecs: 9 }); assert( parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq', + 'Clock regression by nsec increments the clockseq' ); }); diff --git a/test/unit/v35.test.js b/test/unit/v35.test.js index b6d9312f..1cf9f9b8 100644 --- a/test/unit/v35.test.js +++ b/test/unit/v35.test.js @@ -73,29 +73,29 @@ describe('v35', () => { assert.strictEqual( v3('http://example.com/hello', v3.URL), - 'c6235813-3ba4-3801-ae84-e0a6ebb7d138', + 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' ); assert.strictEqual( v3('hello', '0f5abcd1-c194-47f3-905b-2df7263a084b'), - 'a981a0c2-68b1-35dc-bcfc-296e52ab01ec', + 'a981a0c2-68b1-35dc-bcfc-296e52ab01ec' ); }); test('v3 namespace.toUpperCase', () => { assert.strictEqual( v3('hello.example.com', v3.DNS.toUpperCase()), - '9125a8dc-52ee-365b-a5aa-81b0b3681cf6', + '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' ); assert.strictEqual( v3('http://example.com/hello', v3.URL.toUpperCase()), - 'c6235813-3ba4-3801-ae84-e0a6ebb7d138', + 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' ); assert.strictEqual( v3('hello', '0f5abcd1-c194-47f3-905b-2df7263a084b'.toUpperCase()), - 'a981a0c2-68b1-35dc-bcfc-296e52ab01ec', + 'a981a0c2-68b1-35dc-bcfc-296e52ab01ec' ); }); @@ -168,12 +168,12 @@ describe('v35', () => { assert.strictEqual( v5('http://example.com/hello', v5.URL), - '3bbcee75-cecc-5b56-8031-b6641c1ed1f1', + '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' ); assert.strictEqual( v5('hello', '0f5abcd1-c194-47f3-905b-2df7263a084b'), - '90123e1c-7512-523e-bb28-76fab9f2f73d', + '90123e1c-7512-523e-bb28-76fab9f2f73d' ); }); @@ -181,17 +181,17 @@ describe('v35', () => { // Expect to get the same results as http://tools.adjet.org/uuid-v5 assert.strictEqual( v5('hello.example.com', v5.DNS.toUpperCase()), - 'fdda765f-fc57-5604-a269-52a7df8164ec', + 'fdda765f-fc57-5604-a269-52a7df8164ec' ); assert.strictEqual( v5('http://example.com/hello', v5.URL.toUpperCase()), - '3bbcee75-cecc-5b56-8031-b6641c1ed1f1', + '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' ); assert.strictEqual( v5('hello', '0f5abcd1-c194-47f3-905b-2df7263a084b'.toUpperCase()), - '90123e1c-7512-523e-bb28-76fab9f2f73d', + '90123e1c-7512-523e-bb28-76fab9f2f73d' ); }); diff --git a/test/unit/v4.test.js b/test/unit/v4.test.js index 6275dd40..bd8247b9 100644 --- a/test/unit/v4.test.js +++ b/test/unit/v4.test.js @@ -49,7 +49,7 @@ describe('v4', () => { { random: randomBytesFixture, }, - buffer, + buffer ); assert.deepEqual(buffer, expectedBytes); assert.strictEqual(buffer, result); @@ -62,14 +62,14 @@ describe('v4', () => { random: randomBytesFixture, }, buffer, - 0, + 0 ); v4( { random: randomBytesFixture, }, buffer, - 16, + 16 ); assert.deepEqual(buffer, expectedBytes.concat(expectedBytes)); }); diff --git a/test/unit/validate.test.js b/test/unit/validate.test.js index 29dbfe98..3ed9a948 100644 --- a/test/unit/validate.test.js +++ b/test/unit/validate.test.js @@ -24,9 +24,9 @@ describe('validate', () => { assert.strictEqual( validate( - '=Y00a-f*v00b*-00c-00d#-p00f\b-00g-00h-####00i^^^-00j*1*2*3&-L00k-\n00l-/00m-----00n-fg000-00p-00r+', + '=Y00a-f*v00b*-00c-00d#-p00f\b-00g-00h-####00i^^^-00j*1*2*3&-L00k-\n00l-/00m-----00n-fg000-00p-00r+' ), - false, + false ); }); }); diff --git a/test/unit/version.test.js b/test/unit/version.test.js index 9e0b8925..c482b4e7 100644 --- a/test/unit/version.test.js +++ b/test/unit/version.test.js @@ -26,7 +26,7 @@ describe('version', () => { assert.throws(() => { version( - '=Y00a-f*v00b*-00c-00d#-p00f\b-00g-00h-####00i^^^-00j*1*2*3&-L00k-\n00l-/00m-----00n-fg000-00p-00r+', + '=Y00a-f*v00b*-00c-00d#-p00f\b-00g-00h-####00i^^^-00j*1*2*3&-L00k-\n00l-/00m-----00n-fg000-00p-00r+' ); }); });