Merge pull request #34035 from backstage/freben/remove-uuid-dependency

Remove uuid dependency in favor of crypto.randomUUID()
This commit is contained in:
Fredrik Adelöw
2026-04-23 14:19:33 +02:00
committed by GitHub
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: