Remove uuid dependency in favor of crypto.randomUUID()

The uuid package dropped its CommonJS entry point in v14, making it
incompatible with Backstage's CJS build output and Jest test runner.
Rather than working around the ESM-only issue, replace all usage with
the built-in crypto.randomUUID() which has been available in Node.js
since v16.7 and in all major browsers since March 2022.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
This commit is contained in:
Fredrik Adelöw
2026-04-23 10:51:43 +02:00
parent 9632e903eb
commit e9b78e9698
97 changed files with 162 additions and 179 deletions
+33
View File
@@ -0,0 +1,33 @@
---
'@backstage/backend-defaults': patch
'@backstage/backend-test-utils': patch
'@backstage/cli-module-new': patch
'@backstage/plugin-auth-backend': patch
'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch
'@backstage/plugin-auth-node': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-catalog-backend-module-aws': patch
'@backstage/plugin-catalog-backend-module-azure': patch
'@backstage/plugin-catalog-backend-module-backstage-openapi': patch
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
'@backstage/plugin-catalog-backend-module-bitbucket-server': patch
'@backstage/plugin-catalog-backend-module-gerrit': patch
'@backstage/plugin-catalog-backend-module-gitea': patch
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/plugin-catalog-backend-module-gitlab': patch
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
'@backstage/plugin-catalog-backend-module-ldap': patch
'@backstage/plugin-catalog-backend-module-msgraph': patch
'@backstage/plugin-catalog-backend-module-puppetdb': patch
'@backstage/plugin-notifications-backend': patch
'@backstage/plugin-permission-common': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-search-backend-module-elasticsearch': patch
'@backstage/plugin-search-backend-module-pg': patch
'@backstage/plugin-search-backend-node': patch
'@backstage/plugin-search-react': patch
'@backstage/plugin-signals': patch
'@backstage/plugin-signals-backend': patch
---
Removed the `uuid` dependency and replaced usage with the built-in `crypto.randomUUID()`.
-1
View File
@@ -192,7 +192,6 @@
"selfsigned": "^2.0.0",
"tar": "^7.5.6",
"triple-beam": "^1.4.1",
"uuid": "^11.0.0",
"winston": "^3.2.1",
"winston-transport": "^4.5.0",
"yauzl": "^3.2.1",
@@ -25,7 +25,7 @@ import {
import { randomBytes } from 'node:crypto';
import { SignJWT, exportJWK, generateKeyPair } from 'jose';
import { DateTime } from 'luxon';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
@@ -19,7 +19,7 @@ import { ConfigReader } from '@backstage/config';
import { SignJWT, exportJWK, generateKeyPair } from 'jose';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { jwksTokenHandler } from './jwks';
// Simplified copy of TokenFactory in @backstage/plugin-auth-backend
@@ -17,7 +17,7 @@
import { DatabaseService, LoggerService } from '@backstage/backend-plugin-api';
import { HumanDuration, durationToMilliseconds } from '@backstage/types';
import { JWK, exportJWK, generateKeyPair } from 'jose';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DatabaseKeyStore } from './DatabaseKeyStore';
import { InternalKey, KeyPayload, KeyStore } from './types';
import { PluginKeySource } from './types';
@@ -19,7 +19,7 @@ import { ConflictError, NotFoundError } from '@backstage/errors';
import { CronTime } from 'cron';
import { Knex } from 'knex';
import { DateTime, Duration } from 'luxon';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DB_TASKS_TABLE, DbTasksRow } from '../database/tables';
import {
TaskSettingsV2,
-1
View File
@@ -77,7 +77,6 @@
"pg-connection-string": "^2.3.0",
"testcontainers": "^11.9.0",
"text-extensions": "^2.4.0",
"uuid": "^11.0.0",
"yn": "^4.0.0",
"zod": "^3.25.76 || ^4.0.0",
"zod-to-json-schema": "^3.25.1"
+1 -1
View File
@@ -15,7 +15,7 @@
*/
import Keyv, { type KeyvStoreAdapter } from 'keyv';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { waitForReady } from '../util/waitForReady';
import { Instance } from './types';
+1 -1
View File
@@ -16,7 +16,7 @@
import { isDockerDisabledForTests } from '../util/isDockerDisabledForTests';
import { startMemcachedContainer } from './memcache';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
const itIfDocker = isDockerDisabledForTests() ? it.skip : it;
+1 -1
View File
@@ -16,7 +16,7 @@
import { isDockerDisabledForTests } from '../util/isDockerDisabledForTests';
import { startRedisContainer } from './redis';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
const itIfDocker = isDockerDisabledForTests() ? it.skip : it;
+1 -1
View File
@@ -15,7 +15,7 @@
*/
import { isDockerDisabledForTests } from '../util/isDockerDisabledForTests';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { startValkeyContainer } from './valkey';
const itIfDocker = isDockerDisabledForTests() ? it.skip : it;
@@ -16,7 +16,7 @@
import { randomBytes } from 'node:crypto';
import knexFactory, { Knex } from 'knex';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import yn from 'yn';
import { waitForReady } from '../util/waitForReady';
import { Engine, LARGER_POOL_CONFIG, TestDatabaseProperties } from './types';
@@ -17,7 +17,7 @@
import { randomBytes } from 'node:crypto';
import knexFactory, { Knex } from 'knex';
import { parse as parsePgConnectionString } from 'pg-connection-string';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { waitForReady } from '../util/waitForReady';
import { Engine, LARGER_POOL_CONFIG, TestDatabaseProperties } from './types';
@@ -4,7 +4,7 @@ import {
EntityProvider,
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { readProviderConfigs } from './readProviderConfigs';
import {
LoggerService,
@@ -74,7 +74,7 @@ export class {{providerClass}} implements EntityProvider {
fn: async () => {
const logger = this.#logger.child({
taskId: id,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -49,8 +49,7 @@
"@backstage/plugin-auth-backend": "workspace:^",
"@backstage/types": "workspace:^",
"msw": "^2.0.0",
"node-mocks-http": "^1.0.0",
"uuid": "^11.0.0"
"node-mocks-http": "^1.0.0"
},
"configSchema": "config.d.ts"
}
@@ -23,7 +23,7 @@ import { SignJWT, exportJWK, generateKeyPair } from 'jose';
import { HttpResponse, http } from 'msw';
import { setupServer } from 'msw/node';
import { createRequest } from 'node-mocks-http';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { AuthHelper } from './helpers';
import { CF_JWT_HEADER, CloudflareAccessIdentityProfile } from './types';
-1
View File
@@ -65,7 +65,6 @@
"matcher": "^4.0.0",
"minimatch": "^10.2.1",
"passport": "^0.7.0",
"uuid": "^11.0.0",
"zod": "^3.25.76 || ^4.0.0",
"zod-validation-error": "^5.0.0"
},
@@ -16,7 +16,7 @@
import { exportJWK, generateKeyPair, JWK } from 'jose';
import { DateTime } from 'luxon';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { LoggerService } from '@backstage/backend-plugin-api';
import {
BackstageSignInResult,
@@ -23,7 +23,7 @@ import {
import { AuthenticationError } from '@backstage/errors';
import { readDurationFromConfig } from '@backstage/config';
import { durationToMilliseconds } from '@backstage/types';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { OfflineSessionDatabase } from '../database/OfflineSessionDatabase';
import {
generateRefreshToken,
+1 -2
View File
@@ -61,7 +61,6 @@
"cookie-parser": "^1.4.6",
"express-promise-router": "^4.1.1",
"msw": "^1.0.0",
"supertest": "^7.0.0",
"uuid": "^11.0.0"
"supertest": "^7.0.0"
}
}
@@ -23,7 +23,7 @@ import {
import { cloneDeep } from 'lodash';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DefaultIdentityClient } from './DefaultIdentityClient';
import { IdentityApiGetIdentityRequest } from './IdentityApi';
@@ -24,7 +24,7 @@ import {
import { cloneDeep } from 'lodash';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { IdentityClient } from './IdentityClient';
import { DiscoveryService } from '@backstage/backend-plugin-api';
@@ -66,8 +66,7 @@
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-kubernetes-common": "workspace:^",
"p-limit": "^3.0.2",
"uuid": "^11.0.0"
"p-limit": "^3.0.2"
},
"devDependencies": {
"@aws-sdk/util-stream-node": "^3.350.0",
@@ -29,7 +29,7 @@ import {
ListObjectsV2Output,
S3,
} from '@aws-sdk/client-s3';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { getEndpointFromInstructions } from '@aws-sdk/middleware-endpoint';
import {
AwsCredentialsManager,
@@ -137,7 +137,7 @@ export class AwsS3EntityProvider implements EntityProvider {
const logger = this.logger.child({
class: AwsS3EntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -59,8 +59,7 @@
"@backstage/integration": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
"uuid": "^11.0.0"
"@backstage/plugin-events-node": "workspace:^"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -32,7 +32,7 @@ import {
locationSpecToLocationEntity,
} from '@backstage/plugin-catalog-node';
import { LocationSpec } from '@backstage/plugin-catalog-common';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { readAzureBlobStorageConfigs } from './config';
import {
AzureBlobStorageIntergation,
@@ -134,7 +134,7 @@ export class AzureBlobStorageEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: AzureBlobStorageEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -29,7 +29,7 @@ import {
import { LocationSpec } from '@backstage/plugin-catalog-common';
import { readAzureDevOpsConfigs } from './config';
import { AzureDevOpsConfig } from './types';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { codeSearch, CodeSearchResultItem } from '../lib';
import {
SchedulerService,
@@ -129,7 +129,7 @@ export class AzureDevOpsEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: AzureDevOpsEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -42,7 +42,6 @@
"cross-fetch": "^4.0.0",
"lodash": "^4.17.21",
"openapi-merge": "^1.3.2",
"uuid": "^11.0.0",
"yaml": "^2.7.0"
},
"devDependencies": {
@@ -40,7 +40,7 @@ import {
SchedulerService,
SchedulerServiceTaskRunner,
} from '@backstage/backend-plugin-api';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import lodash from 'lodash';
const HTTP_VERBS: (keyof PathItemObject)[] = [
@@ -238,7 +238,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider {
class:
InternalOpenApiDocumentationProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
await this.refresh(logger);
},
@@ -59,8 +59,7 @@
"@backstage/plugin-bitbucket-cloud-common": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
"uuid": "^11.0.0"
"@backstage/plugin-events-node": "workspace:^"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -44,7 +44,7 @@ import {
BitbucketCloudEntityProviderConfig,
readProviderConfigs,
} from './BitbucketCloudEntityProviderConfig';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
const DEFAULT_BRANCH = 'master';
const TOPIC_REPO_PUSH = 'bitbucketCloud.repo:push';
@@ -154,7 +154,7 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: BitbucketCloudEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -53,8 +53,7 @@
"@backstage/integration": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
"uuid": "^11.0.0"
"@backstage/plugin-events-node": "workspace:^"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -27,7 +27,7 @@ import {
DeferredEntity,
CatalogService,
} from '@backstage/plugin-catalog-node';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { BitbucketServerClient, paginated } from '../lib';
import {
BitbucketServerEntityProviderConfig,
@@ -157,7 +157,7 @@ export class BitbucketServerEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: BitbucketServerEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -54,8 +54,7 @@
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"fs-extra": "^11.2.0",
"p-limit": "^3.1.0",
"uuid": "^11.0.0"
"p-limit": "^3.1.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -29,7 +29,7 @@ import {
parseGerritJsonResponse,
ScmIntegrations,
} from '@backstage/integration';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import pLimit from 'p-limit';
import { readGerritConfigs } from './config';
@@ -128,7 +128,7 @@ export class GerritEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: GerritEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -39,8 +39,7 @@
"@backstage/integration": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"p-limit": "^3.0.2",
"uuid": "^11.0.0"
"p-limit": "^3.0.2"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -17,14 +17,17 @@ import { mockServices } from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { GiteaEntityProvider } from './GiteaEntityProvider';
import * as uuid from 'uuid';
import * as nodeCrypto from 'node:crypto';
import { readGiteaConfigs } from './config';
import { getGiteaApiUrl } from './core';
import { GiteaIntegration } from '@backstage/integration';
jest.mock('./config');
jest.mock('./core');
jest.mock('uuid');
jest.mock('node:crypto', () => ({
...jest.requireActual('node:crypto'),
randomUUID: jest.fn(),
}));
describe('GiteaEntityProvider', () => {
const logger = mockServices.logger.mock();
@@ -59,7 +62,7 @@ describe('GiteaEntityProvider', () => {
'https://gitea.example.com/api/v1/',
);
mockScheduler.createScheduledTaskRunner.mockReturnValue(mockTaskRunner);
(uuid.v4 as jest.Mock).mockReturnValue('test-uuid');
(nodeCrypto.randomUUID as jest.Mock).mockReturnValue('test-uuid');
// Mock global fetch
global.fetch = jest.fn();
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { Config } from '@backstage/config';
import { InputError } from '@backstage/errors';
import {
@@ -141,7 +141,7 @@ export class GiteaEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: GiteaEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -70,8 +70,7 @@
"git-url-parse": "^15.0.0",
"lodash": "^4.17.21",
"minimatch": "^10.2.1",
"octokit": "^3.0.0",
"uuid": "^11.0.0"
"octokit": "^3.0.0"
},
"devDependencies": {
"@backstage/backend-defaults": "workspace:^",
@@ -32,7 +32,7 @@ import {
import { LocationSpec } from '@backstage/plugin-catalog-common';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
GithubEntityProviderConfig,
readProviderConfigs,
@@ -189,7 +189,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber {
const logger = this.logger.child({
class: GithubEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
await this.refresh(logger);
@@ -52,7 +52,7 @@ import {
TeamEvent,
} from '@octokit/webhooks-types';
import { merge } from 'lodash';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
assignGroupsToUsers,
@@ -894,7 +894,7 @@ export class GithubMultiOrgEntityProvider implements EntityProvider {
const logger = this.options.logger.child({
class: GithubMultiOrgEntityProvider.prototype.constructor.name,
taskId: id,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -41,7 +41,7 @@ import {
TeamEditedEvent,
TeamEvent,
} from '@octokit/webhooks-types';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
defaultOrganizationTeamTransformer,
defaultUserTransformer,
@@ -653,7 +653,7 @@ export class GithubOrgEntityProvider implements EntityProvider {
const logger = this.options.logger.child({
class: GithubOrgEntityProvider.prototype.constructor.name,
taskId: id,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -61,8 +61,7 @@
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
"@gitbeaker/rest": "^40.0.3",
"lodash": "^4.17.21",
"uuid": "^11.0.0"
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -30,7 +30,7 @@ import {
} from '@backstage/plugin-catalog-node';
import { EventsService } from '@backstage/plugin-events-node';
import { WebhookProjectSchema, WebhookPushEventSchema } from '@gitbeaker/rest';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
GitLabClient,
GitLabGroup,
@@ -180,7 +180,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: GitlabDiscoveryEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -31,7 +31,7 @@ import {
} from '@backstage/plugin-catalog-node';
import { EventsService } from '@backstage/plugin-events-node';
import { merge } from 'lodash';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
GitLabClient,
@@ -340,7 +340,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: GitlabOrgDiscoveryEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -59,8 +59,7 @@
"express": "^4.22.0",
"express-promise-router": "^4.1.0",
"knex": "^3.0.0",
"luxon": "^3.0.0",
"uuid": "^11.0.0"
"luxon": "^3.0.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -16,7 +16,7 @@
import { TestDatabases } from '@backstage/backend-test-utils';
import { IncrementalIngestionDatabaseManager } from './IncrementalIngestionDatabaseManager';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DeferredEntity } from '@backstage/plugin-catalog-node';
const migrationsDir = `${__dirname}/../../migrations`;
@@ -18,7 +18,7 @@ import { Knex } from 'knex';
import type { DeferredEntity } from '@backstage/plugin-catalog-node';
import { stringifyEntityRef } from '@backstage/catalog-model';
import { Duration } from 'luxon';
import { v4 } from 'uuid';
import { randomUUID as v4 } from 'node:crypto';
import {
IngestionRecord,
IngestionRecordUpdate,
@@ -20,7 +20,7 @@ import { IterationEngine, IterationEngineOptions } from '../types';
import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';
import { performance } from 'node:perf_hooks';
import { Duration } from 'luxon';
import { v4 } from 'uuid';
import { randomUUID as v4 } from 'node:crypto';
import { stringifyError, toError } from '@backstage/errors';
import { EventParams } from '@backstage/plugin-events-node';
import { HumanDuration } from '@backstage/types';
@@ -46,8 +46,7 @@
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/types": "workspace:^",
"ldapts": "^8.0.6",
"lodash": "^4.17.21",
"uuid": "^11.0.0"
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
@@ -25,7 +25,7 @@ import {
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
import { merge } from 'lodash';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
GroupTransformer,
LdapClient,
@@ -324,7 +324,7 @@ export class LdapOrgEntityProvider implements EntityProvider {
const logger = this.options.logger.child({
class: LdapOrgEntityProvider.prototype.constructor.name,
taskId: id,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -60,8 +60,7 @@
"@microsoft/microsoft-graph-types": "^2.6.0",
"lodash": "^4.17.21",
"p-limit": "^3.0.2",
"qs": "^6.9.4",
"uuid": "^11.0.0"
"qs": "^6.9.4"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -25,7 +25,7 @@ import {
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
import { merge } from 'lodash';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import {
GroupTransformer,
MICROSOFT_GRAPH_GROUP_ID_ANNOTATION,
@@ -391,7 +391,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
const logger = this.options.logger.child({
class: MicrosoftGraphOrgEntityProvider.prototype.constructor.name,
taskId: id,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
@@ -55,8 +55,7 @@
"@backstage/errors": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/types": "workspace:^",
"lodash": "^4.17.21",
"uuid": "^11.0.0"
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -23,7 +23,7 @@ import {
readProviderConfigs,
} from './PuppetDbEntityProviderConfig';
import { Config } from '@backstage/config';
import * as uuid from 'uuid';
import { randomUUID } from 'node:crypto';
import { defaultResourceTransformer, ResourceTransformer } from '../puppet';
import {
ANNOTATION_LOCATION,
@@ -145,7 +145,7 @@ export class PuppetDbEntityProvider implements EntityProvider {
const logger = this.logger.child({
class: PuppetDbEntityProvider.prototype.constructor.name,
taskId,
taskInstanceId: uuid.v4(),
taskInstanceId: randomUUID(),
});
try {
await this.refresh(logger);
@@ -23,7 +23,7 @@ exports.up = async function up(knex) {
// Adds a single 'bootstrap' location that can be used to trigger work in processors.
// This is primarily here to fulfill foreign key constraints.
await knex('locations').insert({
id: require('uuid').v4(),
id: require('node:crypto').randomUUID(),
type: 'bootstrap',
target: 'bootstrap',
});
-1
View File
@@ -94,7 +94,6 @@
"minimatch": "^10.2.1",
"p-limit": "^3.0.2",
"prom-client": "^15.0.0",
"uuid": "^11.0.0",
"yaml": "^2.0.0",
"yn": "^4.0.0",
"zod": "^3.25.76 || ^4.0.0",
@@ -21,7 +21,7 @@ import {
} from '@backstage/backend-test-utils';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { Knex } from 'knex';
import * as uuid from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { Logger } from 'winston';
import { DateTime } from 'luxon';
import { applyDatabaseMigrations } from './migrations';
@@ -80,7 +80,7 @@ describe('DefaultProcessingDatabase', () => {
let processedEntity: Entity;
beforeEach(() => {
id = uuid.v4();
id = uuid();
processedEntity = {
apiVersion: '1',
kind: 'Location',
@@ -21,7 +21,7 @@ import {
} from '@backstage/backend-test-utils';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { Knex } from 'knex';
import * as uuid from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DefaultProviderDatabase } from './DefaultProviderDatabase';
import { applyDatabaseMigrations } from './migrations';
import { DbRefreshStateReferencesRow, DbRefreshStateRow } from './tables';
@@ -62,7 +62,7 @@ describe('DefaultProviderDatabase', () => {
const createLocations = async (db: Knex, entityRefs: string[]) => {
for (const ref of entityRefs) {
await insertRefreshStateRow(db, {
entity_id: uuid.v4(),
entity_id: uuid(),
entity_ref: ref,
unprocessed_entity: '{}',
processed_entity: '{}',
@@ -501,7 +501,7 @@ describe('DefaultProviderDatabase', () => {
const { knex, db } = await createDatabase(databaseId);
await createLocations(knex, ['location:default/removed']);
await insertRefreshStateRow(knex, {
entity_id: uuid.v4(),
entity_id: uuid(),
entity_ref: 'location:default/replaced',
unprocessed_entity: '{}',
processed_entity: '{}',
@@ -18,7 +18,7 @@ import { stringifyEntityRef } from '@backstage/catalog-model';
import { DeferredEntity } from '@backstage/plugin-catalog-node';
import { Knex } from 'knex';
import lodash from 'lodash';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { rethrowError } from './conversion';
import { deleteWithEagerPruningOfChildren } from './operations/provider/deleteWithEagerPruningOfChildren';
import { refreshByRefreshKeys } from './operations/provider/refreshByRefreshKeys';
@@ -16,7 +16,7 @@
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { Knex } from 'knex';
import * as uuid from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { applyDatabaseMigrations } from '../../migrations';
import {
DbRefreshStateReferencesRow,
@@ -64,7 +64,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
async function insertEntity(knex: Knex, ...entityRefs: string[]) {
for (const ref of entityRefs) {
await knex<DbRefreshStateRow>('refresh_state').insert({
entity_id: uuid.v4(),
entity_id: uuid(),
entity_ref: ref,
unprocessed_entity: '{}',
processed_entity: '{}',
@@ -15,7 +15,7 @@
*/
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import * as uuid from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { applyDatabaseMigrations } from '../../migrations';
import { DbRefreshKeysRow, DbRefreshStateRow } from '../../tables';
import { generateTargetKey } from '../../util';
@@ -37,7 +37,7 @@ describe('refreshByRefreshKeys', () => {
async databaseId => {
const knex = await createDatabase(databaseId);
const eid1 = uuid.v4();
const eid1 = uuid();
await knex<DbRefreshStateRow>('refresh_state').insert({
entity_id: eid1,
entity_ref: 'k:ns/n1',
@@ -48,7 +48,7 @@ describe('refreshByRefreshKeys', () => {
last_discovery_at: '2021-04-01 13:37:00',
});
const eid2 = uuid.v4();
const eid2 = uuid();
await knex<DbRefreshStateRow>('refresh_state').insert({
entity_id: eid2,
entity_ref: 'k:ns/n2',
@@ -17,7 +17,7 @@
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { Knex } from 'knex';
import { DbRefreshStateRow } from '../../tables';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import {
LoggerService,
isDatabaseConflictError,
@@ -16,7 +16,7 @@
import { Knex } from 'knex';
import splitToChunks from 'lodash/chunk';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { StitchingStrategy } from '../../../stitching/types';
import {
DbFinalEntitiesRow,
@@ -19,7 +19,7 @@ import {
ANNOTATION_ORIGIN_LOCATION,
stringifyEntityRef,
} from '@backstage/catalog-model';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { applyDatabaseMigrations } from '../database/migrations';
import {
DbFinalEntitiesRow,
@@ -17,7 +17,7 @@
import { Location } from '@backstage/catalog-client';
import { ConflictError, InputError, NotFoundError } from '@backstage/errors';
import { Knex } from 'knex';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import {
DbLocationsRow,
DbRefreshStateRow,
@@ -22,7 +22,7 @@ import {
} from '@backstage/backend-test-utils';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { Knex } from 'knex';
import { v4 as uuid, v4 } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import {
QueryEntitiesCursorRequest,
QueryEntitiesInitialRequest,
@@ -99,7 +99,7 @@ describe('DefaultEntitiesCatalog', () => {
}
async function addEntityToSearch(entity: Entity) {
const id = entity.metadata.uid || v4();
const id = entity.metadata.uid || uuid();
const entityRef = stringifyEntityRef(entity);
const entityJson = JSON.stringify(entity);
@@ -1518,7 +1518,7 @@ describe('DefaultEntitiesCatalog', () => {
addEntityToSearch({
apiVersion: 'a',
kind: 'k',
metadata: { name: v4() },
metadata: { name: uuid() },
}),
),
);
@@ -1554,7 +1554,7 @@ describe('DefaultEntitiesCatalog', () => {
addEntityToSearch({
apiVersion: 'a',
kind: 'k',
metadata: { name: v4() },
metadata: { name: uuid() },
}),
),
);
@@ -2465,7 +2465,7 @@ describe('DefaultEntitiesCatalog', () => {
// Insert an unstitched entity: final_entity is NULL but search
// rows exist. This simulates a race or future tombstone state.
const unstitchedId = v4();
const unstitchedId = uuid();
await knex<DbRefreshStateRow>('refresh_state').insert({
entity_id: unstitchedId,
entity_ref: 'component:default/unstitched',
@@ -23,7 +23,7 @@ import {
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { createHash } from 'node:crypto';
import { Knex } from 'knex';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase';
import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase';
import { applyDatabaseMigrations } from '../database/migrations';
@@ -25,7 +25,7 @@ import { Knex } from 'knex';
import { applyDatabaseMigrations } from '../../database/migrations';
import { EntityFilter } from '@backstage/plugin-catalog-node';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { buildEntitySearch } from '../../database/operations/stitcher/buildEntitySearch';
jest.setTimeout(60_000);
@@ -25,7 +25,7 @@ import { Knex } from 'knex';
import { applyDatabaseMigrations } from '../../database/migrations';
import { FilterPredicate } from '@backstage/filter-predicates';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { buildEntitySearch } from '../../database/operations/stitcher/buildEntitySearch';
jest.setTimeout(60_000);
@@ -42,8 +42,7 @@
"@backstage/errors": "workspace:^",
"@types/express": "^4.17.6",
"express": "^4.22.0",
"express-promise-router": "^4.1.0",
"uuid": "^11.0.0"
"express-promise-router": "^4.1.0"
},
"devDependencies": {
"@backstage/backend-defaults": "workspace:^",
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { NotFoundError } from '@backstage/errors';
export type Todo = {
+1 -2
View File
@@ -54,8 +54,7 @@
"express": "^4.22.0",
"express-promise-router": "^4.1.0",
"knex": "^3.0.0",
"p-throttle": "^4.1.1",
"uuid": "^11.0.0"
"p-throttle": "^4.1.1"
},
"devDependencies": {
"@backstage/backend-defaults": "workspace:^",
@@ -32,7 +32,7 @@ import {
} from '@backstage/plugin-notifications-node';
import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils';
import { DatabaseService } from '@backstage/backend-plugin-api';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { DatabaseNotificationsStore, generateSettingsHash } from '../database';
const databases = TestDatabases.create();
@@ -22,7 +22,7 @@ import {
NotificationsStore,
TopicGetOptions,
} from '../database';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { CatalogService } from '@backstage/plugin-catalog-node';
import {
NotificationProcessor,
-1
View File
@@ -52,7 +52,6 @@
"@backstage/errors": "workspace:^",
"@backstage/types": "workspace:^",
"cross-fetch": "^4.0.0",
"uuid": "^11.0.0",
"zod": "^3.25.76 || ^4.0.0",
"zod-to-json-schema": "^3.25.1"
},
@@ -17,7 +17,7 @@
import { Config } from '@backstage/config';
import { ResponseError } from '@backstage/errors';
import fetch from 'cross-fetch';
import * as uuid from 'uuid';
import { z } from 'zod/v3';
import {
AuthorizeResult,
@@ -181,7 +181,7 @@ export class PermissionClient implements PermissionEvaluator {
) {
const request: PermissionMessageBatch<TQuery> = {
items: queries.map(query => ({
id: uuid.v4(),
id: globalThis.crypto.randomUUID(),
...query,
})),
};
@@ -213,7 +213,7 @@ export class PermissionClient implements PermissionEvaluator {
request[permission.name] ||= {
permission,
resourceRef: [],
id: uuid.v4(),
id: globalThis.crypto.randomUUID(),
};
if (resourceRef) {
@@ -222,7 +222,7 @@ export class PermissionClient implements PermissionEvaluator {
} else {
request[permission.name] ||= {
permission,
id: uuid.v4(),
id: globalThis.crypto.randomUUID(),
};
}
}
-1
View File
@@ -93,7 +93,6 @@
"p-queue": "^6.6.2",
"prom-client": "^15.0.0",
"triple-beam": "^1.4.1",
"uuid": "^11.0.0",
"winston": "^3.2.1",
"winston-transport": "^4.7.0",
"yaml": "^2.0.0",
@@ -42,7 +42,7 @@ import { JsonObject } from '@backstage/types';
import fs from 'fs-extra';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { NunjucksWorkflowRunner } from '../tasks/NunjucksWorkflowRunner';
import { DecoratedActionsRegistry } from './DecoratedActionsRegistry';
import { TemplateActionRegistry } from '../actions';
@@ -21,7 +21,7 @@ import {
} from '@backstage/backend-plugin-api';
import { ConflictError, NotFoundError } from '@backstage/errors';
import { Knex } from 'knex';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import {
TaskStore,
TaskStoreCreateTaskOptions,
@@ -84,7 +84,7 @@ import { HumanDuration, JsonObject } from '@backstage/types';
import express from 'express';
import { Duration } from 'luxon';
import { pathToFileURL } from 'node:url';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { z } from 'zod/v3';
import {
DatabaseTaskStore,
@@ -57,8 +57,7 @@
"@opensearch-project/opensearch": "^2.2.1",
"aws4": "^1.12.0",
"elastic-builder": "^2.16.0",
"lodash": "^4.17.21",
"uuid": "^11.0.0"
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -27,7 +27,10 @@ import {
import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('uuid', () => ({ v4: () => 'tag' }));
jest.mock('node:crypto', () => ({
...jest.requireActual('node:crypto'),
randomUUID: () => 'tag',
}));
class ElasticSearchSearchEngineForTranslatorTests extends ElasticSearchSearchEngine {
getTranslator() {
@@ -35,7 +35,7 @@ import { ElasticSearchCustomIndexTemplate } from './types';
import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer';
import { MissingIndexError } from '@backstage/plugin-search-backend-node';
import esb from 'elastic-builder';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import {
AwsCredentialProvider,
DefaultAwsCredentialsManager,
@@ -54,8 +54,7 @@
"@backstage/plugin-search-backend-node": "workspace:^",
"@backstage/plugin-search-common": "workspace:^",
"knex": "^3.0.0",
"lodash": "^4.17.21",
"uuid": "^11.0.0"
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
@@ -36,7 +36,10 @@ const highlightOptions: PgSearchHighlightOptions = {
fragmentDelimiter: ' ... ',
};
jest.mock('uuid', () => ({ v4: () => 'tag' }));
jest.mock('node:crypto', () => ({
...jest.requireActual('node:crypto'),
randomUUID: () => 'tag',
}));
jest.mock('./PgSearchEngineIndexer', () => ({
PgSearchEngineIndexer: jest
@@ -26,7 +26,7 @@ import {
DatabaseStore,
PgSearchQuery,
} from '../database';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { Config } from '@backstage/config';
import { DatabaseService, LoggerService } from '@backstage/backend-plugin-api';
@@ -22,7 +22,7 @@ import {
import { IndexableDocument } from '@backstage/plugin-search-common';
import { PgSearchHighlightOptions } from '../PgSearchEngine';
import { DatabaseDocumentStore } from './DatabaseDocumentStore';
import { v4 as uuidv4 } from 'uuid';
import { randomUUID as uuidv4 } from 'node:crypto';
const highlightOptions: PgSearchHighlightOptions = {
preTag: '<tag>',
+1 -2
View File
@@ -61,8 +61,7 @@
"@types/lunr": "^2.3.3",
"lodash": "^4.17.21",
"lunr": "^2.3.9",
"ndjson": "^2.0.0",
"uuid": "^11.0.0"
"ndjson": "^2.0.0"
},
"devDependencies": {
"@backstage/backend-defaults": "workspace:^",
@@ -22,7 +22,7 @@ import {
import { QueryTranslator, SearchEngine } from '../types';
import { MissingIndexError } from '../errors';
import lunr from 'lunr';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer';
import { LoggerService } from '@backstage/backend-plugin-api';
-1
View File
@@ -69,7 +69,6 @@
"lodash": "^4.17.21",
"qs": "^6.9.4",
"react-use": "^17.3.2",
"uuid": "^11.0.2",
"zod": "^4.0.0"
},
"devDependencies": {
@@ -16,7 +16,7 @@
import { ReactElement, ChangeEvent, useRef } from 'react';
import { capitalize } from 'lodash';
import { v4 as uuid } from 'uuid';
import FormControl from '@material-ui/core/FormControl';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Checkbox from '@material-ui/core/Checkbox';
@@ -181,7 +181,7 @@ export const SelectFilter = (props: SearchFilterComponentProps) => {
defaultValues,
valuesDebounceMs,
);
const allOptionValue = useRef(uuid());
const allOptionValue = useRef(globalThis.crypto.randomUUID());
const allOption = {
value: allOptionValue.current,
label: t('searchFilter.allOptionTitle'),
-1
View File
@@ -44,7 +44,6 @@
"@backstage/types": "workspace:^",
"express": "^4.22.0",
"express-promise-router": "^4.1.0",
"uuid": "^11.0.0",
"ws": "^8.18.0"
},
"devDependencies": {
@@ -18,7 +18,7 @@ import { EventParams, EventsService } from '@backstage/plugin-events-node';
import { SignalPayload } from '@backstage/plugin-signals-node';
import crypto from 'node:crypto';
import { RawData, WebSocket } from 'ws';
import { v4 as uuid } from 'uuid';
import { randomUUID as uuid } from 'node:crypto';
import { JsonObject } from '@backstage/types';
import {
BackstageUserInfo,
+1 -2
View File
@@ -58,8 +58,7 @@
"@backstage/theme": "workspace:^",
"@backstage/types": "workspace:^",
"@material-ui/core": "^4.12.4",
"@remixicon/react": "^4.6.0",
"uuid": "^11.0.0"
"@remixicon/react": "^4.6.0"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
+1 -2
View File
@@ -16,7 +16,6 @@
import { SignalApi, SignalSubscriber } from '@backstage/plugin-signals-react';
import { JsonObject } from '@backstage/types';
import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';
import { v4 as uuid } from 'uuid';
type Subscription = {
channel: string;
@@ -76,7 +75,7 @@ export class SignalClient implements SignalApi {
channel: string,
onMessage: (message: TMessage) => void,
): SignalSubscriber {
const subscriptionId = uuid();
const subscriptionId = globalThis.crypto.randomUUID();
const exists = [...this.subscriptions.values()].find(
sub => sub.channel === channel,
);
+1 -30
View File
@@ -2623,7 +2623,6 @@ __metadata:
supertest: "npm:^7.0.0"
tar: "npm:^7.5.6"
triple-beam: "npm:^1.4.1"
uuid: "npm:^11.0.0"
wait-for-expect: "npm:^4.0.0"
winston: "npm:^3.2.1"
winston-transport: "npm:^4.5.0"
@@ -2779,7 +2778,6 @@ __metadata:
supertest: "npm:^7.0.0"
testcontainers: "npm:^11.9.0"
text-extensions: "npm:^2.4.0"
uuid: "npm:^11.0.0"
yn: "npm:^4.0.0"
zod: "npm:^3.25.76 || ^4.0.0"
zod-to-json-schema: "npm:^3.25.1"
@@ -4340,7 +4338,6 @@ __metadata:
jose: "npm:^5.0.0"
msw: "npm:^2.0.0"
node-mocks-http: "npm:^1.0.0"
uuid: "npm:^11.0.0"
zod: "npm:^3.25.76 || ^4.0.0"
languageName: unknown
linkType: soft
@@ -4652,7 +4649,6 @@ __metadata:
msw: "npm:^1.0.0"
passport: "npm:^0.7.0"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
zod: "npm:^3.25.76 || ^4.0.0"
zod-validation-error: "npm:^5.0.0"
languageName: unknown
@@ -4681,7 +4677,6 @@ __metadata:
msw: "npm:^1.0.0"
passport: "npm:^0.7.0"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
zod: "npm:^3.25.76 || ^4.0.0"
zod-to-json-schema: "npm:^3.25.1"
zod-validation-error: "npm:^4.0.2"
@@ -4789,7 +4784,6 @@ __metadata:
aws-sdk-client-mock: "npm:^4.0.0"
aws-sdk-client-mock-jest: "npm:^4.0.0"
p-limit: "npm:^3.0.2"
uuid: "npm:^11.0.0"
yaml: "npm:^2.0.0"
languageName: unknown
linkType: soft
@@ -4810,7 +4804,6 @@ __metadata:
"@backstage/plugin-catalog-node": "workspace:^"
"@backstage/plugin-events-node": "workspace:^"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -4829,7 +4822,6 @@ __metadata:
lodash: "npm:^4.17.21"
openapi-merge: "npm:^1.3.2"
openapi3-ts: "npm:^3.1.2"
uuid: "npm:^11.0.0"
yaml: "npm:^2.7.0"
languageName: unknown
linkType: soft
@@ -4851,7 +4843,6 @@ __metadata:
"@backstage/plugin-events-backend-test-utils": "workspace:^"
"@backstage/plugin-events-node": "workspace:^"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -4871,7 +4862,6 @@ __metadata:
"@backstage/plugin-events-backend-test-utils": "workspace:^"
"@backstage/plugin-events-node": "workspace:^"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -4906,7 +4896,6 @@ __metadata:
fs-extra: "npm:^11.2.0"
msw: "npm:^1.0.0"
p-limit: "npm:^3.1.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -4923,7 +4912,6 @@ __metadata:
"@backstage/plugin-catalog-common": "workspace:^"
"@backstage/plugin-catalog-node": "workspace:^"
p-limit: "npm:^3.0.2"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -4974,7 +4962,6 @@ __metadata:
minimatch: "npm:^10.2.1"
msw: "npm:^2.0.0"
octokit: "npm:^3.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5012,7 +4999,6 @@ __metadata:
"@types/lodash": "npm:^4.14.151"
lodash: "npm:^4.17.21"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5036,7 +5022,6 @@ __metadata:
express-promise-router: "npm:^4.1.0"
knex: "npm:^3.0.0"
luxon: "npm:^3.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5055,7 +5040,6 @@ __metadata:
"@types/lodash": "npm:^4.14.151"
ldapts: "npm:^8.0.6"
lodash: "npm:^4.17.21"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5090,7 +5074,6 @@ __metadata:
msw: "npm:^1.0.0"
p-limit: "npm:^3.0.2"
qs: "npm:^6.9.4"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5127,7 +5110,6 @@ __metadata:
"@types/lodash": "npm:^4.14.151"
lodash: "npm:^4.17.21"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -5211,7 +5193,6 @@ __metadata:
p-limit: "npm:^3.0.2"
prom-client: "npm:^15.0.0"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
wait-for-expect: "npm:^4.0.0"
winston: "npm:^3.13.0"
yaml: "npm:^2.0.0"
@@ -6279,7 +6260,6 @@ __metadata:
knex: "npm:^3.0.0"
p-throttle: "npm:^4.1.1"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -6480,7 +6460,6 @@ __metadata:
"@backstage/types": "workspace:^"
cross-fetch: "npm:^4.0.0"
msw: "npm:^1.0.0"
uuid: "npm:^11.0.0"
zod: "npm:^3.25.76 || ^4.0.0"
zod-to-json-schema: "npm:^3.25.1"
languageName: unknown
@@ -6876,7 +6855,6 @@ __metadata:
strip-ansi: "npm:^7.1.0"
supertest: "npm:^7.0.0"
triple-beam: "npm:^1.4.1"
uuid: "npm:^11.0.0"
wait-for-expect: "npm:^4.0.0"
winston: "npm:^3.2.1"
winston-transport: "npm:^4.7.0"
@@ -7165,7 +7143,6 @@ __metadata:
aws4: "npm:^1.12.0"
elastic-builder: "npm:^2.16.0"
lodash: "npm:^4.17.21"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -7196,7 +7173,6 @@ __metadata:
"@backstage/plugin-search-common": "workspace:^"
knex: "npm:^3.0.0"
lodash: "npm:^4.17.21"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -7254,7 +7230,6 @@ __metadata:
lodash: "npm:^4.17.21"
lunr: "npm:^2.3.9"
ndjson: "npm:^2.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -7326,7 +7301,6 @@ __metadata:
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.3.2"
uuid: "npm:^11.0.2"
zod: "npm:^4.0.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
@@ -7403,7 +7377,6 @@ __metadata:
express: "npm:^4.22.0"
express-promise-router: "npm:^4.1.0"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
ws: "npm:^8.18.0"
languageName: unknown
linkType: soft
@@ -7468,7 +7441,6 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.30.2"
uuid: "npm:^11.0.0"
wait-for-expect: "npm:^4.0.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
@@ -10076,7 +10048,6 @@ __metadata:
express: "npm:^4.22.0"
express-promise-router: "npm:^4.1.0"
supertest: "npm:^7.0.0"
uuid: "npm:^11.0.0"
languageName: unknown
linkType: soft
@@ -47882,7 +47853,7 @@ __metadata:
languageName: node
linkType: hard
"uuid@npm:^11.0.0, uuid@npm:^11.0.2, uuid@npm:^11.0.3":
"uuid@npm:^11.0.3":
version: 11.1.0
resolution: "uuid@npm:11.1.0"
bin: