diff --git a/package-lock.json b/package-lock.json index b7459ac5..e6030cbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "gsap": "^3.13.0", "is-plain-object": "^5.0.0", "jsonpath-plus": "^10.3.0", + "nanoid": "^5.1.6", "pixi-viewport": "^6.0.3", "zod": "^3.25.67", "zod-validation-error": "^3.4.0" @@ -33,7 +34,6 @@ "rollup-plugin-copy": "^3.5.0", "standard-version": "^9.5.0", "typescript": "^5.9.3", - "uuid": "^13.0.0", "vitest": "^4.0.8" }, "engines": { @@ -4841,10 +4841,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", "funding": [ { "type": "github", @@ -4853,10 +4852,10 @@ ], "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/neo-async": { @@ -5164,6 +5163,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6211,20 +6229,6 @@ "dev": true, "license": "MIT" }, - "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", diff --git a/package.json b/package.json index 0d23ce23..8e893950 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "gsap": "^3.13.0", "is-plain-object": "^5.0.0", "jsonpath-plus": "^10.3.0", + "nanoid": "^5.1.6", "pixi-viewport": "^6.0.3", "zod": "^3.25.67", "zod-validation-error": "^3.4.0" @@ -71,7 +72,6 @@ "rollup-plugin-copy": "^3.5.0", "standard-version": "^9.5.0", "typescript": "^5.9.3", - "uuid": "^13.0.0", "vitest": "^4.0.8" } } diff --git a/rollup.config.mjs b/rollup.config.mjs index b0834b5a..46d5246a 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -37,6 +37,6 @@ export default [ ], }), ], - external: ['pixi.js'], + external: ['pixi.js', 'nanoid'], }, ]; diff --git a/src/utils/uuid.js b/src/utils/uuid.js index 9937b4fc..83038e91 100644 --- a/src/utils/uuid.js +++ b/src/utils/uuid.js @@ -1,3 +1,10 @@ -import { v4 as uuidv4 } from 'uuid'; +import { customAlphabet } from 'nanoid'; -export const uid = () => uuidv4().replace(/-/g, '').substring(0, 12); +// uuidv4 provides completely random values. (CSPRNG) +// nanoid includes uppercase alphabets, making it more secure (completely random like uuidv4). +// nanoid allows direct length adjustment in the function. +export const uid = () => + customAlphabet( + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + 15, + )(); diff --git a/src/utils/uuid.test.js b/src/utils/uuid.test.js index 2d629722..2020d65d 100644 --- a/src/utils/uuid.test.js +++ b/src/utils/uuid.test.js @@ -5,7 +5,7 @@ describe('uuid', () => { describe('createUUID', () => { it('should create a UUID string of length 8', () => { const uuid = uid(); - expect(uuid).toHaveLength(12); + expect(uuid).toHaveLength(15); }); it('should create a UUID string containing only alphanumeric characters', () => { @@ -20,11 +20,12 @@ describe('uuid', () => { }); it('should create a new UUID every time it is called.', () => { + const size = 100000; const uuids = new Set(); - for (let i = 0; i < 1000; i++) { + for (let i = 0; i < size; i++) { uuids.add(uid()); } - expect(uuids.size).toBe(1000); + expect(uuids.size).toBe(size); }); }); });