From 36961bddad13d3b13cdec89f1f43f40c5dfcbfab Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Wed, 8 Apr 2026 14:56:02 +0200 Subject: [PATCH] refactor: replace uuid package by native uuid --- package-lock.json | 19 ------------------- package.json | 1 - spec/Idempotency.spec.js | 5 +---- spec/MongoStorageAdapter.spec.js | 5 +---- spec/ParseGraphQLServer.spec.js | 6 +----- .../Postgres/PostgresStorageAdapter.js | 4 ++-- src/LiveQuery/ParseLiveQueryServer.ts | 4 ++-- 7 files changed, 7 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2fb31f0afe..4a056dad64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,6 @@ "redis": "5.11.0", "semver": "7.7.4", "tv4": "1.3.0", - "uuid": "13.0.0", "winston": "3.19.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.20.0" @@ -26288,19 +26287,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "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", @@ -44942,11 +44928,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==" - }, "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 0e58c8a3e8..52c4799e05 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "redis": "5.11.0", "semver": "7.7.4", "tv4": "1.3.0", - "uuid": "13.0.0", "winston": "3.19.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.20.0" diff --git a/spec/Idempotency.spec.js b/spec/Idempotency.spec.js index 9edaeec659..22c00a5e79 100644 --- a/spec/Idempotency.spec.js +++ b/spec/Idempotency.spec.js @@ -4,12 +4,9 @@ const Definitions = require('../lib/Options/Definitions'); const request = require('../lib/request'); const rest = require('../lib/rest'); const auth = require('../lib/Auth'); -let uuidv4; +const { randomUUID: uuidv4 } = require('crypto'); describe('Idempotency', () => { - beforeAll(async () => { - ({ v4: uuidv4 } = await import('uuid')); - }); // Parameters /** Enable TTL expiration simulated by removing entry instead of waiting for MongoDB TTL monitor which runs only every 60s, so it can take up to 119s until entry removal - ain't nobody got time for that */ diff --git a/spec/MongoStorageAdapter.spec.js b/spec/MongoStorageAdapter.spec.js index 4420762f8d..facf1b2c41 100644 --- a/spec/MongoStorageAdapter.spec.js +++ b/spec/MongoStorageAdapter.spec.js @@ -7,7 +7,7 @@ const request = require('../lib/request'); const Config = require('../lib/Config'); const TestUtils = require('../lib/TestUtils'); const Utils = require('../lib/Utils'); -let uuidv4; +const { randomUUID: uuidv4 } = require('crypto'); const fakeClient = { s: { options: { dbName: null } }, @@ -17,9 +17,6 @@ const fakeClient = { // These tests are specific to the mongo storage adapter + mongo storage format // and will eventually be moved into their own repo describe_only_db('mongo')('MongoStorageAdapter', () => { - beforeAll(async () => { - ({ v4: uuidv4 } = await import('uuid')); - }); beforeEach(async () => { await new MongoStorageAdapter({ uri: databaseURI }).deleteAllClasses(); Config.get(Parse.applicationId).schemaCache.clear(); diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index c0189433ef..e36067afae 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -30,7 +30,7 @@ const { const { ParseServer } = require('../'); const { ParseGraphQLServer } = require('../lib/GraphQL/ParseGraphQLServer'); const { ReadPreference, Collection } = require('mongodb'); -let uuidv4; +const { randomUUID: uuidv4 } = require('crypto'); function handleError(e) { if (e && e.networkError && e.networkError.result && e.networkError.result.errors) { @@ -45,10 +45,6 @@ describe('ParseGraphQLServer', () => { let parseGraphQLServer; let loggerErrorSpy; - beforeAll(async () => { - ({ v4: uuidv4 } = await import('uuid')); - }); - beforeEach(async () => { parseServer = await global.reconfigureServer({ maintenanceKey: 'test2', diff --git a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js index e56dd336cb..08f8c647f4 100644 --- a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js +++ b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js @@ -5,7 +5,7 @@ import Parse from 'parse/node'; // @flow-disable-next import _ from 'lodash'; // @flow-disable-next -import { v4 as uuidv4 } from 'uuid'; +import { randomUUID } from 'crypto'; import sql from './sql'; import { StorageAdapter } from '../StorageAdapter'; import type { SchemaType, QueryType, QueryOptions } from '../StorageAdapter'; @@ -915,7 +915,7 @@ export class PostgresStorageAdapter implements StorageAdapter { this._client = client; this._onchange = () => { }; this._pgp = pgp; - this._uuid = uuidv4(); + this._uuid = randomUUID(); this.canSortOnJoinTables = false; } diff --git a/src/LiveQuery/ParseLiveQueryServer.ts b/src/LiveQuery/ParseLiveQueryServer.ts index 6acfd2b368..2c5d416007 100644 --- a/src/LiveQuery/ParseLiveQueryServer.ts +++ b/src/LiveQuery/ParseLiveQueryServer.ts @@ -10,7 +10,7 @@ import { matchesQuery, queryHash } from './QueryTools'; import { ParsePubSub } from './ParsePubSub'; import SchemaController from '../Controllers/SchemaController'; import _ from 'lodash'; -import { v4 as uuidv4 } from 'uuid'; +import { randomUUID } from 'crypto'; import { runLiveQueryEventHandlers, getTrigger, @@ -906,7 +906,7 @@ class ParseLiveQueryServer { return; } const hasMasterKey = this._hasMasterKey(request, this.keyPairs); - const clientId = uuidv4(); + const clientId = randomUUID(); const client = new Client( clientId, parseWebsocket,