From 310707408cb14773b4cafd5f87a709b0ce9f68c8 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 8 Jul 2026 06:36:49 +0200 Subject: [PATCH 01/31] refactor(wcp): move per-request license refresh into api-event-handler-core MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The WCP license refresh is a per-request RequestInitializer — a transport request-lifecycle concern — but it lived in api-core (domain), forcing api-core to depend on @webiny/event-handler-core. Move WcpLicenseInitializer into @webiny/api-event-handler-core (the shared API request stack) and register it in registerApiRequestStack, so it runs for every flavour (aws + server). api-core keeps the WCP domain (WcpLicenseProvider, WcpContext, loadWcpLicense) and now exports WcpLicenseProvider; its @webiny/event-handler-core dependency drops to devDependencies (tests only). Result: api-core's production layer no longer imports the transport package. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-core/package.json | 2 +- packages/api-core/src/features/wcp/WcpFeature.ts | 5 ++--- packages/api-core/src/index.ts | 2 ++ packages/api-core/tsconfig.build.json | 6 +++--- packages/api-core/tsconfig.json | 6 +++--- packages/api-event-handler-core/package.json | 1 + .../src}/WcpLicenseInitializer.ts | 12 ++++++++---- .../src/registerApiRequestStack.ts | 6 ++++++ packages/api-event-handler-core/tsconfig.build.json | 3 +++ packages/api-event-handler-core/tsconfig.json | 3 +++ yarn.lock | 1 + 11 files changed, 33 insertions(+), 14 deletions(-) rename packages/{api-core/src/features/wcp => api-event-handler-core/src}/WcpLicenseInitializer.ts (58%) diff --git a/packages/api-core/package.json b/packages/api-core/package.json index 79fcdc24927..7085e2ca0f4 100644 --- a/packages/api-core/package.json +++ b/packages/api-core/package.json @@ -19,7 +19,6 @@ "@webiny/api": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/error": "0.0.0", - "@webiny/event-handler-core": "0.0.0", "@webiny/feature": "0.0.0", "@webiny/feature-flags": "0.0.0", "@webiny/handler": "0.0.0", @@ -40,6 +39,7 @@ "devDependencies": { "@types/jsonwebtoken": "^9.0.10", "@webiny/build-tools": "0.0.0", + "@webiny/event-handler-core": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.1.3", diff --git a/packages/api-core/src/features/wcp/WcpFeature.ts b/packages/api-core/src/features/wcp/WcpFeature.ts index 89b7f01ed51..0728f6a530c 100644 --- a/packages/api-core/src/features/wcp/WcpFeature.ts +++ b/packages/api-core/src/features/wcp/WcpFeature.ts @@ -2,7 +2,6 @@ import { createFeature } from "@webiny/feature/api"; import { WcpContextFeature } from "./WcpContext/feature.js"; import { WcpContextWithFeatureFlagsDecorator } from "./WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js"; import { WcpLicenseProvider, WcpLicenseProviderImpl } from "./WcpLicenseProvider.js"; -import { WcpLicenseInitializer } from "./WcpLicenseInitializer.js"; import type { ILicense } from "@webiny/wcp/types.js"; export const WcpFeature = createFeature({ @@ -12,7 +11,7 @@ export const WcpFeature = createFeature({ container.registerInstance(WcpLicenseProvider, provider); WcpContextFeature.register(container, provider); container.registerDecorator(WcpContextWithFeatureFlagsDecorator); - // Refresh the license once per request (before resolvers) via the RequestInitializer hook. - container.register(WcpLicenseInitializer); + // Per-request license refresh (RequestInitializer) is registered by api-event-handler-core's + // registerApiRequestStack, keeping the domain layer free of the transport lifecycle contract. } }); diff --git a/packages/api-core/src/index.ts b/packages/api-core/src/index.ts index 2ea76476d70..7a78c39b80a 100644 --- a/packages/api-core/src/index.ts +++ b/packages/api-core/src/index.ts @@ -3,3 +3,5 @@ export { ApiCoreStorageOperationsFactory, registerApiCoreStorageOperations } from "./features/storageOperations/abstractions.js"; +export { WcpLicenseProvider } from "./features/wcp/WcpLicenseProvider.js"; +export type { IWcpLicenseProvider } from "./features/wcp/WcpLicenseProvider.js"; diff --git a/packages/api-core/tsconfig.build.json b/packages/api-core/tsconfig.build.json index e3aa30dbc54..80f4b7d690d 100644 --- a/packages/api-core/tsconfig.build.json +++ b/packages/api-core/tsconfig.build.json @@ -4,13 +4,13 @@ "references": [ { "path": "../api/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, - { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../feature-flags/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" }, + { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" } ], "compilerOptions": { @@ -24,8 +24,6 @@ "@webiny/api": ["../api/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], - "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], - "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], "@webiny/feature-flags/*": ["../feature-flags/src/*"], @@ -38,6 +36,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"] } diff --git a/packages/api-core/tsconfig.json b/packages/api-core/tsconfig.json index 533b8c479d8..8beda969655 100644 --- a/packages/api-core/tsconfig.json +++ b/packages/api-core/tsconfig.json @@ -4,13 +4,13 @@ "references": [ { "path": "../api" }, { "path": "../error" }, - { "path": "../event-handler-core" }, { "path": "../feature" }, { "path": "../feature-flags" }, { "path": "../handler" }, { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../wcp" }, + { "path": "../event-handler-core" }, { "path": "../handler-aws" } ], "compilerOptions": { @@ -24,8 +24,6 @@ "@webiny/api": ["../api/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], - "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], - "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], "@webiny/feature-flags/*": ["../feature-flags/src/*"], @@ -38,6 +36,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"] } diff --git a/packages/api-event-handler-core/package.json b/packages/api-event-handler-core/package.json index 1921b091f9d..d6b3a040066 100644 --- a/packages/api-event-handler-core/package.json +++ b/packages/api-event-handler-core/package.json @@ -38,6 +38,7 @@ "@webiny/api-websockets": "0.0.0", "@webiny/api-workflows": "0.0.0", "@webiny/background-tasks": "0.0.0", + "@webiny/event-handler-core": "0.0.0", "@webiny/handler": "0.0.0", "@webiny/handler-graphql": "0.0.0", "@webiny/webhooks": "0.0.0" diff --git a/packages/api-core/src/features/wcp/WcpLicenseInitializer.ts b/packages/api-event-handler-core/src/WcpLicenseInitializer.ts similarity index 58% rename from packages/api-core/src/features/wcp/WcpLicenseInitializer.ts rename to packages/api-event-handler-core/src/WcpLicenseInitializer.ts index aec691135fc..16d7da9e8fe 100644 --- a/packages/api-core/src/features/wcp/WcpLicenseInitializer.ts +++ b/packages/api-event-handler-core/src/WcpLicenseInitializer.ts @@ -1,11 +1,15 @@ import { RequestInitializer } from "@webiny/event-handler-core"; -import { WcpLicenseProvider } from "./WcpLicenseProvider.js"; -import type { IWcpLicenseProvider } from "./WcpLicenseProvider.js"; +import { WcpLicenseProvider } from "@webiny/api-core"; +import type { IWcpLicenseProvider } from "@webiny/api-core"; /** * Per-request hook that refreshes the WCP license before the request is dispatched (and before any - * synchronous canUse* check runs). The license is project-level / tenant-agnostic, so this runs - * fine ahead of auth/tenant. See WcpLicenseProvider for why this is per-request rather than once. + * synchronous canUse* check runs). The license is project-level / tenant-agnostic, so this runs fine + * ahead of auth/tenant. + * + * Lives in api-event-handler-core (the shared API request stack) rather than api-core so the domain + * layer stays free of the transport request-lifecycle contract, while the refresh still runs for + * every flavour (aws + server) via registerApiRequestStack. */ class WcpLicenseInitializerImpl implements RequestInitializer.Interface { constructor(private provider: IWcpLicenseProvider) {} diff --git a/packages/api-event-handler-core/src/registerApiRequestStack.ts b/packages/api-event-handler-core/src/registerApiRequestStack.ts index 7e28ef0a922..8a2aac5d0f0 100644 --- a/packages/api-event-handler-core/src/registerApiRequestStack.ts +++ b/packages/api-event-handler-core/src/registerApiRequestStack.ts @@ -2,6 +2,7 @@ import type { Container } from "@webiny/di"; import { registerExtensions } from "@webiny/handler"; import { GraphQLEngineFeature } from "@webiny/handler-graphql"; import { ApiCoreFeature } from "@webiny/api-core"; +import { WcpLicenseInitializer } from "./WcpLicenseInitializer.js"; import { HeadlessCmsFeature } from "@webiny/api-headless-cms"; import { AcoHcmsFeature } from "@webiny/api-headless-cms-aco"; import { HcmsTasksFeature } from "@webiny/api-headless-cms-tasks"; @@ -71,6 +72,11 @@ export async function registerApiRequestStack( // request child container so per-request event handlers are resolvable) ───────── ApiCoreFeature.register(container, { wcpLicense: undefined }); + // Refresh the WCP license once per request (RequestInitializer). Lives here (the shared request + // stack) rather than api-core, so the domain layer has no transport dependency; runs for all + // flavours. Registered after ApiCoreFeature (which provides WcpLicenseProvider). + container.register(WcpLicenseInitializer); + // ── Request-phase storage (variant-specific; must precede HeadlessCmsFeature) ── await config.registerRequestStorage?.(container); diff --git a/packages/api-event-handler-core/tsconfig.build.json b/packages/api-event-handler-core/tsconfig.build.json index 72298725ad5..28f45f17fd5 100644 --- a/packages/api-event-handler-core/tsconfig.build.json +++ b/packages/api-event-handler-core/tsconfig.build.json @@ -22,6 +22,7 @@ { "path": "../api-websockets/tsconfig.build.json" }, { "path": "../api-workflows/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, + { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../webhooks/tsconfig.build.json" } @@ -73,6 +74,8 @@ "@webiny/api-workflows": ["../api-workflows/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], diff --git a/packages/api-event-handler-core/tsconfig.json b/packages/api-event-handler-core/tsconfig.json index d966331fe76..ae9c2d44d3a 100644 --- a/packages/api-event-handler-core/tsconfig.json +++ b/packages/api-event-handler-core/tsconfig.json @@ -22,6 +22,7 @@ { "path": "../api-websockets" }, { "path": "../api-workflows" }, { "path": "../background-tasks" }, + { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../handler-graphql" }, { "path": "../webhooks" } @@ -73,6 +74,8 @@ "@webiny/api-workflows": ["../api-workflows/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], diff --git a/yarn.lock b/yarn.lock index 53d527b1260..53a3907bcd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10640,6 +10640,7 @@ __metadata: "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.1" + "@webiny/event-handler-core": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" "@webiny/webhooks": "npm:0.0.0" From ddd5fb9763637e7ecb817df0548f3b943e1da321 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 8 Jul 2026 18:40:29 +0200 Subject: [PATCH 02/31] feat(api-testing): shared test utilities package; migrate api-aco onto it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every api package's tests copy the same TestAuthenticator/TestAuthorizer mocks, AuthTrigger/ RootTenant decorators, and createIdentity helper (~15 drifting copies). Introduce @webiny/api-testing (deps api-core + event-handler-core) as the single home for these primitives, using the more-evolved parameterized versions (TestIdentity/TestPermissions abstractions). Migrate api-aco as the first consumer: delete its 5 local copies, import from @webiny/api-testing. api-aco tests pass. Note: the base package can't share handler *composition* (feature set differs per package) — only the auth/tenant scaffold primitives. api-core stays on its local copies for now (it sits below this package; consuming it would be a dev-cycle — revisit with the test-tiers split). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../defaultPermissionsMerger.test.ts | 2 +- .../__tests__/utils/useGraphQlHandler.ts | 2 +- .../api-aco/__tests__/utils/useHandler.ts | 6 ++-- packages/api-aco/package.json | 1 + packages/api-aco/tsconfig.build.json | 3 ++ packages/api-aco/tsconfig.json | 3 ++ packages/api-testing/package.json | 33 +++++++++++++++++++ .../src}/handlers/AuthTriggerHandler.ts | 4 +++ .../src}/handlers/RootTenantInitializer.ts | 4 +++ .../utils => api-testing/src}/identity.ts | 4 +++ packages/api-testing/src/index.ts | 5 +++ .../src}/mocks/TestAuthenticator.ts | 6 +++- .../src}/mocks/TestAuthorizer.ts | 10 ++++-- packages/api-testing/tsconfig.build.json | 21 ++++++++++++ packages/api-testing/tsconfig.json | 18 ++++++++++ packages/api-testing/webiny.config.js | 8 +++++ yarn.lock | 14 ++++++++ 17 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 packages/api-testing/package.json rename packages/{api-aco/__tests__/utils => api-testing/src}/handlers/AuthTriggerHandler.ts (87%) rename packages/{api-aco/__tests__/utils => api-testing/src}/handlers/RootTenantInitializer.ts (90%) rename packages/{api-aco/__tests__/utils => api-testing/src}/identity.ts (77%) create mode 100644 packages/api-testing/src/index.ts rename packages/{api-aco/__tests__/utils => api-testing/src}/mocks/TestAuthenticator.ts (78%) rename packages/{api-aco/__tests__/utils => api-testing/src}/mocks/TestAuthorizer.ts (62%) create mode 100644 packages/api-testing/tsconfig.build.json create mode 100644 packages/api-testing/tsconfig.json create mode 100644 packages/api-testing/webiny.config.js diff --git a/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts b/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts index 2fad937a97a..71342ffa966 100644 --- a/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts +++ b/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { createIdentity } from "./utils/identity"; +import { createIdentity } from "@webiny/api-testing"; import { FolderPermission } from "~/flp/flp.types"; import { DefaultPermissionsMerger } from "~/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts index f07040352c3..3f34bd778f8 100644 --- a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts @@ -9,7 +9,7 @@ import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; import type { CmsModel } from "@webiny/api-headless-cms/types"; import { ContextPlugin } from "@webiny/api"; import { AcoFeature } from "~/index"; -import { createIdentity } from "./identity"; +import { createIdentity } from "@webiny/api-testing"; import { createAcoSdk } from "~tests/utils/createAcoSdk.js"; import { diff --git a/packages/api-aco/__tests__/utils/useHandler.ts b/packages/api-aco/__tests__/utils/useHandler.ts index 8c14edf1675..22ba9555fd0 100644 --- a/packages/api-aco/__tests__/utils/useHandler.ts +++ b/packages/api-aco/__tests__/utils/useHandler.ts @@ -14,10 +14,10 @@ import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/type import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import { AcoFeature } from "~/index"; -import { createIdentity } from "./identity"; +import { createIdentity } from "@webiny/api-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; import type { AcoContext } from "~/types"; export interface UseHandlerParams { diff --git a/packages/api-aco/package.json b/packages/api-aco/package.json index 65d445c9a92..c9481f296a9 100644 --- a/packages/api-aco/package.json +++ b/packages/api-aco/package.json @@ -38,6 +38,7 @@ }, "devDependencies": { "@webiny/api-file-manager": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/plugins": "0.0.0", diff --git a/packages/api-aco/tsconfig.build.json b/packages/api-aco/tsconfig.build.json index 6a6dcdc5731..d851b4d25c3 100644 --- a/packages/api-aco/tsconfig.build.json +++ b/packages/api-aco/tsconfig.build.json @@ -15,6 +15,7 @@ { "path": "../utils/tsconfig.build.json" }, { "path": "../validation/tsconfig.build.json" }, { "path": "../api-file-manager/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -52,6 +53,8 @@ "@webiny/validation": ["../validation/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-aco/tsconfig.json b/packages/api-aco/tsconfig.json index 7997507a81a..3f450911d6c 100644 --- a/packages/api-aco/tsconfig.json +++ b/packages/api-aco/tsconfig.json @@ -15,6 +15,7 @@ { "path": "../utils" }, { "path": "../validation" }, { "path": "../api-file-manager" }, + { "path": "../api-testing" }, { "path": "../handler-aws" }, { "path": "../plugins" }, { "path": "../wcp" } @@ -52,6 +53,8 @@ "@webiny/validation": ["../validation/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-testing/package.json b/packages/api-testing/package.json new file mode 100644 index 00000000000..b9077024195 --- /dev/null +++ b/packages/api-testing/package.json @@ -0,0 +1,33 @@ +{ + "name": "@webiny/api-testing", + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./index.js", + "./*": "./*" + }, + "repository": { + "type": "git", + "url": "https://github.com/webiny/webiny-js.git", + "directory": "packages/api-testing" + }, + "description": "Shared test utilities for Webiny API packages (mocks, auth/tenant test decorators, identity helpers).", + "author": "Webiny Ltd.", + "license": "MIT", + "dependencies": { + "@webiny/api-core": "0.0.0", + "@webiny/di": "^1.0.2", + "@webiny/event-handler-core": "0.0.0" + }, + "devDependencies": { + "@webiny/build-tools": "0.0.0", + "rimraf": "^6.1.3", + "typescript": "6.0.3" + }, + "publishConfig": { + "access": "public" + }, + "webiny": { + "publishFrom": "dist" + } +} diff --git a/packages/api-aco/__tests__/utils/handlers/AuthTriggerHandler.ts b/packages/api-testing/src/handlers/AuthTriggerHandler.ts similarity index 87% rename from packages/api-aco/__tests__/utils/handlers/AuthTriggerHandler.ts rename to packages/api-testing/src/handlers/AuthTriggerHandler.ts index 2718dcaf071..de6445408bf 100644 --- a/packages/api-aco/__tests__/utils/handlers/AuthTriggerHandler.ts +++ b/packages/api-testing/src/handlers/AuthTriggerHandler.ts @@ -5,6 +5,10 @@ import { IdentityContext } from "@webiny/api-core/features/security/IdentityCont import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; +/** + * Test-only decorator on the HTTP event handler: authenticates the `authorization` header and sets + * the resulting identity before the request is dispatched (mirrors the prod identity loader). + */ class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { constructor( private authCtx: IAuthenticationContext, diff --git a/packages/api-aco/__tests__/utils/handlers/RootTenantInitializer.ts b/packages/api-testing/src/handlers/RootTenantInitializer.ts similarity index 90% rename from packages/api-aco/__tests__/utils/handlers/RootTenantInitializer.ts rename to packages/api-testing/src/handlers/RootTenantInitializer.ts index 08e140d445f..cdf1318d1b7 100644 --- a/packages/api-aco/__tests__/utils/handlers/RootTenantInitializer.ts +++ b/packages/api-testing/src/handlers/RootTenantInitializer.ts @@ -3,6 +3,10 @@ import type { EventContext, NextFunction } from "@webiny/event-handler-core"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; +/** + * Test-only decorator on the HTTP event handler: sets the "root" tenant before the request is + * dispatched (mirrors the prod tenant loader). + */ class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { constructor( private tenantCtx: ITenantContext, diff --git a/packages/api-aco/__tests__/utils/identity.ts b/packages/api-testing/src/identity.ts similarity index 77% rename from packages/api-aco/__tests__/utils/identity.ts rename to packages/api-testing/src/identity.ts index c043e40e1e1..8ac4c228a35 100644 --- a/packages/api-aco/__tests__/utils/identity.ts +++ b/packages/api-testing/src/identity.ts @@ -4,6 +4,10 @@ import { } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityIdentity } from "@webiny/api-core/types/security.js"; +/** + * Build a test admin identity. Override any field via the partial: + * `createIdentity({ id: "abc", displayName: "Jane" })`. + */ export const createIdentity = (identity: Partial = {}): SecurityIdentity => { return new AuthenticatedIdentity({ id: "12345678", diff --git a/packages/api-testing/src/index.ts b/packages/api-testing/src/index.ts new file mode 100644 index 00000000000..2dd48bd26ef --- /dev/null +++ b/packages/api-testing/src/index.ts @@ -0,0 +1,5 @@ +export { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator.js"; +export { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer.js"; +export { AuthTriggerHandler } from "./handlers/AuthTriggerHandler.js"; +export { RootTenantInitializer } from "./handlers/RootTenantInitializer.js"; +export { createIdentity } from "./identity.js"; diff --git a/packages/api-aco/__tests__/utils/mocks/TestAuthenticator.ts b/packages/api-testing/src/mocks/TestAuthenticator.ts similarity index 78% rename from packages/api-aco/__tests__/utils/mocks/TestAuthenticator.ts rename to packages/api-testing/src/mocks/TestAuthenticator.ts index 55761a76fe2..1eaf061fd64 100644 --- a/packages/api-aco/__tests__/utils/mocks/TestAuthenticator.ts +++ b/packages/api-testing/src/mocks/TestAuthenticator.ts @@ -3,7 +3,11 @@ import { Authenticator } from "@webiny/api-core/features/security/authentication import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -export const TestIdentity = new Abstraction("AcoTestIdentity"); +/** + * The identity a test authenticates as. Register an instance in the (root) container to control + * who the request runs as: `container.registerInstance(TestIdentity, createIdentity({...}))`. + */ +export const TestIdentity = new Abstraction("TestIdentity"); class TestAuthenticatorImpl implements IAuthenticator { constructor(private identity: IdentityData | null) {} diff --git a/packages/api-aco/__tests__/utils/mocks/TestAuthorizer.ts b/packages/api-testing/src/mocks/TestAuthorizer.ts similarity index 62% rename from packages/api-aco/__tests__/utils/mocks/TestAuthorizer.ts rename to packages/api-testing/src/mocks/TestAuthorizer.ts index a598e8210de..def30cf934d 100644 --- a/packages/api-aco/__tests__/utils/mocks/TestAuthorizer.ts +++ b/packages/api-testing/src/mocks/TestAuthorizer.ts @@ -3,7 +3,11 @@ import { Authorizer } from "@webiny/api-core/features/security/authorization/Aut import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -export const TestPermissions = new Abstraction("AcoTestPermissions"); +/** + * The permissions granted to the test identity. Register an instance to control access: + * `container.registerInstance(TestPermissions, [{ name: "*" }])`. + */ +export const TestPermissions = new Abstraction("TestPermissions"); class TestAuthorizerImpl implements IAuthorizer { constructor(private permissions: SecurityPermission[]) {} @@ -15,5 +19,7 @@ class TestAuthorizerImpl implements IAuthorizer { export const TestAuthorizer = Authorizer.createImplementation({ implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] + // `dependencies` typing infers an array-valued abstraction as multiple-injection; TestPermissions + // is a single registered instance (the whole permissions array), so cast past that inference. + dependencies: [TestPermissions] as never }); diff --git a/packages/api-testing/tsconfig.build.json b/packages/api-testing/tsconfig.build.json new file mode 100644 index 00000000000..7b5042be113 --- /dev/null +++ b/packages/api-testing/tsconfig.build.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.build.json", + "include": ["src"], + "references": [ + { "path": "../api-core/tsconfig.build.json" }, + { "path": "../event-handler-core/tsconfig.build.json" } + ], + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "declarationDir": "./dist", + "paths": { + "~/*": ["./src/*"], + "~tests/*": ["./__tests__/*"], + "@webiny/api-core/*": ["../api-core/src/*"], + "@webiny/api-core": ["../api-core/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"] + } + } +} diff --git a/packages/api-testing/tsconfig.json b/packages/api-testing/tsconfig.json new file mode 100644 index 00000000000..efc35feaaf7 --- /dev/null +++ b/packages/api-testing/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "__tests__"], + "references": [{ "path": "../api-core" }, { "path": "../event-handler-core" }], + "compilerOptions": { + "rootDirs": ["./src", "./__tests__"], + "outDir": "./dist", + "declarationDir": "./dist", + "paths": { + "~/*": ["./src/*"], + "~tests/*": ["./__tests__/*"], + "@webiny/api-core/*": ["../api-core/src/*"], + "@webiny/api-core": ["../api-core/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"] + } + } +} diff --git a/packages/api-testing/webiny.config.js b/packages/api-testing/webiny.config.js new file mode 100644 index 00000000000..4f5e3db04b9 --- /dev/null +++ b/packages/api-testing/webiny.config.js @@ -0,0 +1,8 @@ +import { createWatchPackage, createBuildPackage } from "@webiny/build-tools"; + +export default { + commands: { + build: createBuildPackage({ cwd: import.meta.dirname }), + watch: createWatchPackage({ cwd: import.meta.dirname }) + } +}; diff --git a/yarn.lock b/yarn.lock index 53a3907bcd7..ae8a27cec0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10305,6 +10305,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11289,6 +11290,19 @@ __metadata: languageName: unknown linkType: soft +"@webiny/api-testing@npm:0.0.0, @webiny/api-testing@workspace:packages/api-testing": + version: 0.0.0-use.local + resolution: "@webiny/api-testing@workspace:packages/api-testing" + dependencies: + "@webiny/api-core": "npm:0.0.0" + "@webiny/build-tools": "npm:0.0.0" + "@webiny/di": "npm:^1.0.2" + "@webiny/event-handler-core": "npm:0.0.0" + rimraf: "npm:^6.1.3" + typescript: "npm:6.0.3" + languageName: unknown + linkType: soft + "@webiny/api-website-builder-scheduler@npm:0.0.0, @webiny/api-website-builder-scheduler@workspace:packages/api-website-builder-scheduler": version: 0.0.0-use.local resolution: "@webiny/api-website-builder-scheduler@workspace:packages/api-website-builder-scheduler" From e6e38cfd5f54ef01c23900f3f0ae0d716e05d909 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 8 Jul 2026 18:59:26 +0200 Subject: [PATCH 03/31] refactor(api-testing): adopt permissions holder; migrate api-headless-cms/testing onto it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standardize TestPermissions on the `{ list }` holder (from the CMS harness) instead of a bare array + cast — DI then treats it as a single value cleanly, no `as never`. Update api-aco to register `{ list: permissions }`. Migrate @webiny/api-headless-cms/testing (createCmsTestHandler + re-exports) onto @webiny/api-testing; delete its 4 local mock/decorator copies. High-leverage: every package using createCmsTestHandler now gets the shared primitives transitively. Verified via api-aco graphql + context handlers. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../api-aco/__tests__/utils/useHandler.ts | 2 +- packages/api-headless-cms/package.json | 1 + .../src/testing/createCmsTestHandler.ts | 8 ++-- .../testing/handlers/AuthTriggerHandler.ts | 27 -------------- .../testing/handlers/RootTenantInitializer.ts | 37 ------------------- .../api-headless-cms/src/testing/index.ts | 8 ++-- .../src/testing/mocks/TestAuthenticator.ts | 19 ---------- .../src/testing/mocks/TestAuthorizer.ts | 24 ------------ packages/api-headless-cms/tsconfig.build.json | 3 ++ packages/api-headless-cms/tsconfig.json | 3 ++ packages/api-testing/src/index.ts | 1 + .../api-testing/src/mocks/TestAuthorizer.ts | 19 ++++++---- yarn.lock | 1 + 13 files changed, 29 insertions(+), 124 deletions(-) delete mode 100644 packages/api-headless-cms/src/testing/handlers/AuthTriggerHandler.ts delete mode 100644 packages/api-headless-cms/src/testing/handlers/RootTenantInitializer.ts delete mode 100644 packages/api-headless-cms/src/testing/mocks/TestAuthenticator.ts delete mode 100644 packages/api-headless-cms/src/testing/mocks/TestAuthorizer.ts diff --git a/packages/api-aco/__tests__/utils/useHandler.ts b/packages/api-aco/__tests__/utils/useHandler.ts index 22ba9555fd0..d42fb647f50 100644 --- a/packages/api-aco/__tests__/utils/useHandler.ts +++ b/packages/api-aco/__tests__/utils/useHandler.ts @@ -41,7 +41,7 @@ export const useHandler = (params: UseHandlerParams = {}) => { if (!rootContainer) { rootContainer = new Container(); rootContainer.registerInstance(TestIdentity, resolvedIdentity); - rootContainer.registerInstance(TestPermissions, resolvedPermissions); + rootContainer.registerInstance(TestPermissions, { list: resolvedPermissions }); rootContainer.register(TestAuthenticator); rootContainer.register(TestAuthorizer); } diff --git a/packages/api-headless-cms/package.json b/packages/api-headless-cms/package.json index cfc1764a542..574164e8457 100644 --- a/packages/api-headless-cms/package.json +++ b/packages/api-headless-cms/package.json @@ -27,6 +27,7 @@ "@graphql-tools/schema": "^10.0.34", "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/error": "0.0.0", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts b/packages/api-headless-cms/src/testing/createCmsTestHandler.ts index f92acb4313c..feacfd78325 100644 --- a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts +++ b/packages/api-headless-cms/src/testing/createCmsTestHandler.ts @@ -17,10 +17,10 @@ import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types.js"; import { HeadlessCmsFeature } from "~/HeadlessCmsFeature.js"; import type { HeadlessCmsStorageOperations } from "~/types/types.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator.js"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer.js"; -import { AuthTriggerHandler } from "./handlers/AuthTriggerHandler.js"; -import { RootTenantInitializer } from "./handlers/RootTenantInitializer.js"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { processLegacyPlugins } from "./processLegacyPlugins.js"; const DEFAULT_IDENTITY: IdentityData = { diff --git a/packages/api-headless-cms/src/testing/handlers/AuthTriggerHandler.ts b/packages/api-headless-cms/src/testing/handlers/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-headless-cms/src/testing/handlers/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-headless-cms/src/testing/handlers/RootTenantInitializer.ts b/packages/api-headless-cms/src/testing/handlers/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-headless-cms/src/testing/handlers/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-headless-cms/src/testing/index.ts b/packages/api-headless-cms/src/testing/index.ts index b086926080b..daf2e56801f 100644 --- a/packages/api-headless-cms/src/testing/index.ts +++ b/packages/api-headless-cms/src/testing/index.ts @@ -1,7 +1,7 @@ export { createCmsTestHandler } from "./createCmsTestHandler.js"; export type { CmsTestHandlerParams, InvokeParams } from "./createCmsTestHandler.js"; export { processLegacyPlugins } from "./processLegacyPlugins.js"; -export { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator.js"; -export { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer.js"; -export { AuthTriggerHandler } from "./handlers/AuthTriggerHandler.js"; -export { RootTenantInitializer } from "./handlers/RootTenantInitializer.js"; +export { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +export { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +export { AuthTriggerHandler } from "@webiny/api-testing"; +export { RootTenantInitializer } from "@webiny/api-testing"; diff --git a/packages/api-headless-cms/src/testing/mocks/TestAuthenticator.ts b/packages/api-headless-cms/src/testing/mocks/TestAuthenticator.ts deleted file mode 100644 index 32ccd6fcf99..00000000000 --- a/packages/api-headless-cms/src/testing/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("CmsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData | null) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-headless-cms/src/testing/mocks/TestAuthorizer.ts b/packages/api-headless-cms/src/testing/mocks/TestAuthorizer.ts deleted file mode 100644 index 19c34301e82..00000000000 --- a/packages/api-headless-cms/src/testing/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -// Wrapped in a holder so DI treats it as a single value, not a multiple-binding of SecurityPermission. -export interface TestPermissionsHolder { - list: SecurityPermission[]; -} - -export const TestPermissions = new Abstraction("CmsTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: TestPermissionsHolder) {} - - async authorize(): Promise { - return this.permissions.list; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-headless-cms/tsconfig.build.json b/packages/api-headless-cms/tsconfig.build.json index 5bd2fba3bb5..3eb28d3c04c 100644 --- a/packages/api-headless-cms/tsconfig.build.json +++ b/packages/api-headless-cms/tsconfig.build.json @@ -4,6 +4,7 @@ "references": [ { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, @@ -29,6 +30,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms/tsconfig.json b/packages/api-headless-cms/tsconfig.json index bef6693de28..f3d106b8614 100644 --- a/packages/api-headless-cms/tsconfig.json +++ b/packages/api-headless-cms/tsconfig.json @@ -4,6 +4,7 @@ "references": [ { "path": "../api" }, { "path": "../api-core" }, + { "path": "../api-testing" }, { "path": "../error" }, { "path": "../event-handler-core" }, { "path": "../feature" }, @@ -29,6 +30,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-testing/src/index.ts b/packages/api-testing/src/index.ts index 2dd48bd26ef..d87552314e0 100644 --- a/packages/api-testing/src/index.ts +++ b/packages/api-testing/src/index.ts @@ -1,5 +1,6 @@ export { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator.js"; export { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer.js"; +export type { TestPermissionsHolder } from "./mocks/TestAuthorizer.js"; export { AuthTriggerHandler } from "./handlers/AuthTriggerHandler.js"; export { RootTenantInitializer } from "./handlers/RootTenantInitializer.js"; export { createIdentity } from "./identity.js"; diff --git a/packages/api-testing/src/mocks/TestAuthorizer.ts b/packages/api-testing/src/mocks/TestAuthorizer.ts index def30cf934d..93d55c3a121 100644 --- a/packages/api-testing/src/mocks/TestAuthorizer.ts +++ b/packages/api-testing/src/mocks/TestAuthorizer.ts @@ -4,22 +4,25 @@ import type { IAuthorizer } from "@webiny/api-core/features/security/authorizati import type { SecurityPermission } from "@webiny/api-core/types/security.js"; /** - * The permissions granted to the test identity. Register an instance to control access: - * `container.registerInstance(TestPermissions, [{ name: "*" }])`. + * The permissions granted to the test identity, wrapped in a holder so DI treats it as a single + * value (not a multiple-binding of SecurityPermission): + * `container.registerInstance(TestPermissions, { list: [{ name: "*" }] })`. */ -export const TestPermissions = new Abstraction("TestPermissions"); +export interface TestPermissionsHolder { + list: SecurityPermission[]; +} + +export const TestPermissions = new Abstraction("TestPermissions"); class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} + constructor(private permissions: TestPermissionsHolder) {} async authorize(): Promise { - return this.permissions; + return this.permissions.list; } } export const TestAuthorizer = Authorizer.createImplementation({ implementation: TestAuthorizerImpl, - // `dependencies` typing infers an array-valued abstraction as multiple-injection; TestPermissions - // is a single registered instance (the whole permissions array), so cast past that inference. - dependencies: [TestPermissions] as never + dependencies: [TestPermissions] }); diff --git a/yarn.lock b/yarn.lock index ae8a27cec0e..806ef636d56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11080,6 +11080,7 @@ __metadata: "@types/pluralize": "npm:^0.0.33" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db-dynamodb": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" From f5b789fe085faeb293fd1cbc0ecfacc68a387288 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 06:44:22 +0200 Subject: [PATCH 04/31] wip:4 (4t9pt) --- .../utils/mocks/AuthTriggerHandler.ts | 27 -------------- .../utils/mocks/RootTenantInitializer.ts | 37 ------------------- .../utils/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/utils/mocks/TestAuthorizer.ts | 21 ----------- .../__tests__/utils/useGraphQlHandler.ts | 10 ++--- packages/api-file-manager-aco/package.json | 1 + .../api-file-manager-aco/tsconfig.build.json | 3 ++ packages/api-file-manager-aco/tsconfig.json | 3 ++ .../utils/mocks/AuthTriggerHandler.ts | 27 -------------- .../utils/mocks/RootTenantInitializer.ts | 37 ------------------- .../utils/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/utils/mocks/TestAuthorizer.ts | 19 ---------- .../__tests__/utils/useGqlHandler.ts | 10 ++--- packages/api-file-manager/package.json | 1 + packages/api-file-manager/tsconfig.build.json | 3 ++ packages/api-file-manager/tsconfig.json | 3 ++ .../utils/handlers/AuthTriggerHandler.ts | 27 -------------- .../utils/handlers/RootTenantInitializer.ts | 37 ------------------- .../utils/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/utils/mocks/TestAuthorizer.ts | 19 ---------- .../__tests__/utils/useGraphQlHandler.ts | 10 ++--- packages/api-headless-cms-aco/package.json | 1 + .../api-headless-cms-aco/tsconfig.build.json | 3 ++ packages/api-headless-cms-aco/tsconfig.json | 3 ++ .../__tests__/context/useHandler.ts | 6 +-- .../__tests__/graphql/handler.ts | 6 +-- .../__tests__/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/mocks/TestAuthorizer.ts | 19 ---------- packages/api-headless-cms-ddb-es/package.json | 1 + .../tsconfig.build.json | 3 ++ .../api-headless-cms-ddb-es/tsconfig.json | 3 ++ .../__tests__/contentAPI/aco/setup/plugins.ts | 10 ++--- .../handlers/AuthTriggerHandler.ts | 27 -------------- .../handlers/RootTenantInitializer.ts | 37 ------------------- .../testHelpers/mocks/TestAuthenticator.ts | 19 ---------- .../testHelpers/mocks/TestAuthorizer.ts | 34 ----------------- .../testHelpers/useGraphQLHandler.ts | 10 ++--- .../__tests__/testHelpers/useHandler.ts | 10 ++--- .../helpers/mocks/AuthTriggerHandler.ts | 27 -------------- .../helpers/mocks/RootTenantInitializer.ts | 37 ------------------- .../helpers/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/helpers/mocks/TestAuthorizer.ts | 21 ----------- .../__tests__/helpers/useGraphQLHandler.ts | 10 ++--- packages/api-record-locking/package.json | 1 + .../api-record-locking/tsconfig.build.json | 3 ++ packages/api-record-locking/tsconfig.json | 3 ++ .../handler/mocks/AuthTriggerHandler.ts | 27 -------------- .../handler/mocks/RootTenantInitializer.ts | 37 ------------------- .../handler/mocks/TestAuthenticator.ts | 22 ----------- .../__mocks/handler/mocks/TestAuthorizer.ts | 19 ---------- .../__mocks/handler/useGraphQLHandler.ts | 10 ++--- .../__tests__/__mocks/handler/useHandler.ts | 10 ++--- packages/api-scheduler-aws/package.json | 1 + .../api-scheduler-aws/tsconfig.build.json | 3 ++ packages/api-scheduler-aws/tsconfig.json | 3 ++ .../helpers/mocks/AuthTriggerHandler.ts | 27 -------------- .../helpers/mocks/RootTenantInitializer.ts | 37 ------------------- .../helpers/mocks/TestAuthenticator.ts | 22 ----------- .../__tests__/helpers/mocks/TestAuthorizer.ts | 21 ----------- .../__tests__/helpers/useHandler.ts | 10 ++--- packages/api-websockets-aws/package.json | 1 + .../api-websockets-aws/tsconfig.build.json | 3 ++ packages/api-websockets-aws/tsconfig.json | 3 ++ .../helpers/mocks/AuthTriggerHandler.ts | 27 -------------- .../helpers/mocks/RootTenantInitializer.ts | 37 ------------------- .../helpers/mocks/TestAuthenticator.ts | 22 ----------- .../__tests__/helpers/mocks/TestAuthorizer.ts | 19 ---------- .../__tests__/helpers/useGraphQLHandler.ts | 10 ++--- .../__tests__/helpers/useHandler.ts | 10 ++--- packages/api-websockets/package.json | 1 + packages/api-websockets/tsconfig.build.json | 3 ++ packages/api-websockets/tsconfig.json | 3 ++ .../helpers/mocks/AuthTriggerHandler.ts | 29 --------------- .../helpers/mocks/TestAuthenticator.ts | 22 ----------- .../__tests__/helpers/mocks/TestAuthorizer.ts | 21 ----------- .../__tests__/helpers/useGraphQLHandler.ts | 8 ++-- .../__tests__/helpers/useRawHandler.ts | 8 ++-- .../__tests__/helpers/useTaskHandler.ts | 8 ++-- packages/background-tasks/package.json | 1 + packages/background-tasks/tsconfig.build.json | 3 ++ packages/background-tasks/tsconfig.json | 3 ++ .../__tests__/cmsManageRoute.test.ts | 12 +++--- .../__tests__/extensionRegistration.test.ts | 10 ++--- .../utils/handlers/AuthTriggerHandler.ts | 27 -------------- .../utils/handlers/RootTenantInitializer.ts | 37 ------------------- .../utils/mocks/TestAuthenticator.ts | 19 ---------- .../__tests__/utils/mocks/TestAuthorizer.ts | 19 ---------- .../languages/__tests__/utils/useHandler.ts | 10 ++--- packages/languages/package.json | 1 + packages/languages/tsconfig.build.json | 3 ++ packages/languages/tsconfig.json | 3 ++ .../helpers/mocks/AuthTriggerHandler.ts | 27 -------------- .../helpers/mocks/RootTenantInitializer.ts | 37 ------------------- .../helpers/mocks/TestAuthenticator.ts | 22 ----------- .../__tests__/helpers/mocks/TestAuthorizer.ts | 19 ---------- .../__tests__/helpers/useGraphQLHandler.ts | 10 ++--- .../webhooks/__tests__/helpers/useHandler.ts | 10 ++--- packages/webhooks/package.json | 1 + packages/webhooks/tsconfig.build.json | 3 ++ packages/webhooks/tsconfig.json | 3 ++ yarn.lock | 11 ++++++ 101 files changed, 192 insertions(+), 1267 deletions(-) delete mode 100644 packages/api-file-manager-aco/__tests__/utils/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-file-manager-aco/__tests__/utils/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthenticator.ts delete mode 100644 packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthorizer.ts delete mode 100644 packages/api-file-manager/__tests__/utils/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-file-manager/__tests__/utils/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-file-manager/__tests__/utils/mocks/TestAuthenticator.ts delete mode 100644 packages/api-file-manager/__tests__/utils/mocks/TestAuthorizer.ts delete mode 100644 packages/api-headless-cms-aco/__tests__/utils/handlers/AuthTriggerHandler.ts delete mode 100644 packages/api-headless-cms-aco/__tests__/utils/handlers/RootTenantInitializer.ts delete mode 100644 packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthenticator.ts delete mode 100644 packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthorizer.ts delete mode 100644 packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthenticator.ts delete mode 100644 packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthorizer.ts delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/handlers/AuthTriggerHandler.ts delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/handlers/RootTenantInitializer.ts delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthenticator.ts delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthorizer.ts delete mode 100644 packages/api-record-locking/__tests__/helpers/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-record-locking/__tests__/helpers/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-record-locking/__tests__/helpers/mocks/TestAuthenticator.ts delete mode 100644 packages/api-record-locking/__tests__/helpers/mocks/TestAuthorizer.ts delete mode 100644 packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthenticator.ts delete mode 100644 packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthorizer.ts delete mode 100644 packages/api-websockets-aws/__tests__/helpers/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-websockets-aws/__tests__/helpers/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthenticator.ts delete mode 100644 packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthorizer.ts delete mode 100644 packages/api-websockets/__tests__/helpers/mocks/AuthTriggerHandler.ts delete mode 100644 packages/api-websockets/__tests__/helpers/mocks/RootTenantInitializer.ts delete mode 100644 packages/api-websockets/__tests__/helpers/mocks/TestAuthenticator.ts delete mode 100644 packages/api-websockets/__tests__/helpers/mocks/TestAuthorizer.ts delete mode 100644 packages/background-tasks/__tests__/helpers/mocks/AuthTriggerHandler.ts delete mode 100644 packages/background-tasks/__tests__/helpers/mocks/TestAuthenticator.ts delete mode 100644 packages/background-tasks/__tests__/helpers/mocks/TestAuthorizer.ts delete mode 100644 packages/languages/__tests__/utils/handlers/AuthTriggerHandler.ts delete mode 100644 packages/languages/__tests__/utils/handlers/RootTenantInitializer.ts delete mode 100644 packages/languages/__tests__/utils/mocks/TestAuthenticator.ts delete mode 100644 packages/languages/__tests__/utils/mocks/TestAuthorizer.ts delete mode 100644 packages/webhooks/__tests__/helpers/mocks/AuthTriggerHandler.ts delete mode 100644 packages/webhooks/__tests__/helpers/mocks/RootTenantInitializer.ts delete mode 100644 packages/webhooks/__tests__/helpers/mocks/TestAuthenticator.ts delete mode 100644 packages/webhooks/__tests__/helpers/mocks/TestAuthorizer.ts diff --git a/packages/api-file-manager-aco/__tests__/utils/mocks/AuthTriggerHandler.ts b/packages/api-file-manager-aco/__tests__/utils/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-file-manager-aco/__tests__/utils/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-file-manager-aco/__tests__/utils/mocks/RootTenantInitializer.ts b/packages/api-file-manager-aco/__tests__/utils/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-file-manager-aco/__tests__/utils/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthenticator.ts b/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthenticator.ts deleted file mode 100644 index 7e388cebf5c..00000000000 --- a/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; - -export const TestIdentity = new Abstraction("FileManagerAcoTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthorizer.ts b/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthorizer.ts deleted file mode 100644 index 69a9f739fc1..00000000000 --- a/packages/api-file-manager-aco/__tests__/utils/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; - -export const TestPermissions = new Abstraction( - "FileManagerAcoTestPermissions" -); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts index d01c01b6d84..c4ee1180ce6 100644 --- a/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts @@ -12,10 +12,10 @@ import { createAcoSdk } from "../../../api-aco/__tests__/utils/createAcoSdk.js"; import { createFileManagerSdk } from "../../../api-file-manager/__tests__/utils/createFileManagerSdk.js"; import { FileManagerAcoFeature } from "~/index.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -57,7 +57,7 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-file-manager-aco/package.json b/packages/api-file-manager-aco/package.json index 40899cdce0a..c246fd0ea84 100644 --- a/packages/api-file-manager-aco/package.json +++ b/packages/api-file-manager-aco/package.json @@ -31,6 +31,7 @@ "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-file-manager-aco/tsconfig.build.json b/packages/api-file-manager-aco/tsconfig.build.json index f6d2a2769af..965bdd32e07 100644 --- a/packages/api-file-manager-aco/tsconfig.build.json +++ b/packages/api-file-manager-aco/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, @@ -40,6 +41,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-file-manager-aco/tsconfig.json b/packages/api-file-manager-aco/tsconfig.json index f91bb0aa69e..8754b5880b6 100644 --- a/packages/api-file-manager-aco/tsconfig.json +++ b/packages/api-file-manager-aco/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../api" }, { "path": "../api-core" }, { "path": "../api-headless-cms" }, + { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../handler-aws" }, @@ -40,6 +41,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-file-manager/__tests__/utils/mocks/AuthTriggerHandler.ts b/packages/api-file-manager/__tests__/utils/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-file-manager/__tests__/utils/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-file-manager/__tests__/utils/mocks/RootTenantInitializer.ts b/packages/api-file-manager/__tests__/utils/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-file-manager/__tests__/utils/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-file-manager/__tests__/utils/mocks/TestAuthenticator.ts b/packages/api-file-manager/__tests__/utils/mocks/TestAuthenticator.ts deleted file mode 100644 index 600a3e1ea4e..00000000000 --- a/packages/api-file-manager/__tests__/utils/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; - -export const TestIdentity = new Abstraction("FileManagerTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-file-manager/__tests__/utils/mocks/TestAuthorizer.ts b/packages/api-file-manager/__tests__/utils/mocks/TestAuthorizer.ts deleted file mode 100644 index 79b9c582e20..00000000000 --- a/packages/api-file-manager/__tests__/utils/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; - -export const TestPermissions = new Abstraction("FileManagerTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-file-manager/__tests__/utils/useGqlHandler.ts b/packages/api-file-manager/__tests__/utils/useGqlHandler.ts index 533a6f79738..658d2b8ee4e 100644 --- a/packages/api-file-manager/__tests__/utils/useGqlHandler.ts +++ b/packages/api-file-manager/__tests__/utils/useGqlHandler.ts @@ -11,10 +11,10 @@ import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.j import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import { FileManagerAppFeature } from "~/FileManagerAppFeature"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { createFileManagerSdk } from "./createFileManagerSdk"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; @@ -45,7 +45,7 @@ export default (params: HandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-file-manager/package.json b/packages/api-file-manager/package.json index 76da1413711..8481eb2271a 100644 --- a/packages/api-file-manager/package.json +++ b/packages/api-file-manager/package.json @@ -45,6 +45,7 @@ }, "devDependencies": { "@types/object-hash": "^3.0.6", + "@webiny/api-testing": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/project-utils": "0.0.0", "@webiny/utils": "0.0.0", diff --git a/packages/api-file-manager/tsconfig.build.json b/packages/api-file-manager/tsconfig.build.json index 823ab0a8cbe..7e175c9c25b 100644 --- a/packages/api-file-manager/tsconfig.build.json +++ b/packages/api-file-manager/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" } ], @@ -45,6 +46,8 @@ "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-file-manager/tsconfig.json b/packages/api-file-manager/tsconfig.json index 7d178860f10..05a7c8791df 100644 --- a/packages/api-file-manager/tsconfig.json +++ b/packages/api-file-manager/tsconfig.json @@ -13,6 +13,7 @@ { "path": "../handler-graphql" }, { "path": "../plugins" }, { "path": "../wcp" }, + { "path": "../api-testing" }, { "path": "../handler-aws" }, { "path": "../utils" } ], @@ -45,6 +46,8 @@ "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-headless-cms-aco/__tests__/utils/handlers/AuthTriggerHandler.ts b/packages/api-headless-cms-aco/__tests__/utils/handlers/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-headless-cms-aco/__tests__/utils/handlers/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-headless-cms-aco/__tests__/utils/handlers/RootTenantInitializer.ts b/packages/api-headless-cms-aco/__tests__/utils/handlers/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-headless-cms-aco/__tests__/utils/handlers/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthenticator.ts b/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthenticator.ts deleted file mode 100644 index 4e07dc9e704..00000000000 --- a/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; - -export const TestIdentity = new Abstraction("HcmsAcoTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthorizer.ts b/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthorizer.ts deleted file mode 100644 index 6c38dbc87ff..00000000000 --- a/packages/api-headless-cms-aco/__tests__/utils/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; - -export const TestPermissions = new Abstraction("HcmsAcoTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts index 5d7d6fd89bc..74915b634c2 100644 --- a/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts @@ -26,10 +26,10 @@ import { RESTORE_ENTRY } from "~tests/graphql/cms.gql"; import { CREATE_FOLDER, DELETE_FOLDER, GET_FOLDER } from "~tests/graphql/folder.gql"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { RootTenantInitializer } from "./handlers/RootTenantInitializer"; -import { AuthTriggerHandler } from "./handlers/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; export interface UseGQLHandlerParams { @@ -70,7 +70,7 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-headless-cms-aco/package.json b/packages/api-headless-cms-aco/package.json index 66d227f51cd..dfdef971eb3 100644 --- a/packages/api-headless-cms-aco/package.json +++ b/packages/api-headless-cms-aco/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-headless-cms-aco/tsconfig.build.json b/packages/api-headless-cms-aco/tsconfig.build.json index ca5c4859497..f38620d50c1 100644 --- a/packages/api-headless-cms-aco/tsconfig.build.json +++ b/packages/api-headless-cms-aco/tsconfig.build.json @@ -9,6 +9,7 @@ { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -34,6 +35,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-headless-cms-aco/tsconfig.json b/packages/api-headless-cms-aco/tsconfig.json index 97a6bb84f2b..14c5e2fc6d5 100644 --- a/packages/api-headless-cms-aco/tsconfig.json +++ b/packages/api-headless-cms-aco/tsconfig.json @@ -9,6 +9,7 @@ { "path": "../handler" }, { "path": "../handler-graphql" }, { "path": "../api-core" }, + { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../plugins" }, { "path": "../wcp" } @@ -34,6 +35,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts index 4f5a1c42988..5a797d99bfb 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts @@ -23,8 +23,8 @@ import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { Plugin, PluginCollection } from "@webiny/plugins/types"; import type { CmsContext } from "~/types"; -import { TestIdentity, TestAuthenticator } from "~tests/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "~tests/mocks/TestAuthorizer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; import { processLegacyPlugins } from "~tests/helpers/bridgeLegacyPlugins"; export interface CreateHandlerCoreParams { @@ -63,7 +63,7 @@ export const useHandler = (params: CreateHand if (!rootContainer) { rootContainer = new Container(); rootContainer.registerInstance(TestIdentity, resolvedIdentity); - rootContainer.registerInstance(TestPermissions, resolvedPermissions); + rootContainer.registerInstance(TestPermissions, { list: resolvedPermissions }); rootContainer.register(TestAuthenticator); rootContainer.register(TestAuthorizer); } diff --git a/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts b/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts index 06568d04588..fec243ae559 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts @@ -19,8 +19,8 @@ import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/type import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { CmsContext } from "~/types"; import { createIndexConfigurationPlugin } from "~tests/graphql/createIndexConfigurationPlugin"; -import { TestIdentity, TestAuthenticator } from "~tests/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "~tests/mocks/TestAuthorizer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; import { processLegacyPlugins } from "~tests/helpers/bridgeLegacyPlugins"; interface UseHandlerParams { @@ -61,7 +61,7 @@ export const useHandler = (params: UseHandlerParams = {}) => { if (!rootContainer) { rootContainer = new Container(); rootContainer.registerInstance(TestIdentity, defaultIdentity); - rootContainer.registerInstance(TestPermissions, [{ name: "*" }]); + rootContainer.registerInstance(TestPermissions, { list: [{ name: "*" }] }); rootContainer.register(TestAuthenticator); rootContainer.register(TestAuthorizer); } diff --git a/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthenticator.ts b/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthenticator.ts deleted file mode 100644 index cbff8cd7924..00000000000 --- a/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; - -export const TestIdentity = new Abstraction("HcmsDdbEsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthorizer.ts b/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthorizer.ts deleted file mode 100644 index 1b76629ca3c..00000000000 --- a/packages/api-headless-cms-ddb-es/__tests__/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; - -export const TestPermissions = new Abstraction("HcmsDdbEsTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-headless-cms-ddb-es/package.json b/packages/api-headless-cms-ddb-es/package.json index 4b739f92620..670ff1d28bc 100644 --- a/packages/api-headless-cms-ddb-es/package.json +++ b/packages/api-headless-cms-ddb-es/package.json @@ -48,6 +48,7 @@ "@types/jsonpack": "^1.1.6", "@webiny/api-core": "0.0.0", "@webiny/api-dynamodb-to-elasticsearch": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/api-headless-cms-ddb-es/tsconfig.build.json b/packages/api-headless-cms-ddb-es/tsconfig.build.json index f7108bc6a8c..e872b2d0a53 100644 --- a/packages/api-headless-cms-ddb-es/tsconfig.build.json +++ b/packages/api-headless-cms-ddb-es/tsconfig.build.json @@ -15,6 +15,7 @@ { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-dynamodb-to-elasticsearch/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -54,6 +55,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-dynamodb-to-elasticsearch/*": ["../api-dynamodb-to-elasticsearch/src/*"], "@webiny/api-dynamodb-to-elasticsearch": ["../api-dynamodb-to-elasticsearch/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms-ddb-es/tsconfig.json b/packages/api-headless-cms-ddb-es/tsconfig.json index f2de2144be7..0c7dd7d782f 100644 --- a/packages/api-headless-cms-ddb-es/tsconfig.json +++ b/packages/api-headless-cms-ddb-es/tsconfig.json @@ -15,6 +15,7 @@ { "path": "../utils" }, { "path": "../api-core" }, { "path": "../api-dynamodb-to-elasticsearch" }, + { "path": "../api-testing" }, { "path": "../background-tasks" }, { "path": "../event-handler-core" }, { "path": "../handler" }, @@ -54,6 +55,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-dynamodb-to-elasticsearch/*": ["../api-dynamodb-to-elasticsearch/src/*"], "@webiny/api-dynamodb-to-elasticsearch": ["../api-dynamodb-to-elasticsearch/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts b/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts index 89351384d60..221f0529ff8 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts @@ -11,10 +11,10 @@ import type { HeadlessCmsStorageOperations } from "~/types"; import type { PermissionsArg } from "./helpers"; import { createPermissions } from "./helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "~tests/testHelpers/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "~tests/testHelpers/mocks/TestAuthorizer"; -import { RootTenantInitializer } from "~tests/testHelpers/handlers/RootTenantInitializer"; -import { AuthTriggerHandler } from "~tests/testHelpers/handlers/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { CmsEndpointAccessDecorator } from "~tests/testHelpers/handlers/CmsEndpointAccessDecorator"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; @@ -39,7 +39,7 @@ export const createHandlerCore = (params: CreateHandlerCoreParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, identity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(CmsEndpointAccessDecorator); diff --git a/packages/api-headless-cms/__tests__/testHelpers/handlers/AuthTriggerHandler.ts b/packages/api-headless-cms/__tests__/testHelpers/handlers/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/handlers/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-headless-cms/__tests__/testHelpers/handlers/RootTenantInitializer.ts b/packages/api-headless-cms/__tests__/testHelpers/handlers/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/handlers/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthenticator.ts b/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthenticator.ts deleted file mode 100644 index 5906588c75d..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("CmsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthorizer.ts b/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthorizer.ts deleted file mode 100644 index 27fd876d857..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { TestIdentity } from "./TestAuthenticator.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestPermissions = new Abstraction("CmsTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor( - private permissions: SecurityPermission[], - private identity: IdentityData - ) {} - - async authorize(): Promise { - if (this.permissions.length > 0) { - return this.permissions; - } - // For api-key identities with embedded permissions, return those (mirrors apiKeyAuthorization) - if ( - this.identity?.type === "api-key" && - Array.isArray((this.identity as any).permissions) - ) { - return (this.identity as any).permissions; - } - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions, TestIdentity] -}); diff --git a/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts b/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts index 1df1fdbf62a..8d4c72e46b1 100644 --- a/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts +++ b/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import type { HeadlessCmsStorageOperations, ApiEndpoint } from "~/types"; import type { PermissionsArg } from "~tests/testHelpers/helpers"; import { createPermissions } from "~tests/testHelpers/helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "~tests/testHelpers/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "~tests/testHelpers/mocks/TestAuthorizer"; -import { RootTenantInitializer } from "~tests/testHelpers/handlers/RootTenantInitializer"; -import { AuthTriggerHandler } from "~tests/testHelpers/handlers/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { CmsEndpointAccessDecorator } from "~tests/testHelpers/handlers/CmsEndpointAccessDecorator"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; @@ -118,7 +118,7 @@ export const useGraphQLHandler = (params: GraphQLHandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, identity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); // Decorator order (last = outermost = runs first): diff --git a/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts b/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts index 9c67b1de207..f64b26ed303 100644 --- a/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts +++ b/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts @@ -11,10 +11,10 @@ import type { HeadlessCmsStorageOperations } from "~/types"; import type { PermissionsArg } from "~tests/testHelpers/helpers"; import { createPermissions } from "~tests/testHelpers/helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "~tests/testHelpers/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "~tests/testHelpers/mocks/TestAuthorizer"; -import { RootTenantInitializer } from "~tests/testHelpers/handlers/RootTenantInitializer"; -import { AuthTriggerHandler } from "~tests/testHelpers/handlers/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; @@ -59,7 +59,7 @@ export const useHandler = (params: UseHandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, identity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-record-locking/__tests__/helpers/mocks/AuthTriggerHandler.ts b/packages/api-record-locking/__tests__/helpers/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-record-locking/__tests__/helpers/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-record-locking/__tests__/helpers/mocks/RootTenantInitializer.ts b/packages/api-record-locking/__tests__/helpers/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-record-locking/__tests__/helpers/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-record-locking/__tests__/helpers/mocks/TestAuthenticator.ts b/packages/api-record-locking/__tests__/helpers/mocks/TestAuthenticator.ts deleted file mode 100644 index 6ee74a183c0..00000000000 --- a/packages/api-record-locking/__tests__/helpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; - -export const TestIdentity = new Abstraction("RecordLockingTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-record-locking/__tests__/helpers/mocks/TestAuthorizer.ts b/packages/api-record-locking/__tests__/helpers/mocks/TestAuthorizer.ts deleted file mode 100644 index 478903eb58f..00000000000 --- a/packages/api-record-locking/__tests__/helpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; - -export const TestPermissions = new Abstraction( - "RecordLockingTestPermissions" -); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts b/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts index 50713223e2b..f27e6e0055a 100644 --- a/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import { } from "@webiny/api-websockets/exports/api.js"; import { RecordLockingAppFeature } from "~/index"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -89,7 +89,7 @@ export const useGraphQLHandler = (params: GraphQLHandlerParams = {}) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-record-locking/package.json b/packages/api-record-locking/package.json index 32a6399b066..3da2fca03b5 100644 --- a/packages/api-record-locking/package.json +++ b/packages/api-record-locking/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-record-locking/tsconfig.build.json b/packages/api-record-locking/tsconfig.build.json index 44778f95c27..1176ef9476c 100644 --- a/packages/api-record-locking/tsconfig.build.json +++ b/packages/api-record-locking/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } ], @@ -36,6 +37,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-record-locking/tsconfig.json b/packages/api-record-locking/tsconfig.json index 1b2eb23d763..170466b8d20 100644 --- a/packages/api-record-locking/tsconfig.json +++ b/packages/api-record-locking/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../api-core" }, + { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../wcp" } ], @@ -36,6 +37,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/AuthTriggerHandler.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/RootTenantInitializer.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthenticator.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthenticator.ts deleted file mode 100644 index 7e1edfcdaeb..00000000000 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("SchedulerAwsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(token: string): Promise { - if (!token) { - return null; - } - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthorizer.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthorizer.ts deleted file mode 100644 index d2bb5d55197..00000000000 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction("SchedulerAwsTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts index fd1b338af9f..9b78fe864a8 100644 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts +++ b/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import { SchedulerFeature } from "@webiny/api-scheduler"; import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js"; import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { CANCEL_SCHEDULED_ACTION, GET_SCHEDULED_ACTION, @@ -75,7 +75,7 @@ export const useGraphQLHandler = (params: UseGraphQLHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts index eae19262d90..ceb1cc077bb 100644 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts +++ b/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts @@ -9,10 +9,10 @@ import { SchedulerFeature } from "@webiny/api-scheduler"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { buildSchema } from "graphql"; import type { GraphQLSchema } from "graphql"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { SchedulerClient, SchedulerClientConfig @@ -48,7 +48,7 @@ export const useHandler = (params: UseHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-scheduler-aws/package.json b/packages/api-scheduler-aws/package.json index 544d85d62a7..7cc5a7efb93 100644 --- a/packages/api-scheduler-aws/package.json +++ b/packages/api-scheduler-aws/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@webiny/api-core": "0.0.0", "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-aws": "0.0.0", diff --git a/packages/api-scheduler-aws/tsconfig.build.json b/packages/api-scheduler-aws/tsconfig.build.json index 8220012e7aa..8cbd01a0263 100644 --- a/packages/api-scheduler-aws/tsconfig.build.json +++ b/packages/api-scheduler-aws/tsconfig.build.json @@ -9,6 +9,7 @@ { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-aws/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, @@ -37,6 +38,8 @@ "@webiny/error": ["../error/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], "@webiny/event-handler-aws": ["../event-handler-aws/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-scheduler-aws/tsconfig.json b/packages/api-scheduler-aws/tsconfig.json index 0888b836f5c..3825f364f77 100644 --- a/packages/api-scheduler-aws/tsconfig.json +++ b/packages/api-scheduler-aws/tsconfig.json @@ -9,6 +9,7 @@ { "path": "../aws-sdk" }, { "path": "../error" }, { "path": "../utils" }, + { "path": "../api-testing" }, { "path": "../event-handler-aws" }, { "path": "../event-handler-core" }, { "path": "../feature" }, @@ -37,6 +38,8 @@ "@webiny/error": ["../error/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], "@webiny/event-handler-aws": ["../event-handler-aws/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-websockets-aws/__tests__/helpers/mocks/AuthTriggerHandler.ts b/packages/api-websockets-aws/__tests__/helpers/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-websockets-aws/__tests__/helpers/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-websockets-aws/__tests__/helpers/mocks/RootTenantInitializer.ts b/packages/api-websockets-aws/__tests__/helpers/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-websockets-aws/__tests__/helpers/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthenticator.ts b/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthenticator.ts deleted file mode 100644 index 9187d680469..00000000000 --- a/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("WebsocketsAwsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(token: string): Promise { - if (!token) { - return null; - } - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthorizer.ts b/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthorizer.ts deleted file mode 100644 index e5810aa9ef2..00000000000 --- a/packages/api-websockets-aws/__tests__/helpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction( - "WebsocketsAwsTestPermissions" -); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-websockets-aws/__tests__/helpers/useHandler.ts b/packages/api-websockets-aws/__tests__/helpers/useHandler.ts index 8d102931dbc..975a1928ccf 100644 --- a/packages/api-websockets-aws/__tests__/helpers/useHandler.ts +++ b/packages/api-websockets-aws/__tests__/helpers/useHandler.ts @@ -13,10 +13,10 @@ import { WebsocketsFeature } from "@webiny/api-websockets/features/feature.js"; import { WebsocketsGraphQLFactoryFeature } from "@webiny/api-websockets/graphql/feature.js"; import { WebsocketsRouteHandler } from "@webiny/api-websockets/features/Routes/abstractions.js"; import { ConnectionRegistry } from "@webiny/api-websockets/features/ConnectionRegistry/abstractions.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; @@ -50,7 +50,7 @@ export const useHandler = (params?: UseHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-websockets-aws/package.json b/packages/api-websockets-aws/package.json index 257399d9b09..84612b5406a 100644 --- a/packages/api-websockets-aws/package.json +++ b/packages/api-websockets-aws/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@webiny/api-core": "0.0.0", "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-websockets-aws/tsconfig.build.json b/packages/api-websockets-aws/tsconfig.build.json index a4a6f0503dc..788a4bb7099 100644 --- a/packages/api-websockets-aws/tsconfig.build.json +++ b/packages/api-websockets-aws/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, @@ -38,6 +39,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets-aws/tsconfig.json b/packages/api-websockets-aws/tsconfig.json index c5841199a98..edc62011d2e 100644 --- a/packages/api-websockets-aws/tsconfig.json +++ b/packages/api-websockets-aws/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../utils" }, { "path": "../api-core" }, { "path": "../api-headless-cms" }, + { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../handler-db" }, { "path": "../handler-graphql" }, @@ -38,6 +39,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets/__tests__/helpers/mocks/AuthTriggerHandler.ts b/packages/api-websockets/__tests__/helpers/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/api-websockets/__tests__/helpers/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/api-websockets/__tests__/helpers/mocks/RootTenantInitializer.ts b/packages/api-websockets/__tests__/helpers/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/api-websockets/__tests__/helpers/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/api-websockets/__tests__/helpers/mocks/TestAuthenticator.ts b/packages/api-websockets/__tests__/helpers/mocks/TestAuthenticator.ts deleted file mode 100644 index 123fb9c57ae..00000000000 --- a/packages/api-websockets/__tests__/helpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("WebsocketsTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(token: string): Promise { - if (!token) { - return null; - } - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/api-websockets/__tests__/helpers/mocks/TestAuthorizer.ts b/packages/api-websockets/__tests__/helpers/mocks/TestAuthorizer.ts deleted file mode 100644 index 4b1ea39c6a0..00000000000 --- a/packages/api-websockets/__tests__/helpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction("WebsocketsTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts b/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts index 76931f865ba..a7fdb65e499 100644 --- a/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts @@ -13,10 +13,10 @@ import { WebsocketsGraphQLFactoryFeature } from "~/graphql/feature.js"; import { ConnectionRegistry } from "~/features/ConnectionRegistry/abstractions.js"; import { WebsocketsTransport } from "~/transport/index.js"; import { MockWebsocketsTransport } from "~tests/mocks/MockWebsocketsTransport.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import { getIntrospectionQuery } from "graphql"; @@ -76,7 +76,7 @@ export const useGraphQLHandler = (params?: UseGraphQLHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-websockets/__tests__/helpers/useHandler.ts b/packages/api-websockets/__tests__/helpers/useHandler.ts index 71abf4f0274..781ac419c96 100644 --- a/packages/api-websockets/__tests__/helpers/useHandler.ts +++ b/packages/api-websockets/__tests__/helpers/useHandler.ts @@ -15,10 +15,10 @@ import { WebsocketsTransport } from "~/transport/index.js"; import { MockWebsocketsTransport } from "~tests/mocks/MockWebsocketsTransport.js"; import { WebsocketsRouteHandler } from "~/features/Routes/abstractions.js"; import { ConnectionRegistry } from "~/features/ConnectionRegistry/abstractions.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; @@ -52,7 +52,7 @@ export const useHandler = (params?: UseHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/api-websockets/package.json b/packages/api-websockets/package.json index 415ab3fa7d5..9f9401f0bcb 100644 --- a/packages/api-websockets/package.json +++ b/packages/api-websockets/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/api-websockets/tsconfig.build.json b/packages/api-websockets/tsconfig.build.json index 02c1c13be7e..e66c16edf30 100644 --- a/packages/api-websockets/tsconfig.build.json +++ b/packages/api-websockets/tsconfig.build.json @@ -11,6 +11,7 @@ { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -40,6 +41,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets/tsconfig.json b/packages/api-websockets/tsconfig.json index 612be83788e..d4d16c516f8 100644 --- a/packages/api-websockets/tsconfig.json +++ b/packages/api-websockets/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../handler" }, { "path": "../handler-graphql" }, { "path": "../api-headless-cms" }, + { "path": "../api-testing" }, { "path": "../aws-sdk" }, { "path": "../handler-db" }, { "path": "../wcp" } @@ -40,6 +41,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/background-tasks/__tests__/helpers/mocks/AuthTriggerHandler.ts b/packages/background-tasks/__tests__/helpers/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 040b7cb0894..00000000000 --- a/packages/background-tasks/__tests__/helpers/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const authHeader: string = ctx.event?.headers?.authorization ?? ""; - const token = authHeader.startsWith("Bearer ") ? authHeader.slice(7) : authHeader; - const identity = await this.authCtx.authenticate(token); - if (identity) { - this.identityCtx.setIdentity(identity); - } - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/background-tasks/__tests__/helpers/mocks/TestAuthenticator.ts b/packages/background-tasks/__tests__/helpers/mocks/TestAuthenticator.ts deleted file mode 100644 index 3440b384e5a..00000000000 --- a/packages/background-tasks/__tests__/helpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("BackgroundTasksTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(token: string): Promise { - if (!token) { - return null; - } - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/background-tasks/__tests__/helpers/mocks/TestAuthorizer.ts b/packages/background-tasks/__tests__/helpers/mocks/TestAuthorizer.ts deleted file mode 100644 index 4cda462e7bd..00000000000 --- a/packages/background-tasks/__tests__/helpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction( - "BackgroundTasksTestPermissions" -); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts b/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts index 5618896bcd4..eebfd3fd2c5 100644 --- a/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts @@ -14,9 +14,9 @@ import { BackgroundTasksFeature } from "~/api/BackgroundTasksFeature.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -74,7 +74,7 @@ export const useGraphQLHandler = (params?: UseHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/background-tasks/__tests__/helpers/useRawHandler.ts b/packages/background-tasks/__tests__/helpers/useRawHandler.ts index 50b3104f348..2bc66cafa60 100644 --- a/packages/background-tasks/__tests__/helpers/useRawHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useRawHandler.ts @@ -17,9 +17,9 @@ import { TasksCrud } from "~/api/TasksCrud.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -48,7 +48,7 @@ export const useRawHandler = (params?: UseRawHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/background-tasks/__tests__/helpers/useTaskHandler.ts b/packages/background-tasks/__tests__/helpers/useTaskHandler.ts index a742fb9e80d..f3bcae420b7 100644 --- a/packages/background-tasks/__tests__/helpers/useTaskHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useTaskHandler.ts @@ -16,9 +16,9 @@ import { BackgroundTasksFeature } from "~/api/BackgroundTasksFeature.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import { TaskRunner } from "~/api/runner/index.js"; import { TaskEventValidation } from "~/api/runner/TaskEventValidation.js"; @@ -57,7 +57,7 @@ export const useTaskHandler = (params?: UseTaskHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/background-tasks/package.json b/packages/background-tasks/package.json index 65338e33ed0..f5cb94b68e1 100644 --- a/packages/background-tasks/package.json +++ b/packages/background-tasks/package.json @@ -46,6 +46,7 @@ "zod": "4.4.3" }, "devDependencies": { + "@webiny/api-testing": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/background-tasks/tsconfig.build.json b/packages/background-tasks/tsconfig.build.json index 21a84b006ec..9dc57add914 100644 --- a/packages/background-tasks/tsconfig.build.json +++ b/packages/background-tasks/tsconfig.build.json @@ -16,6 +16,7 @@ { "path": "../plugins/tsconfig.build.json" }, { "path": "../sdk/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -55,6 +56,8 @@ "@webiny/sdk": ["../sdk/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], diff --git a/packages/background-tasks/tsconfig.json b/packages/background-tasks/tsconfig.json index 314b5595607..070e8a85126 100644 --- a/packages/background-tasks/tsconfig.json +++ b/packages/background-tasks/tsconfig.json @@ -16,6 +16,7 @@ { "path": "../plugins" }, { "path": "../sdk" }, { "path": "../utils" }, + { "path": "../api-testing" }, { "path": "../aws-sdk" }, { "path": "../handler-aws" }, { "path": "../wcp" } @@ -55,6 +56,8 @@ "@webiny/sdk": ["../sdk/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], diff --git a/packages/languages/__tests__/cmsManageRoute.test.ts b/packages/languages/__tests__/cmsManageRoute.test.ts index 7d7302299d0..c9f359e9d74 100644 --- a/packages/languages/__tests__/cmsManageRoute.test.ts +++ b/packages/languages/__tests__/cmsManageRoute.test.ts @@ -21,10 +21,10 @@ import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js" import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; -import { TestIdentity, TestAuthenticator } from "./utils/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./utils/mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./utils/handlers/AuthTriggerHandler"; -import { RootTenantInitializer } from "./utils/handlers/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { processLegacyPlugins } from "./utils/bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -55,7 +55,7 @@ describe("Languages model via the CMS manage route (createCmsRoute)", () => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); @@ -105,7 +105,7 @@ describe("Languages model via the CMS manage route (createCmsRoute)", () => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/languages/__tests__/extensionRegistration.test.ts b/packages/languages/__tests__/extensionRegistration.test.ts index 0cbeed1988b..36dc73ccb43 100644 --- a/packages/languages/__tests__/extensionRegistration.test.ts +++ b/packages/languages/__tests__/extensionRegistration.test.ts @@ -25,10 +25,10 @@ import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; import { LANGUAGE_MODEL_ID } from "~/shared/constants.js"; -import { TestIdentity, TestAuthenticator } from "./utils/mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./utils/mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./utils/handlers/AuthTriggerHandler"; -import { RootTenantInitializer } from "./utils/handlers/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { processLegacyPlugins } from "./utils/bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -46,7 +46,7 @@ describe("Languages api extension — registered via the app indirection", () => const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/languages/__tests__/utils/handlers/AuthTriggerHandler.ts b/packages/languages/__tests__/utils/handlers/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/languages/__tests__/utils/handlers/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/languages/__tests__/utils/handlers/RootTenantInitializer.ts b/packages/languages/__tests__/utils/handlers/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/languages/__tests__/utils/handlers/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/languages/__tests__/utils/mocks/TestAuthenticator.ts b/packages/languages/__tests__/utils/mocks/TestAuthenticator.ts deleted file mode 100644 index 54f1ff841cc..00000000000 --- a/packages/languages/__tests__/utils/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("LanguagesTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(_token: string): Promise { - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/languages/__tests__/utils/mocks/TestAuthorizer.ts b/packages/languages/__tests__/utils/mocks/TestAuthorizer.ts deleted file mode 100644 index ac433a9f739..00000000000 --- a/packages/languages/__tests__/utils/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction("LanguagesTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/languages/__tests__/utils/useHandler.ts b/packages/languages/__tests__/utils/useHandler.ts index 4ff63216cfb..589266bd0bd 100644 --- a/packages/languages/__tests__/utils/useHandler.ts +++ b/packages/languages/__tests__/utils/useHandler.ts @@ -9,10 +9,10 @@ import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js" import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./handlers/AuthTriggerHandler"; -import { RootTenantInitializer } from "./handlers/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; @@ -34,7 +34,7 @@ export const useHandler = () => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, defaultIdentity); - container.registerInstance(TestPermissions, defaultPermissions); + container.registerInstance(TestPermissions, { list: defaultPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/languages/package.json b/packages/languages/package.json index 2393c2fa12c..0e3c5ee5539 100644 --- a/packages/languages/package.json +++ b/packages/languages/package.json @@ -31,6 +31,7 @@ "react-dom": "18.3.1" }, "devDependencies": { + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/db-dynamodb": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/languages/tsconfig.build.json b/packages/languages/tsconfig.build.json index a5f258c279f..181dbc3f014 100644 --- a/packages/languages/tsconfig.build.json +++ b/packages/languages/tsconfig.build.json @@ -11,6 +11,7 @@ { "path": "../feature/tsconfig.build.json" }, { "path": "../project/tsconfig.build.json" }, { "path": "../project-aws/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -42,6 +43,8 @@ "@webiny/project": ["../project/src"], "@webiny/project-aws/*": ["../project-aws/src/*"], "@webiny/project-aws": ["../project-aws/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/languages/tsconfig.json b/packages/languages/tsconfig.json index faf37f5a4e2..a8e259bbacf 100644 --- a/packages/languages/tsconfig.json +++ b/packages/languages/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../feature" }, { "path": "../project" }, { "path": "../project-aws" }, + { "path": "../api-testing" }, { "path": "../db-dynamodb" }, { "path": "../event-handler-core" }, { "path": "../handler" }, @@ -42,6 +43,8 @@ "@webiny/project": ["../project/src"], "@webiny/project-aws/*": ["../project-aws/src/*"], "@webiny/project-aws": ["../project-aws/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/webhooks/__tests__/helpers/mocks/AuthTriggerHandler.ts b/packages/webhooks/__tests__/helpers/mocks/AuthTriggerHandler.ts deleted file mode 100644 index 2718dcaf071..00000000000 --- a/packages/webhooks/__tests__/helpers/mocks/AuthTriggerHandler.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { IAuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import type { IIdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; - -class AuthTriggerHandlerImpl implements TestHttpEventHandler.Interface { - constructor( - private authCtx: IAuthenticationContext, - private identityCtx: IIdentityContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - const headers = ctx.event?.headers ?? {}; - const token = headers["authorization"] ?? ""; - const identity = await this.authCtx.authenticate(token); - this.identityCtx.setIdentity(identity); - return this.inner.execute(ctx, next); - } -} - -export const AuthTriggerHandler = TestHttpEventHandler.createDecorator({ - decorator: AuthTriggerHandlerImpl, - dependencies: [AuthenticationContext, IdentityContext] -}); diff --git a/packages/webhooks/__tests__/helpers/mocks/RootTenantInitializer.ts b/packages/webhooks/__tests__/helpers/mocks/RootTenantInitializer.ts deleted file mode 100644 index 08e140d445f..00000000000 --- a/packages/webhooks/__tests__/helpers/mocks/RootTenantInitializer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TestHttpEventHandler } from "@webiny/event-handler-core/features/testing"; -import type { EventContext, NextFunction } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; - -class RootTenantInitializerImpl implements TestHttpEventHandler.Interface { - constructor( - private tenantCtx: ITenantContext, - private inner: TestHttpEventHandler.Interface - ) {} - - async execute(ctx: EventContext, next: NextFunction): Promise { - this.tenantCtx.setTenant({ - id: "root", - name: "Root", - description: "", - status: "enabled", - isInstalled: false, - settings: { - name: { full: "Root", slug: "root" }, - social: {}, - favicon: {}, - logo: {} - } as any, - tags: [], - parent: null, - createdOn: new Date().toISOString(), - savedOn: new Date().toISOString() - }); - return this.inner.execute(ctx, next); - } -} - -export const RootTenantInitializer = TestHttpEventHandler.createDecorator({ - decorator: RootTenantInitializerImpl, - dependencies: [TenantContext] -}); diff --git a/packages/webhooks/__tests__/helpers/mocks/TestAuthenticator.ts b/packages/webhooks/__tests__/helpers/mocks/TestAuthenticator.ts deleted file mode 100644 index e12a30da1f5..00000000000 --- a/packages/webhooks/__tests__/helpers/mocks/TestAuthenticator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IAuthenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export const TestIdentity = new Abstraction("WebhooksTestIdentity"); - -class TestAuthenticatorImpl implements IAuthenticator { - constructor(private identity: IdentityData) {} - - async authenticate(token: string): Promise { - if (!token) { - return null; - } - return this.identity; - } -} - -export const TestAuthenticator = Authenticator.createImplementation({ - implementation: TestAuthenticatorImpl, - dependencies: [TestIdentity] -}); diff --git a/packages/webhooks/__tests__/helpers/mocks/TestAuthorizer.ts b/packages/webhooks/__tests__/helpers/mocks/TestAuthorizer.ts deleted file mode 100644 index 6c85d63618f..00000000000 --- a/packages/webhooks/__tests__/helpers/mocks/TestAuthorizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Abstraction } from "@webiny/di"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; - -export const TestPermissions = new Abstraction("WebhooksTestPermissions"); - -class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: SecurityPermission[]) {} - - async authorize(): Promise { - return this.permissions; - } -} - -export const TestAuthorizer = Authorizer.createImplementation({ - implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] -}); diff --git a/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts b/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts index a9f7b1dbea6..abdfb5c94c6 100644 --- a/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts @@ -11,10 +11,10 @@ import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { Extension } from "~/api/Extension.js"; import { NoopTaskServiceFeature, noopTaskService } from "./NoopTaskService.js"; import { TestWebhookProviderFeature } from "./TestWebhookProvider.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; @@ -54,7 +54,7 @@ export const useGraphQLHandler = (params?: UseGraphQLHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/webhooks/__tests__/helpers/useHandler.ts b/packages/webhooks/__tests__/helpers/useHandler.ts index 0bed8cba2bd..fe4721dd35b 100644 --- a/packages/webhooks/__tests__/helpers/useHandler.ts +++ b/packages/webhooks/__tests__/helpers/useHandler.ts @@ -12,10 +12,10 @@ import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { Extension } from "~/api/Extension.js"; import { NoopTaskServiceFeature, noopTaskService } from "./NoopTaskService.js"; import { TestWebhookProviderFeature } from "./TestWebhookProvider.js"; -import { TestIdentity, TestAuthenticator } from "./mocks/TestAuthenticator"; -import { TestPermissions, TestAuthorizer } from "./mocks/TestAuthorizer"; -import { AuthTriggerHandler } from "./mocks/AuthTriggerHandler"; -import { RootTenantInitializer } from "./mocks/RootTenantInitializer"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { AuthTriggerHandler } from "@webiny/api-testing"; +import { RootTenantInitializer } from "@webiny/api-testing"; import { BuildParam } from "@webiny/api-core/features/buildParams/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; @@ -61,7 +61,7 @@ export const useHandler = (params?: UseHandlerParams) => { const handler = createTestHttpHandler({ root: container => { container.registerInstance(TestIdentity, resolvedIdentity); - container.registerInstance(TestPermissions, resolvedPermissions); + container.registerInstance(TestPermissions, { list: resolvedPermissions }); container.register(TestAuthenticator); container.register(TestAuthorizer); container.registerDecorator(AuthTriggerHandler); diff --git a/packages/webhooks/package.json b/packages/webhooks/package.json index 6b410449fe8..2c531bdb72a 100644 --- a/packages/webhooks/package.json +++ b/packages/webhooks/package.json @@ -41,6 +41,7 @@ }, "devDependencies": { "@webiny/api": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/webhooks/tsconfig.build.json b/packages/webhooks/tsconfig.build.json index 633e3f3fcff..592662c374b 100644 --- a/packages/webhooks/tsconfig.build.json +++ b/packages/webhooks/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../sdk/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -46,6 +47,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api/*": ["../api/src/*"], "@webiny/api": ["../api/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/webhooks/tsconfig.json b/packages/webhooks/tsconfig.json index 261ec27816c..c83b65ed0e4 100644 --- a/packages/webhooks/tsconfig.json +++ b/packages/webhooks/tsconfig.json @@ -13,6 +13,7 @@ { "path": "../sdk" }, { "path": "../utils" }, { "path": "../api" }, + { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../wcp" } @@ -46,6 +47,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api/*": ["../api/src/*"], "@webiny/api": ["../api/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/yarn.lock b/yarn.lock index 806ef636d56..99bfefcfac6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10706,6 +10706,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/error": "npm:0.0.0" @@ -10788,6 +10789,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -10821,6 +10823,7 @@ __metadata: "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-core": "npm:0.0.0" @@ -10873,6 +10876,7 @@ __metadata: "@webiny/api-elasticsearch-tasks": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db": "npm:0.0.0" @@ -11171,6 +11175,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11197,6 +11202,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-scheduler": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11386,6 +11392,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11471,6 +11478,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -12314,6 +12322,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" @@ -12806,6 +12815,7 @@ __metadata: "@webiny/admin-ui": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/app-headless-cms": "npm:0.0.0" @@ -13485,6 +13495,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" From 32f1c5be4bf5f523e9d4465504788b79d1df0640 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 07:00:21 +0200 Subject: [PATCH 05/31] wip:6 (wf197) --- .../api-testing/src/mocks/TestAuthorizer.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/api-testing/src/mocks/TestAuthorizer.ts b/packages/api-testing/src/mocks/TestAuthorizer.ts index 93d55c3a121..f93d8535418 100644 --- a/packages/api-testing/src/mocks/TestAuthorizer.ts +++ b/packages/api-testing/src/mocks/TestAuthorizer.ts @@ -2,6 +2,8 @@ import { Abstraction } from "@webiny/di"; import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; import type { IAuthorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; +import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; +import { TestIdentity } from "./TestAuthenticator.js"; /** * The permissions granted to the test identity, wrapped in a holder so DI treats it as a single @@ -15,14 +17,27 @@ export interface TestPermissionsHolder { export const TestPermissions = new Abstraction("TestPermissions"); class TestAuthorizerImpl implements IAuthorizer { - constructor(private permissions: TestPermissionsHolder) {} + constructor( + private permissions: TestPermissionsHolder, + private identity: IdentityData | null + ) {} async authorize(): Promise { + if (this.permissions.list.length > 0) { + return this.permissions.list; + } + // For api-key identities with embedded permissions, return those (mirrors apiKeyAuthorization). + if ( + this.identity?.type === "api-key" && + Array.isArray((this.identity as { permissions?: unknown }).permissions) + ) { + return (this.identity as unknown as { permissions: SecurityPermission[] }).permissions; + } return this.permissions.list; } } export const TestAuthorizer = Authorizer.createImplementation({ implementation: TestAuthorizerImpl, - dependencies: [TestPermissions] + dependencies: [TestPermissions, TestIdentity] }); From a534f79f513ca216f4fd7ce1bebbaf4155cdb284 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 07:03:45 +0200 Subject: [PATCH 06/31] chore: sync yarn.lock Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- yarn.lock | 225 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 170 insertions(+), 55 deletions(-) diff --git a/yarn.lock b/yarn.lock index 99bfefcfac6..9edef9a3735 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2508,13 +2508,13 @@ __metadata: languageName: node linkType: hard -"@iconify/json@npm:^2.2.495": - version: 2.2.495 - resolution: "@iconify/json@npm:2.2.495" +"@iconify/json@npm:^2.2.496": + version: 2.2.496 + resolution: "@iconify/json@npm:2.2.496" dependencies: "@iconify/types": "npm:*" pathe: "npm:^2.0.3" - checksum: 10/eeb5ce14ee014c3649aac7a449ec59aacf4deb6d27c6eaa8876aae4dde4d1888318eec4b4c1a587fc072f6a4a8d8f8c4ac7094ecd8aaaf2968b5fa6fbbcd1c65 + checksum: 10/cc4f2591fc755011786a838da26bdad860d178b2cb12d83dea85390c29f2cb79067c9ebf4419baad69e524645301ffaa39ad84468798fd2c4780b7f002008bff languageName: node linkType: hard @@ -7798,6 +7798,13 @@ __metadata: languageName: node linkType: hard +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10/aac89581652ac85debe7c5303451c2ebf8bf25ca25db680e4b9b73168f6940616d9a4bbe3348981827b1159b14e2f2e6af4b7bd5735cac898c12d5c51909c102 + languageName: node + linkType: hard + "@sigstore/bundle@npm:^4.0.0": version: 4.0.0 resolution: "@sigstore/bundle@npm:4.0.0" @@ -7900,6 +7907,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10/16551c787f5328c8ef05fd9831ade64369ccc992df78deb635ec6c44af217d2f1b43f8728c348cdc4e00585ff2fad6e00d8155199cbf6b154acc45fe65cbf0aa + languageName: node + linkType: hard + "@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -10072,7 +10086,7 @@ __metadata: "@types/yargs": "npm:^17.0.35" "@webiny/stdlib": "npm:^0.0.8" chalk: "npm:^5.6.2" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" fs-extra: "npm:^11.3.6" listr2: "npm:^10.2.2" load-json-file: "npm:^7.0.1" @@ -10113,7 +10127,7 @@ __metadata: pino: "npm:^10.3.1" rimraf: "npm:^6.1.3" ts-morph: "npm:^28.0.0" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" yargs: "npm:^18.0.0" languageName: unknown @@ -10138,7 +10152,7 @@ __metadata: fs-extra: "npm:^11.3.6" get-yarn-workspaces: "npm:1.0.2" load-json-file: "npm:^7.0.1" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" write-json-file: "npm:^7.0.0" bin: prepublish-only: ./src/index.js @@ -10152,11 +10166,11 @@ __metadata: "@octokit/rest": "npm:^22.0.1" "@types/yargs": "npm:^17.0.35" chalk: "npm:^5.6.2" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" load-json-file: "npm:^7.0.1" p-retry: "npm:^8.0.0" semver: "npm:^7.8.5" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" vitest: "npm:^4.1.9" write-json-file: "npm:^7.0.0" yargs: "npm:^18.0.0" @@ -10217,7 +10231,7 @@ __metadata: tailwind-merge: "npm:^3.6.0" tailwindcss: "npm:^4.3.2" tw-animate-css: "npm:^1.4.0" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" languageName: unknown @@ -10539,7 +10553,7 @@ __metadata: "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" languageName: unknown @@ -10558,7 +10572,7 @@ __metadata: "@webiny/api-websockets-ddb": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" @@ -10578,7 +10592,7 @@ __metadata: "@webiny/api-headless-cms-ddb": "npm:0.0.0" "@webiny/api-websockets-ddb": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" @@ -10601,7 +10615,7 @@ __metadata: "@webiny/background-tasks-aws": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/cognito": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-aws": "npm:0.0.0" "@webiny/event-handler-core": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" @@ -10640,7 +10654,7 @@ __metadata: "@webiny/api-workflows": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-core": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" @@ -10664,7 +10678,7 @@ __metadata: "@webiny/api-headless-cms-sql": "npm:0.0.0" "@webiny/api-websockets-sql": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/handler": "npm:0.0.0" "@webiny/self-hosted-auth": "npm:0.0.0" "@webiny/self-hosted-auth-sql": "npm:0.0.0" @@ -10685,7 +10699,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-event-handler-core": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-core": "npm:0.0.0" "@webiny/event-handler-server": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" @@ -11188,7 +11202,7 @@ __metadata: "@webiny/wcp": "npm:0.0.0" graphql: "npm:^16.14.2" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" languageName: unknown @@ -11407,7 +11421,7 @@ __metadata: "@webiny/wcp": "npm:0.0.0" graphql: "npm:^16.14.2" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" zod: "npm:4.4.3" @@ -11493,7 +11507,7 @@ __metadata: "@webiny/wcp": "npm:0.0.0" graphql: "npm:^16.14.2" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" languageName: unknown @@ -11517,7 +11531,7 @@ __metadata: "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" graphql: "npm:^16.14.2" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" zod: "npm:4.4.3" @@ -11602,7 +11616,7 @@ __metadata: "@emotion/styled": "npm:11.14.1" "@fortawesome/fontawesome-svg-core": "npm:^7.3.0" "@fortawesome/react-fontawesome": "npm:^3.3.1" - "@iconify/json": "npm:^2.2.495" + "@iconify/json": "npm:^2.2.496" "@lexical/utils": "npm:^0.46.0" "@testing-library/react": "npm:^16.3.2" "@types/bytes": "npm:^3.1.5" @@ -11686,7 +11700,7 @@ __metadata: "@webiny/react-composition": "npm:0.0.0" "@webiny/react-properties": "npm:0.0.0" date-fns: "npm:^4.4.0" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" lodash: "npm:^4.18.1" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" @@ -12100,7 +12114,7 @@ __metadata: "@webiny/website-builder-sdk": "npm:0.0.0" classnames: "npm:^2.5.1" deep-equal: "npm:^2.2.3" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" graphql: "npm:^16.14.2" is-hotkey: "npm:^0.2.0" lodash: "npm:^4.18.1" @@ -12198,7 +12212,7 @@ __metadata: react-dom: "npm:18.3.1" rimraf: "npm:^6.1.3" ts-invariant: "npm:^0.10.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" warning: "npm:^4.0.3" @@ -12350,7 +12364,7 @@ __metadata: react: "npm:18.3.1" react-dom: "npm:18.3.1" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" zod: "npm:4.4.3" @@ -12401,14 +12415,13 @@ __metadata: dependencies: "@webiny/build-tools": "npm:0.0.0" "@webiny/cli-core": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/project": "npm:0.0.0" "@webiny/project-aws": "npm:0.0.0" "@webiny/pulumi-sdk": "npm:0.0.0" "@webiny/system-requirements": "npm:0.0.0" "@webiny/telemetry": "npm:0.0.0" chalk: "npm:^5.6.2" - execa: "npm:^5.1.1" open: "npm:^11.0.0" ora: "npm:9.4.1" tsx: "npm:4.23.0" @@ -12430,7 +12443,7 @@ __metadata: "@webiny/telemetry": "npm:0.0.0" chalk: "npm:^5.6.2" ci-info: "npm:^4.4.0" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" fast-glob: "npm:^3.3.3" find-up: "npm:^8.0.0" get-yarn-workspaces: "npm:1.0.2" @@ -12443,7 +12456,7 @@ __metadata: pino-pretty: "npm:^13.1.3" rimraf: "npm:^6.1.3" semver: "npm:^7.8.5" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" write-json-file: "npm:^7.0.0" yargs: "npm:^18.0.0" @@ -12457,7 +12470,7 @@ __metadata: dependencies: "@webiny/build-tools": "npm:0.0.0" "@webiny/cli-core": "npm:0.0.0" - "@webiny/di": "npm:^1.0.1" + "@webiny/di": "npm:^1.0.2" "@webiny/project": "npm:0.0.0" "@webiny/project-server": "npm:0.0.0" chalk: "npm:^5.6.2" @@ -12506,7 +12519,7 @@ __metadata: dependencies: "@webiny/build-tools": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" languageName: unknown @@ -12563,12 +12576,12 @@ __metadata: "@webiny/build-tools": "npm:0.0.0" "@webiny/feature": "npm:0.0.0" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" languageName: unknown linkType: soft -"@webiny/di@npm:^1.0.1, @webiny/di@npm:^1.0.2": +"@webiny/di@npm:^1.0.2": version: 1.0.2 resolution: "@webiny/di@npm:1.0.2" dependencies: @@ -12946,7 +12959,7 @@ __metadata: "@types/lodash": "npm:^4.17.24" "@types/ncp": "npm:^2.0.8" "@webiny/build-tools": "npm:0.0.0" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" front-matter: "npm:^4.0.2" tsx: "npm:4.23.0" typescript: "npm:6.0.3" @@ -13170,7 +13183,7 @@ __metadata: debounce: "npm:^3.0.0" deepmerge: "npm:^4.3.1" dotenv: "npm:^17.4.2" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" exit-hook: "npm:^5.1.0" fast-glob: "npm:^3.3.3" find-up: "npm:^8.0.0" @@ -13191,7 +13204,7 @@ __metadata: serialize-error: "npm:^13.0.1" ts-morph: "npm:^28.0.0" tsx: "npm:4.23.0" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" write-json-file: "npm:^7.0.0" zod: "npm:4.4.3" @@ -13207,7 +13220,7 @@ __metadata: "@types/lodash": "npm:^4.17.24" "@webiny/build-tools": "npm:0.0.0" decompress: "npm:^4.2.1" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" find-up: "npm:^8.0.0" fs-extra: "npm:^11.3.6" load-json-file: "npm:^7.0.1" @@ -13215,7 +13228,7 @@ __metadata: rimraf: "npm:^6.1.3" semver: "npm:^7.8.5" tar: "npm:^7.5.19" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" languageName: unknown linkType: soft @@ -13368,7 +13381,7 @@ __metadata: dependencies: chalk: "npm:^5.6.2" cli-table3: "npm:^0.6.5" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" semver: "npm:^7.8.5" languageName: unknown linkType: soft @@ -13534,7 +13547,7 @@ __metadata: postcss-import: "npm:^16.1.1" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" - webpack: "npm:^5.108.3" + webpack: "npm:^5.108.4" peerDependencies: next: ">=15" languageName: unknown @@ -13944,16 +13957,16 @@ __metadata: languageName: node linkType: hard -"amazon-cognito-identity-js@npm:^6.3.19": - version: 6.3.19 - resolution: "amazon-cognito-identity-js@npm:6.3.19" +"amazon-cognito-identity-js@npm:^6.3.20": + version: 6.3.20 + resolution: "amazon-cognito-identity-js@npm:6.3.20" dependencies: "@aws-crypto/sha256-js": "npm:1.2.2" buffer: "npm:4.9.2" fast-base64-decode: "npm:^1.0.0" isomorphic-unfetch: "npm:^3.0.0" js-cookie: "npm:^3.0.7" - checksum: 10/c57c9a55e24dd5f1533216783cbe869db8f8615bd1479e53ed3fc89e1d9c55808b0f85e48804ac37245124c025c0b0eb7940cc954ac072ba122ffc1639935c44 + checksum: 10/929823b2bad65c579a4f28f1d9af1642d5eb6639eb18dec0dfc029958132f40f430b12bd77124d7d5a89e5e8abad94d1d7b1ae008e49fed030a8447d91a76a4e languageName: node linkType: hard @@ -15853,7 +15866,7 @@ __metadata: "@webiny/system-requirements": "npm:0.0.0" "@webiny/telemetry": "npm:0.0.0" chalk: "npm:^5.6.2" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" find-up: "npm:^8.0.0" fs-extra: "npm:^11.3.6" inquirer: "npm:^14.0.2" @@ -15863,7 +15876,7 @@ __metadata: ora: "npm:9.4.1" os: "npm:0.1.2" rimraf: "npm:^6.1.3" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" validate-npm-package-name: "npm:^8.0.0" vitest: "npm:^4.1.9" write-json-file: "npm:^7.0.0" @@ -16076,7 +16089,7 @@ __metadata: "@webiny/build-tools": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" - amazon-cognito-identity-js: "npm:^6.3.19" + amazon-cognito-identity-js: "npm:^6.3.20" cypress: "npm:^15.18.0" cypress-image-snapshot: "npm:^4.0.1" cypress-mailosaur: "npm:^5.0.0" @@ -17371,7 +17384,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.1.0, execa@npm:^5.1.1": +"execa@npm:^5.1.0": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -17388,6 +17401,26 @@ __metadata: languageName: node linkType: hard +"execa@npm:^9.6.1": + version: 9.6.1 + resolution: "execa@npm:9.6.1" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.1" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.2.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.1.1" + checksum: 10/d0f7a2185152379f8772f6d780b188f2728a95b9a68d1a897f58805d7ba6bd55eaa5e128cb66a274251a6b5e4d9388332b1417bd7d46c25e020e4e55725cf79e + languageName: node + linkType: hard + "executable@npm:^4.1.1": version: 4.1.1 resolution: "executable@npm:4.1.1" @@ -17773,6 +17806,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10/9822d13630bee8e6a9f2da866713adf13854b07e0bfde042defa8bba32d47a1c0b2afa627ce73837c674cf9a5e3edce7e879ea72cb9ea7960b2390432d8e1167 + languageName: node + linkType: hard + "file-type@npm:^3.8.0": version: 3.9.0 resolution: "file-type@npm:3.9.0" @@ -18249,6 +18291,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10/ce56e6db6bcd29ca9027b0546af035c3e93dcd154ca456b54c298901eb0e5b2ce799c5d727341a100c99e14c523f267f1205f46f153f7b75b1f4da6d98a21c5e + languageName: node + linkType: hard + "get-tsconfig@npm:^4.14.0": version: 4.14.0 resolution: "get-tsconfig@npm:4.14.0" @@ -18853,6 +18905,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^8.0.1": + version: 8.0.1 + resolution: "human-signals@npm:8.0.1" + checksum: 10/903389a018b16f330c5e0f6e8b76d592c79552152ea892f249e5290e71c790f5722dc9b740fedd4bdef30566754a69012aaed97a6a528da0d417fad990a6f515 + languageName: node + linkType: hard + "humanize-duration@npm:3.34.0": version: 3.34.0 resolution: "humanize-duration@npm:3.34.0" @@ -19466,6 +19525,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10/cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23 + languageName: node + linkType: hard + "is-string@npm:^1.0.7, is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -21895,6 +21961,16 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10/1a1b50aba6e6af7fd34a860ba2e252e245c4a59b316571a990356417c0cdf0414cabf735f7f52d9c330899cb56f0ab804a8e21fb12a66d53d7843e39ada4a3b6 + languageName: node + linkType: hard + "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -22749,6 +22825,13 @@ __metadata: languageName: node linkType: hard +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10/673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7 + languageName: node + linkType: hard + "parse5-htmlparser2-tree-adapter@npm:^7.1.0": version: 7.1.0 resolution: "parse5-htmlparser2-tree-adapter@npm:7.1.0" @@ -22852,6 +22935,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -23367,6 +23457,15 @@ __metadata: languageName: node linkType: hard +"pretty-ms@npm:^9.2.0": + version: 9.3.0 + resolution: "pretty-ms@npm:9.3.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10/beb4e04dc17071885b827e3f33d36be279791f2f36a8c29a45c77e59979dad79a5d7e5211922c72a3f6f109bb64a707d70fcdba6746e077122afcd88ce202e98 + languageName: node + linkType: hard + "prismjs@npm:^1.30.0": version: 1.30.0 resolution: "prismjs@npm:1.30.0" @@ -24533,7 +24632,7 @@ __metadata: chalk: "npm:^5.6.2" cross-env: "npm:^10.1.0" deepmerge: "npm:^4.3.1" - execa: "npm:^5.1.1" + execa: "npm:^9.6.1" fast-glob: "npm:^3.3.3" fs-extra: "npm:^11.3.6" fsevents: "npm:^2.3.3" @@ -24557,7 +24656,7 @@ __metadata: semver: "npm:^7.8.5" ts-expect: "npm:^1.3.0" tsx: "npm:4.23.0" - type-fest: "npm:^5.7.0" + type-fest: "npm:^5.8.0" typescript: "npm:6.0.3" validator: "npm:^13.15.35" verdaccio: "npm:^6.7.4" @@ -26155,6 +26254,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10/b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f + languageName: node + linkType: hard + "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -26994,6 +27100,15 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^5.8.0": + version: 5.8.0 + resolution: "type-fest@npm:5.8.0" + dependencies: + tagged-tag: "npm:^1.0.0" + checksum: 10/4dbe4c78ac6933d3d165b01f9d552991a84d63e5352110e01bebb5c46499fb1f44d199fc88835b18ee5662ee44c73926621f59525e46f7faa031086ac00b2686 + languageName: node + linkType: hard + "type-is@npm:^2.0.1, type-is@npm:^2.1.0": version: 2.1.0 resolution: "type-is@npm:2.1.0" @@ -27777,9 +27892,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.108.3": - version: 5.108.3 - resolution: "webpack@npm:5.108.3" +"webpack@npm:^5.108.4": + version: 5.108.4 + resolution: "webpack@npm:5.108.4" dependencies: "@types/estree": "npm:^1.0.8" "@types/json-schema": "npm:^7.0.15" @@ -27808,7 +27923,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 10/1333c3cf78c9cc2d99c1b8d4ac1415f8303022af1e46508fa942d59757fc4b30e4f96cdd60a803bbd84c295486c7ee5554e6ec4a42b8cf39e8372b2a94d50423 + checksum: 10/f93cbd33e76a0ba8b708600ca0be66f172dda8f3eff5d201e4a1021af38a5c5d6b57a5d7eaf9a525fbd383907a05d92c2a04b21839e509a03bcbd61f13fa6093 languageName: node linkType: hard From 9766e8e7e3046e63811d1e2da45905c784e0f7ed Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 07:25:38 +0200 Subject: [PATCH 07/31] wip:8 (pxqw0) --- packages/api-core/src/index.ts | 1 - packages/api-event-handler-core/src/WcpLicenseInitializer.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/api-core/src/index.ts b/packages/api-core/src/index.ts index 7a78c39b80a..3d5239779a1 100644 --- a/packages/api-core/src/index.ts +++ b/packages/api-core/src/index.ts @@ -4,4 +4,3 @@ export { registerApiCoreStorageOperations } from "./features/storageOperations/abstractions.js"; export { WcpLicenseProvider } from "./features/wcp/WcpLicenseProvider.js"; -export type { IWcpLicenseProvider } from "./features/wcp/WcpLicenseProvider.js"; diff --git a/packages/api-event-handler-core/src/WcpLicenseInitializer.ts b/packages/api-event-handler-core/src/WcpLicenseInitializer.ts index 16d7da9e8fe..5fe4f44438e 100644 --- a/packages/api-event-handler-core/src/WcpLicenseInitializer.ts +++ b/packages/api-event-handler-core/src/WcpLicenseInitializer.ts @@ -1,6 +1,5 @@ import { RequestInitializer } from "@webiny/event-handler-core"; import { WcpLicenseProvider } from "@webiny/api-core"; -import type { IWcpLicenseProvider } from "@webiny/api-core"; /** * Per-request hook that refreshes the WCP license before the request is dispatched (and before any @@ -12,7 +11,7 @@ import type { IWcpLicenseProvider } from "@webiny/api-core"; * every flavour (aws + server) via registerApiRequestStack. */ class WcpLicenseInitializerImpl implements RequestInitializer.Interface { - constructor(private provider: IWcpLicenseProvider) {} + constructor(private provider: WcpLicenseProvider.Interface) {} async init(): Promise { await this.provider.refresh(); From ac27ee85c5c571f502ec6268cea608229dafc951 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 11:01:17 +0200 Subject: [PATCH 08/31] wip:10 (0aesp) --- packages/cli-core/files/references.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index 9d76c932b9e..1ef2f4a62c5 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -3181,6 +3181,7 @@ "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3272,6 +3273,7 @@ "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3437,6 +3439,7 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -3566,6 +3569,7 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -4904,6 +4908,7 @@ { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder-scheduler/package.json", @@ -5708,6 +5713,7 @@ { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, From 31f77c66b3b10ab0bfc62869c06224718b4c17c4 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 12:05:18 +0200 Subject: [PATCH 09/31] wip:11 (19y8s) --- packages/api-file-manager/src/index.ts | 37 ---------- packages/api-record-locking/src/index.ts | 90 ------------------------ 2 files changed, 127 deletions(-) diff --git a/packages/api-file-manager/src/index.ts b/packages/api-file-manager/src/index.ts index 4483ec1b095..5fa66d86eb1 100644 --- a/packages/api-file-manager/src/index.ts +++ b/packages/api-file-manager/src/index.ts @@ -1,46 +1,9 @@ -import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; -import { ContextPlugin } from "@webiny/api"; import { setupAssetDelivery } from "./delivery/setupAssetDelivery.js"; -import { FileManagerFeature } from "~/features/FileManagerFeature.js"; -import { FmPermissionsFeature } from "~/features/permissions/feature.js"; -import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; -import { FileModel as FileModelAbstraction } from "~/domain/file/abstractions.js"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -import { FILE_MODEL_ID, FileModel } from "~/domain/file/file.model.js"; import { createRegisterExtensionPlugin } from "@webiny/handler"; import { AssetDeliveryFeature } from "~/features/assetDelivery/feature.js"; export * from "./delivery/index.js"; -export const createFileManagerContext = () => { - const extensionPlugin = createRegisterExtensionPlugin(context => { - const container = context.container; - container.register(FileModel); - FmPermissionsFeature.register(container); - FileManagerFeature.register(container); - }); - extensionPlugin.name = "file-manager.extension"; - - const contextPlugin = new ContextPlugin(async context => { - const container = context.container; - const tenantContext = container.resolve(TenantContext); - const getModel = container.resolve(GetModelUseCase); - - if (!tenantContext.getTenant()) { - return; - } - - await container.resolve(IdentityContext).withoutAuthorization(async () => { - const fileModel = await getModel.execute(FILE_MODEL_ID); - container.registerInstance(FileModelAbstraction, fileModel.value); - }); - }); - contextPlugin.name = "file-manager.createContext"; - - return [extensionPlugin, contextPlugin]; -}; - export const createAssetDelivery = () => { return [ createRegisterExtensionPlugin(context => { diff --git a/packages/api-record-locking/src/index.ts b/packages/api-record-locking/src/index.ts index 5f53bc04489..0ee6a71ab8b 100644 --- a/packages/api-record-locking/src/index.ts +++ b/packages/api-record-locking/src/index.ts @@ -1,92 +1,2 @@ -import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; -import { ContextPlugin } from "@webiny/api"; -import { createRegisterExtensionPlugin } from "@webiny/handler"; -import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js"; -import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels"; -import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel"; -import { RecordLockingModel, RECORD_LOCKING_MODEL_ID } from "~/domain/RecordLockingModel.js"; -import { getTimeout } from "~/utils/getTimeout.js"; -import { RecordLockingFeature } from "~/features/RecordLockingFeature.js"; -import { createGraphQLSchema } from "~/graphql/schema.js"; -import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js"; - -export interface ICreateContextPluginParams { - /** - * A number of seconds after the last activity to wait before the record is automatically unlocked. - */ - timeout?: number; -} - -const createContextPlugin = (params?: ICreateContextPluginParams) => { - const recordLockingContextPlugin = new ContextPlugin(async context => { - const tenantContext = context.container.resolve(TenantContext); - const identityContext = context.container.resolve(IdentityContext); - const wcp = context.container.resolve(WcpContext); - const getModel = context.container.resolve(GetModelUseCase); - const listModels = context.container.resolve(ListModelsUseCase); - - if (!wcp.canUseRecordLocking() || !tenantContext.getTenant()) { - return; - } - - // Determine timeout value - const timeout = getTimeout(params?.timeout); - - // Fetch CMS model to use for storing record locking data - const [model, publicModels] = await identityContext.withoutAuthorization(async () => { - const [model, publicModels] = await Promise.all([ - // Get a record locking model - getModel.execute(RECORD_LOCKING_MODEL_ID), - // Get all models - listModels.execute({ includePrivate: false }) - ]); - - return [model.value, publicModels.value]; - }); - - const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry); - - // Register GraphQL schema plugin - const graphQlPlugin = await createGraphQLSchema({ - model, - models: publicModels, - fieldRegistry - }); - - context.container.registerInstance(CoreGraphQLSchemaFactory, { - async execute(builder) { - const { schema } = graphQlPlugin; - if (schema.typeDefs) { - builder.addTypeDefs(schema.typeDefs); - } - if (schema.resolvers) { - builder.addLegacyResolvers(schema.resolvers as Record); - } - return builder; - } - }); - - // Register features - RecordLockingFeature.register(context.container, { - timeout, - model - }); - }); - recordLockingContextPlugin.name = "context.recordLocking"; - - return recordLockingContextPlugin; -}; - -export const createRecordLocking = (params?: ICreateContextPluginParams) => { - const modelsPlugin = createRegisterExtensionPlugin(context => { - context.container.register(RecordLockingModel); - }); - - return [createContextPlugin(params), modelsPlugin]; -}; - export { RecordLockingAppFeature } from "./RecordLockingAppFeature.js"; export type { IRecordLockingAppFeatureParams } from "./RecordLockingAppFeature.js"; From 7ac98ca0e515ac3e85d37de20c253bca1dc9000c Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 13:04:31 +0200 Subject: [PATCH 10/31] wip:12 (0119m) --- .../api-background-tasks-ddb/package.json | 3 +- .../api-background-tasks-ddb/src/index.ts | 9 - .../tsconfig.build.json | 7 +- .../api-background-tasks-ddb/tsconfig.json | 10 +- packages/api-background-tasks-os/package.json | 1 - packages/api-background-tasks-os/src/index.ts | 14 +- .../tsconfig.build.json | 3 - .../api-background-tasks-os/tsconfig.json | 3 - .../__tests__/helpers/useHandler.ts | 3 +- .../__tests__/context/useGraphQLHandler.ts | 18 +- .../__tests__/context/useHandler.ts | 22 +- .../__tests__/context/useHandler.ts | 18 +- .../__tests__/context/useHandler.ts | 16 +- .../__tests__/__mocks/context/useHandler.ts | 9 +- .../__tests__/__mocks/mockBackgroundTasks.ts | 38 +- .../package.json | 1 + .../__tests__/mocks/mockBackgroundTasks.ts | 27 -- .../__tests__/utils/useGraphQlHandler.ts | 13 +- .../__tests__/utils/useHandler.ts | 15 +- .../__tests__/crud/cleanupTaskSubtree.test.ts | 40 +- packages/background-tasks/package.json | 2 + .../src/api/BackgroundTasksFeature.ts | 72 ++- .../background-tasks/src/api/TasksCrud.ts | 11 +- packages/background-tasks/src/api/context.ts | 103 ---- .../src/api/crud/cleanupTaskSubtree.ts | 18 +- .../src/api/crud/crud.tasks.ts | 77 +-- .../src/api/crud/definition.tasks.ts | 9 +- .../src/api/crud/service.tasks.ts | 34 +- .../graphql/BackgroundTaskSettingsSchema.ts | 115 ----- .../BackgroundTasksContextualSchema.ts | 447 ++++++++++++++++++ .../background-tasks/src/api/graphql/index.ts | 396 ---------------- packages/background-tasks/src/api/index.ts | 3 +- packages/cli-core/files/references.json | 6 + packages/testing/src/context/plugins.ts | 18 +- yarn.lock | 5 +- 35 files changed, 696 insertions(+), 890 deletions(-) delete mode 100644 packages/api-website-builder/__tests__/mocks/mockBackgroundTasks.ts delete mode 100644 packages/background-tasks/src/api/context.ts delete mode 100644 packages/background-tasks/src/api/graphql/BackgroundTaskSettingsSchema.ts create mode 100644 packages/background-tasks/src/api/graphql/BackgroundTasksContextualSchema.ts delete mode 100644 packages/background-tasks/src/api/graphql/index.ts diff --git a/packages/api-background-tasks-ddb/package.json b/packages/api-background-tasks-ddb/package.json index 7f939560204..2b6a277abb8 100644 --- a/packages/api-background-tasks-ddb/package.json +++ b/packages/api-background-tasks-ddb/package.json @@ -15,8 +15,7 @@ "license": "MIT", "dependencies": { "@webiny/background-tasks": "0.0.0", - "@webiny/feature": "0.0.0", - "@webiny/plugins": "0.0.0" + "@webiny/feature": "0.0.0" }, "devDependencies": { "@webiny/build-tools": "0.0.0", diff --git a/packages/api-background-tasks-ddb/src/index.ts b/packages/api-background-tasks-ddb/src/index.ts index d9e4c7986cd..66e5aafa538 100644 --- a/packages/api-background-tasks-ddb/src/index.ts +++ b/packages/api-background-tasks-ddb/src/index.ts @@ -1,10 +1 @@ -import type { Plugin } from "@webiny/plugins/types.js"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL -} from "@webiny/background-tasks/api"; - -export const createBackgroundTasks = (): Plugin[] => { - return [...createBackgroundTaskContext(), ...createBackgroundTaskGraphQL()]; -}; export { BackgroundTasksDdbFeature } from "./BackgroundTasksDdbFeature.js"; diff --git a/packages/api-background-tasks-ddb/tsconfig.build.json b/packages/api-background-tasks-ddb/tsconfig.build.json index d78fff4a43e..d4ecd079332 100644 --- a/packages/api-background-tasks-ddb/tsconfig.build.json +++ b/packages/api-background-tasks-ddb/tsconfig.build.json @@ -3,8 +3,7 @@ "include": ["src"], "references": [ { "path": "../background-tasks/tsconfig.build.json" }, - { "path": "../feature/tsconfig.build.json" }, - { "path": "../plugins/tsconfig.build.json" } + { "path": "../feature/tsconfig.build.json" } ], "compilerOptions": { "rootDir": "./src", @@ -16,9 +15,7 @@ "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/feature/*": ["../feature/src/*"], - "@webiny/feature": ["../feature/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"] + "@webiny/feature": ["../feature/src"] } } } diff --git a/packages/api-background-tasks-ddb/tsconfig.json b/packages/api-background-tasks-ddb/tsconfig.json index 04374fde249..17447df0572 100644 --- a/packages/api-background-tasks-ddb/tsconfig.json +++ b/packages/api-background-tasks-ddb/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.json", "include": ["src", "__tests__"], - "references": [ - { "path": "../background-tasks" }, - { "path": "../feature" }, - { "path": "../plugins" } - ], + "references": [{ "path": "../background-tasks" }, { "path": "../feature" }], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], "outDir": "./dist", @@ -16,9 +12,7 @@ "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/feature/*": ["../feature/src/*"], - "@webiny/feature": ["../feature/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"] + "@webiny/feature": ["../feature/src"] } } } diff --git a/packages/api-background-tasks-os/package.json b/packages/api-background-tasks-os/package.json index 19231b4b750..1d6d00188ca 100644 --- a/packages/api-background-tasks-os/package.json +++ b/packages/api-background-tasks-os/package.json @@ -16,7 +16,6 @@ "dependencies": { "@webiny/api-elasticsearch-tasks": "0.0.0", "@webiny/api-headless-cms-es-tasks": "0.0.0", - "@webiny/background-tasks": "0.0.0", "@webiny/plugins": "0.0.0" }, "devDependencies": { diff --git a/packages/api-background-tasks-os/src/index.ts b/packages/api-background-tasks-os/src/index.ts index 8c66c0c4779..ae82a8284b9 100644 --- a/packages/api-background-tasks-os/src/index.ts +++ b/packages/api-background-tasks-os/src/index.ts @@ -1,16 +1,10 @@ import type { PluginCollection } from "@webiny/plugins/types.js"; -import { - createBackgroundTaskGraphQL, - createBackgroundTaskContext -} from "@webiny/background-tasks/api"; import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks"; import { createHeadlessCmsEsTasks } from "@webiny/api-headless-cms-es-tasks"; +// NOTE: background-tasks itself is now registered DI-natively via BackgroundTasksFeature +// (wired in registerApiRequestStack for every flavour), so it is no longer bundled here. This +// factory only carries the OpenSearch-specific ES/CMS-ES task plugins (still legacy). export const createBackgroundTasks = (): PluginCollection => { - return [ - ...createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), - ...createElasticsearchBackgroundTasks(), - createHeadlessCmsEsTasks() - ]; + return [...createElasticsearchBackgroundTasks(), createHeadlessCmsEsTasks()]; }; diff --git a/packages/api-background-tasks-os/tsconfig.build.json b/packages/api-background-tasks-os/tsconfig.build.json index 72b0d1505c5..ed0e817139d 100644 --- a/packages/api-background-tasks-os/tsconfig.build.json +++ b/packages/api-background-tasks-os/tsconfig.build.json @@ -4,7 +4,6 @@ "references": [ { "path": "../api-elasticsearch-tasks/tsconfig.build.json" }, { "path": "../api-headless-cms-es-tasks/tsconfig.build.json" }, - { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" } ], "compilerOptions": { @@ -18,8 +17,6 @@ "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"], "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"], - "@webiny/background-tasks/*": ["../background-tasks/src/*"], - "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-background-tasks-os/tsconfig.json b/packages/api-background-tasks-os/tsconfig.json index fb6f45962a8..b8fff9d5e79 100644 --- a/packages/api-background-tasks-os/tsconfig.json +++ b/packages/api-background-tasks-os/tsconfig.json @@ -4,7 +4,6 @@ "references": [ { "path": "../api-elasticsearch-tasks" }, { "path": "../api-headless-cms-es-tasks" }, - { "path": "../background-tasks" }, { "path": "../plugins" } ], "compilerOptions": { @@ -18,8 +17,6 @@ "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"], "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"], - "@webiny/background-tasks/*": ["../background-tasks/src/*"], - "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts index 88b8a0fae11..1c082c56d14 100644 --- a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts +++ b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts @@ -1,7 +1,7 @@ import { useContextHandler } from "@webiny/testing"; import type { UseContextHandlerParams } from "@webiny/testing"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { createBackgroundTaskContext, TasksCrud } from "@webiny/background-tasks/api"; +import { TasksCrud } from "@webiny/background-tasks/api"; import { createElasticsearchBackgroundTasks } from "~/index"; import type { Context } from "~/types"; @@ -13,7 +13,6 @@ export const useHandler = (params: Params = {}) => // OpenSearch core is already registered by useContextHandler's cmsStorage (DDB-OS preset); // registering it again here throws "OpenSearch core must not be loaded more than once". plugins: [ - ...createBackgroundTaskContext(), createElasticsearchBackgroundTasks(), ...[params.plugins].flat(Infinity as 1).filter(Boolean) ] diff --git a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts index 721c576c317..dab8aa75df7 100644 --- a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts +++ b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts @@ -7,10 +7,7 @@ import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { Plugin, PluginCollection } from "@webiny/plugins/types"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature } from "@webiny/background-tasks/api"; import { createHcmsBulkActions } from "~/index"; import { createIdentity, createPermissions } from "~tests/context/helpers"; @@ -36,15 +33,9 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { const extraCmsPlugins = ([plugins] as any[]).flat(Infinity as 1).filter(Boolean); - // createBackgroundTaskContext/GraphQL and createHcmsBulkActions are legacy gql plugins applied - // via the contextual-schema path on /graphql (after the CMS contextual schema). - const latePlugins = [ - createBackgroundTaskContext(), - createBackgroundTaskGraphQL(), - createHcmsBulkActions() - ] - .flat(Infinity as 1) - .filter(Boolean); + // createHcmsBulkActions is a legacy gql plugin applied via the contextual-schema path on + // /graphql (after the CMS contextual schema). Background tasks are DI-native (feature below). + const latePlugins = [createHcmsBulkActions()].flat(Infinity as 1).filter(Boolean); const { handler, invoke } = createCmsTestHandler({ identity: params.identity ?? createIdentity(), @@ -53,6 +44,7 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { extraCmsPlugins, features: container => { container.register(HeadlessCmsContextualSchema); + BackgroundTasksFeature.register(container); registerLegacyPluginsViaGqlContextualSchema(container, latePlugins); } }); diff --git a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts index 5a797d99bfb..a144a58eb7d 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts @@ -1,10 +1,6 @@ import { Container } from "@webiny/di"; import { RequestContainer, RequestContextInitializer } from "@webiny/event-handler-core"; -import { - GraphQLContextEnhancer, - GraphQLContextualSchema, - registerLegacyPluginsViaGqlContextualSchema -} from "@webiny/handler-graphql"; +import { GraphQLContextEnhancer, GraphQLContextualSchema } from "@webiny/handler-graphql"; import { ApiCoreFeature, registerApiCoreStorageOperations } from "@webiny/api-core"; import { HeadlessCmsFeature } from "@webiny/api-headless-cms"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; @@ -14,7 +10,7 @@ import { CreateTenantUseCase } from "@webiny/api-core/exports/api/tenancy.js"; import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js"; import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; import { RegisterExtensionPlugin } from "@webiny/handler"; -import { createBackgroundTaskContext, TasksCrud } from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TasksCrud } from "@webiny/background-tasks/api"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; @@ -96,17 +92,9 @@ export const useHandler = (params: CreateHand } } - const bgPlugins = ([createBackgroundTaskContext()].flat(Infinity as 1) as any[]).filter( - Boolean - ); - processLegacyPlugins( - container, - bgPlugins.filter(p => p instanceof RegisterExtensionPlugin) - ); - registerLegacyPluginsViaGqlContextualSchema( - container, - bgPlugins.filter(p => !(p instanceof RegisterExtensionPlugin)) - ); + // Background tasks are DI-native — the feature registers models, TasksCrud, and the GraphQL + // contextual schema (built below alongside the other contextual schemas). + BackgroundTasksFeature.register(container); const tenantCtx = container.resolve(TenantContext); tenantCtx.setTenant({ diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts index f59d1c982fc..d482ee80368 100644 --- a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts @@ -2,12 +2,7 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { DbFeature } from "@webiny/handler-db"; import { getDocumentClient } from "@webiny/project-utils/testing/dynamodb/index.js"; import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL, - TaskService, - TasksCrud -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService, TasksCrud } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; @@ -27,15 +22,16 @@ export const useHandler = (params: Params = {}) => table: process.env.DB_TABLE }); - // Background tasks (context.tasks, TriggerTaskUseCase) + a mock transport (DI), then the - // es-tasks task definitions and any test-supplied plugins. + // Background tasks are DI-native (TasksCrud, GraphQL contextual schema, TriggerTaskUseCase). + // Register the feature, then override TaskService with a mock transport for triggering. + BackgroundTasksFeature.register(container); + container.registerInstance(TaskService, createMockTaskService()); + + // es-tasks task definitions + any test-supplied plugins (still legacy). registerLegacyPluginsViaGqlContextualSchema(container, [ - createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), createHeadlessCmsEsTasks(), ...[plugins].flat(Infinity as 1).filter(Boolean) ]); - container.registerInstance(TaskService, createMockTaskService()); } }); diff --git a/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts index 4d11af02893..d33e9f479f1 100644 --- a/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts @@ -1,12 +1,7 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { DbFeature } from "@webiny/handler-db"; import { getDocumentClient } from "@webiny/project-utils/testing/dynamodb/index.js"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL, - TaskService -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; @@ -36,12 +31,9 @@ export const useHandler = (params }); HcmsTasksFeature.register(container); - // Background tasks (TriggerTaskUseCase etc.) + a mock trigger transport (DI) so the task - // isn't actually dispatched to AWS during tests. - registerLegacyPluginsViaGqlContextualSchema(container, [ - createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL() - ]); + // Background tasks are DI-native (TriggerTaskUseCase etc.); a mock trigger transport (DI) + // keeps the task from actually dispatching to AWS during tests. + BackgroundTasksFeature.register(container); container.registerInstance(TaskService, createMockTaskService()); } }); diff --git a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts index 108eec6fc0a..570f4663a11 100644 --- a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts +++ b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts @@ -8,19 +8,16 @@ import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerSe import { PageModelPlugin } from "@webiny/api-website-builder/domain/page/page.model.js"; import { RedirectModelPlugin } from "@webiny/api-website-builder/domain/redirect/redirect.model.js"; import { createWebsiteBuilder } from "@webiny/api-website-builder"; -import { createMockBackgroundTasks } from "../mockBackgroundTasks.js"; +import { registerMockBackgroundTasks } from "../mockBackgroundTasks.js"; type Params = Omit; export const useHandler = (params: Params = {}) => { const { getContext } = createCmsTestHandler({ ...params, - plugins: [ - createWebsiteBuilder(), - createMockBackgroundTasks(), - ...[params.plugins].flat(Infinity as 1).filter(Boolean) - ], + plugins: [createWebsiteBuilder(), ...[params.plugins].flat(Infinity as 1).filter(Boolean)], features: container => { + registerMockBackgroundTasks(container); container.register(PageModelPlugin); container.register(RedirectModelPlugin); SchedulerFeature.register(container); diff --git a/packages/api-website-builder-scheduler/__tests__/__mocks/mockBackgroundTasks.ts b/packages/api-website-builder-scheduler/__tests__/__mocks/mockBackgroundTasks.ts index 41dc02adc1d..31b639cba2d 100644 --- a/packages/api-website-builder-scheduler/__tests__/__mocks/mockBackgroundTasks.ts +++ b/packages/api-website-builder-scheduler/__tests__/__mocks/mockBackgroundTasks.ts @@ -1,23 +1,23 @@ -import { createContextPlugin } from "@webiny/api"; -import { createBackgroundTaskContext } from "@webiny/background-tasks/api"; +import type { Container } from "@webiny/di"; +import { BackgroundTasksFeature } from "@webiny/background-tasks/api"; import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js"; import { Result } from "@webiny/feature/api"; -export const createMockBackgroundTasks = () => { - return [ - ...createBackgroundTaskContext(), - createContextPlugin(context => { - context.container.registerInstance(TaskService, { - async trigger() { - return Result.ok({}) as any; - }, - abort() { - return Result.ok({}) as any; - }, - fetchServiceInfo() { - return Result.ok({}) as any; - } - }); - }) - ]; +/** + * Registers background tasks DI-natively, then overrides TaskService with a no-op mock so tests + * don't dispatch real tasks. Call inside the `features` callback of the test handler. + */ +export const registerMockBackgroundTasks = (container: Container) => { + BackgroundTasksFeature.register(container); + container.registerInstance(TaskService, { + async trigger() { + return Result.ok({}) as any; + }, + abort() { + return Result.ok({}) as any; + }, + fetchServiceInfo() { + return Result.ok({}) as any; + } + }); }; diff --git a/packages/api-website-builder-scheduler/package.json b/packages/api-website-builder-scheduler/package.json index 6e3a39a4027..bbc16ae0e6b 100644 --- a/packages/api-website-builder-scheduler/package.json +++ b/packages/api-website-builder-scheduler/package.json @@ -28,6 +28,7 @@ "@webiny/api-opensearch": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", + "@webiny/di": "^1.0.2", "@webiny/project-utils": "0.0.0", "@webiny/testing": "0.0.0", "typescript": "6.0.3", diff --git a/packages/api-website-builder/__tests__/mocks/mockBackgroundTasks.ts b/packages/api-website-builder/__tests__/mocks/mockBackgroundTasks.ts deleted file mode 100644 index efacb5c4efe..00000000000 --- a/packages/api-website-builder/__tests__/mocks/mockBackgroundTasks.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createContextPlugin } from "@webiny/api"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL -} from "@webiny/background-tasks/api"; -import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js"; -import { Result } from "@webiny/feature/api"; - -export const createBackgroundTasks = () => { - return [ - ...createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), - createContextPlugin(context => { - context.container.registerInstance(TaskService, { - async trigger() { - return Result.ok({}) as any; - }, - abort() { - return Result.ok({}) as any; - }, - fetchServiceInfo() { - return Result.ok({}) as any; - } - }); - }) - ]; -}; diff --git a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts index c9cea1ec664..1501a68765c 100644 --- a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts @@ -1,10 +1,6 @@ import { getIntrospectionQuery } from "graphql"; import { until } from "@webiny/project-utils/testing/helpers/until.js"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL, - TaskService -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; @@ -27,11 +23,7 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { const { handler, invoke } = createCmsTestHandler({ ...params, // identity === null → anonymous (handled natively by the shared harness). - // Background-task plugins first (they register the "wbyTask" model before WB/Languages init - // caches the per-request model set). plugins: [ - createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), createContextPlugin(ctx => { ctx.container.register(InvalidateCloudfrontCacheTaskDefinition); }), @@ -39,6 +31,9 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { ...[params.plugins].flat(Infinity as 1).filter(Boolean) ], features: container => { + // Background tasks are DI-native — the feature registers the "wbyTask" model at + // register() time (before WB/Languages cache the per-request model set). Mock override after. + BackgroundTasksFeature.register(container); container.register(PageModelPlugin); container.register(RedirectModelPlugin); LanguagesExtension.register(container); diff --git a/packages/api-website-builder/__tests__/utils/useHandler.ts b/packages/api-website-builder/__tests__/utils/useHandler.ts index acdddaf3334..fa67da735b0 100644 --- a/packages/api-website-builder/__tests__/utils/useHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useHandler.ts @@ -1,9 +1,5 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL, - TaskService -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; @@ -30,12 +26,7 @@ export const useHandler = (params: Params = {}) => { // identity === null → anonymous; the shared harness authenticates the null identity natively // (TestAuthenticator returns it), so no post-auth override is needed. // - // Background-task plugins must come BEFORE the Website Builder plugins: createBackgroundTaskContext - // registers the "wbyTask" CMS model, and it has to be present before WB/Languages init lists + - // caches the per-request model set (otherwise createBackgroundTaskGraphQL can't find it). plugins: [ - createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), createContextPlugin(ctx => { ctx.container.register(InvalidateCloudfrontCacheTaskDefinition); }), @@ -43,6 +34,10 @@ export const useHandler = (params: Params = {}) => { ...[params.plugins].flat(Infinity as 1).filter(Boolean) ], features: container => { + // Background tasks are DI-native — the feature registers the "wbyTask" CMS model at + // register() time (before WB/Languages cache the per-request model set) plus TasksCrud and + // the GraphQL contextual schema. The mock TaskService override must come after. + BackgroundTasksFeature.register(container); container.register(PageModelPlugin); container.register(RedirectModelPlugin); LanguagesExtension.register(container); diff --git a/packages/background-tasks/__tests__/crud/cleanupTaskSubtree.test.ts b/packages/background-tasks/__tests__/crud/cleanupTaskSubtree.test.ts index b6146b7be01..481d290233f 100644 --- a/packages/background-tasks/__tests__/crud/cleanupTaskSubtree.test.ts +++ b/packages/background-tasks/__tests__/crud/cleanupTaskSubtree.test.ts @@ -1,7 +1,9 @@ import { describe, it, expect, vi } from "vitest"; +import type { Container } from "@webiny/di"; import { createCleanupTaskSubtree } from "~/api/crud/cleanupTaskSubtree.js"; -import type { Context, ITask, ITaskLog, ITasksContextCrudObject } from "~/api/types.js"; +import type { ITask, ITaskLog, ITasksContextCrudObject } from "~/api/types.js"; import { TaskDataStatus } from "~/api/types.js"; +import { TasksCrud } from "~/api/TasksCrud.js"; const mkTask = (id: string, definitionId: string, parentId?: string): ITask => ({ @@ -75,46 +77,48 @@ const makeContext = (fx: Fixture) => { getDefinition: (id: string) => fx.definitions[id] ?? null }; - const context = { tasks: crud } as unknown as Context; - return { context, deletedTasks, deletedLogs, deleteTaskThrows }; + const container = { + resolve: (abstraction: unknown) => (abstraction === TasksCrud ? crud : undefined) + } as unknown as Container; + return { container, deletedTasks, deletedLogs, deleteTaskThrows }; }; describe("cleanupTaskSubtree", () => { it("deletes a single task with no descendants", async () => { - const { context, deletedTasks, deletedLogs } = makeContext({ + const { container, deletedTasks, deletedLogs } = makeContext({ tasks: [mkTask("t1", "defA")], logs: [], definitions: { defA: { databaseLogs: false } } }); - const cleanup = createCleanupTaskSubtree(context); + const cleanup = createCleanupTaskSubtree(container); await cleanup("t1"); expect(deletedTasks).toEqual(["t1"]); expect(deletedLogs).toEqual([]); }); it("deletes task and its logs when databaseLogs=true", async () => { - const { context, deletedTasks, deletedLogs } = makeContext({ + const { container, deletedTasks, deletedLogs } = makeContext({ tasks: [mkTask("t1", "defA")], logs: [mkLog("log1", "t1"), mkLog("log2", "t1")], definitions: { defA: { databaseLogs: true } } }); - await createCleanupTaskSubtree(context)("t1"); + await createCleanupTaskSubtree(container)("t1"); expect(deletedTasks).toEqual(["t1"]); expect(deletedLogs.sort()).toEqual(["log1", "log2"]); }); it("skips log sweep when databaseLogs=false", async () => { - const { context, deletedLogs } = makeContext({ + const { container, deletedLogs } = makeContext({ tasks: [mkTask("t1", "defA")], logs: [mkLog("stray", "t1")], definitions: { defA: { databaseLogs: false } } }); - await createCleanupTaskSubtree(context)("t1"); + await createCleanupTaskSubtree(container)("t1"); expect(deletedLogs).toEqual([]); }); it("deletes descendant tree bottom-up", async () => { - const { context, deletedTasks } = makeContext({ + const { container, deletedTasks } = makeContext({ tasks: [ mkTask("root", "defA"), mkTask("c1", "defA", "root"), @@ -124,7 +128,7 @@ describe("cleanupTaskSubtree", () => { logs: [], definitions: { defA: { databaseLogs: false } } }); - await createCleanupTaskSubtree(context)("root"); + await createCleanupTaskSubtree(container)("root"); expect([...deletedTasks].sort()).toEqual(["c1", "c2", "gc1", "root"]); const pos = (id: string) => deletedTasks.indexOf(id); expect(pos("gc1")).toBeLessThan(pos("c1")); @@ -140,24 +144,24 @@ describe("cleanupTaskSubtree", () => { }); fx.deleteTaskThrows.add("c1"); const warn = vi.spyOn(console, "warn").mockImplementation(() => {}); - await expect(createCleanupTaskSubtree(fx.context)("root")).resolves.toBeUndefined(); + await expect(createCleanupTaskSubtree(fx.container)("root")).resolves.toBeUndefined(); expect(fx.deletedTasks).toContain("root"); expect(warn).toHaveBeenCalled(); warn.mockRestore(); }); it("is idempotent on missing root id", async () => { - const { context } = makeContext({ tasks: [], logs: [], definitions: {} }); - await expect(createCleanupTaskSubtree(context)("ghost")).resolves.toBeUndefined(); + const { container } = makeContext({ tasks: [], logs: [], definitions: {} }); + await expect(createCleanupTaskSubtree(container)("ghost")).resolves.toBeUndefined(); }); it("skips log sweep when definition is missing", async () => { - const { context, deletedTasks, deletedLogs } = makeContext({ + const { container, deletedTasks, deletedLogs } = makeContext({ tasks: [mkTask("t1", "defMissing")], logs: [mkLog("log1", "t1")], definitions: {} }); - await createCleanupTaskSubtree(context)("t1"); + await createCleanupTaskSubtree(container)("t1"); expect(deletedTasks).toEqual(["t1"]); expect(deletedLogs).toEqual([]); }); @@ -168,13 +172,13 @@ describe("cleanupTaskSubtree", () => { const cyc = mkTask("cyc", "defA", "root"); (root as any).parentId = "cyc"; - const { context, deletedTasks } = makeContext({ + const { container, deletedTasks } = makeContext({ tasks: [root, cyc], logs: [], definitions: { defA: { databaseLogs: false } } }); - await expect(createCleanupTaskSubtree(context)("root")).resolves.toBeUndefined(); + await expect(createCleanupTaskSubtree(container)("root")).resolves.toBeUndefined(); expect(deletedTasks.sort()).toEqual(["cyc", "root"]); }); }); diff --git a/packages/background-tasks/package.json b/packages/background-tasks/package.json index 167d83a9bc6..f7d6fc035ba 100644 --- a/packages/background-tasks/package.json +++ b/packages/background-tasks/package.json @@ -19,6 +19,8 @@ }, "license": "MIT", "dependencies": { + "@graphql-tools/merge": "^9.1.10", + "@graphql-tools/schema": "^10.0.34", "@webiny/admin-ui": "0.0.0", "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", diff --git a/packages/background-tasks/src/api/BackgroundTasksFeature.ts b/packages/background-tasks/src/api/BackgroundTasksFeature.ts index 62f738bd278..3829206bb4f 100644 --- a/packages/background-tasks/src/api/BackgroundTasksFeature.ts +++ b/packages/background-tasks/src/api/BackgroundTasksFeature.ts @@ -1,10 +1,31 @@ import { createFeature } from "@webiny/feature/api"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import { createBackgroundTaskContext } from "./context.js"; -import { createBackgroundTaskGraphQL } from "./graphql/index.js"; +import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js"; +import { RunnableTaskDecorator } from "./decorators/RunnableTaskDecorator.js"; +import { SelfCleaningTaskDecorator } from "./decorators/SelfCleaningTaskDecorator.js"; +import { TaskController } from "./features/TaskController/index.js"; import { TaskPrivateModel } from "./crud/TaskPrivateModel.js"; import { TaskLogPrivateModel } from "./crud/TaskLogPrivateModel.js"; import { BackgroundTaskSettingsModel } from "./models/BackgroundTaskSettingsModel.js"; +import { createDefinitionCrud } from "./crud/definition.tasks.js"; +import { createServiceCrud } from "./crud/service.tasks.js"; +import { createTaskCrud } from "./crud/crud.tasks.js"; +import { TaskExecutionContextFeature } from "./features/TaskExecutionContext/feature.js"; +import { GetTaskDefinitionFeature } from "./features/GetTaskDefinition/feature.js"; +import { ListTaskDefinitionsFeature } from "./features/ListTaskDefinitions/feature.js"; +import { + CleanupTaskSubtreeUseCase, + CleanupTaskSubtreeUseCaseImpl +} from "./features/CleanupTaskSubtree/index.js"; +import { TasksCrud } from "./TasksCrud.js"; +import { TriggerTaskFeature } from "./features/TriggerTask/feature.js"; +import { AbortTaskFeature } from "./features/AbortTask/feature.js"; +import { GetTaskFeature } from "./features/GetTask/feature.js"; +import { ListTasksFeature } from "./features/ListTasks/feature.js"; +import { TestingRunTaskDefinition } from "./tasks/testingRunTask.js"; +import { BackgroundTaskPermissionsFeature } from "./features/BackgroundTaskPermissions/feature.js"; +import { GetBackgroundTaskSettingsFeature } from "./features/GetBackgroundTaskSettings/feature.js"; +import { UpdateBackgroundTaskSettingsFeature } from "./features/UpdateBackgroundTaskSettings/feature.js"; +import { BackgroundTasksContextualSchema } from "./graphql/BackgroundTasksContextualSchema.js"; export const BackgroundTasksFeature = createFeature({ name: "BackgroundTasks", @@ -15,9 +36,46 @@ export const BackgroundTasksFeature = createFeature({ container.register(TaskLogPrivateModel); container.register(BackgroundTaskSettingsModel); - registerLegacyPluginsViaGqlContextualSchema(container, [ - ...createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL() - ]); + // Decorators wrapping all TaskDefinition instances. + container.registerDecorator(RunnableTaskDecorator); + container.registerDecorator(SelfCleaningTaskDecorator); + + // Task definition use cases. + GetTaskDefinitionFeature.register(container); + ListTaskDefinitionsFeature.register(container); + + // Build the tasks CRUD facade from the container and register it as the canonical TasksCrud + // abstraction (plus the legacy TaskService alias). The factory methods resolve TasksCrud + // lazily for sibling calls, so registering the assembled object up front is sufficient. + const tasksCrud = { + ...createDefinitionCrud(container), + ...createTaskCrud(container), + ...createServiceCrud(container) + }; + container.registerInstance(TasksCrud, tasksCrud); + container.registerInstance(TaskService, tasksCrud); + + // Task CRUD use cases (must be after TasksCrud is registered). + TriggerTaskFeature.register(container); + AbortTaskFeature.register(container); + GetTaskFeature.register(container); + ListTasksFeature.register(container); + container.registerInstance( + CleanupTaskSubtreeUseCase, + new CleanupTaskSubtreeUseCaseImpl(container.resolve(TasksCrud)) + ); + + // Execution context (singleton), controller, and the built-in test task. + TaskExecutionContextFeature.register(container); + container.register(TaskController); + container.register(TestingRunTaskDefinition); + + // Permissions + settings features. + BackgroundTaskPermissionsFeature.register(container); + GetBackgroundTaskSettingsFeature.register(container); + UpdateBackgroundTaskSettingsFeature.register(container); + + // GraphQL schema — rendered per-request from the CMS task/log content models. + container.register(BackgroundTasksContextualSchema); } }); diff --git a/packages/background-tasks/src/api/TasksCrud.ts b/packages/background-tasks/src/api/TasksCrud.ts index ba56b81b4dd..8cb8a5bca70 100644 --- a/packages/background-tasks/src/api/TasksCrud.ts +++ b/packages/background-tasks/src/api/TasksCrud.ts @@ -1,8 +1,13 @@ import { createAbstraction } from "@webiny/feature/api"; -import type { ITasksContextCrudObject } from "~/api/types.js"; +import type { ITasksContextObject } from "~/api/types.js"; -export const TasksCrud = createAbstraction("Tasks/TasksCrud"); +/** + * At runtime this is the full tasks facade (CRUD + definition + service methods), assembled and + * registered by BackgroundTasksFeature. Typed as the full `ITasksContextObject` so sibling calls + * (e.g. `getDefinition`, `trigger`) type-check. + */ +export const TasksCrud = createAbstraction("Tasks/TasksCrud"); export namespace TasksCrud { - export type Interface = ITasksContextCrudObject; + export type Interface = ITasksContextObject; } diff --git a/packages/background-tasks/src/api/context.ts b/packages/background-tasks/src/api/context.ts deleted file mode 100644 index 0b913c83081..00000000000 --- a/packages/background-tasks/src/api/context.ts +++ /dev/null @@ -1,103 +0,0 @@ -import type { Plugin } from "@webiny/plugins"; -import { ContextPlugin } from "@webiny/api"; -import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js"; -import { RunnableTaskDecorator } from "./decorators/RunnableTaskDecorator.js"; -import { SelfCleaningTaskDecorator } from "./decorators/SelfCleaningTaskDecorator.js"; -import { TaskController } from "./features/TaskController/index.js"; -import type { Context } from "~/api/types.js"; -import { TaskPrivateModel } from "./crud/TaskPrivateModel.js"; -import { TaskLogPrivateModel } from "./crud/TaskLogPrivateModel.js"; -import { createDefinitionCrud } from "./crud/definition.tasks.js"; -import { createServiceCrud } from "~/api/crud/service.tasks.js"; -import { createTaskCrud } from "./crud/crud.tasks.js"; -import { TaskExecutionContextFeature } from "~/api/features/TaskExecutionContext/feature.js"; -import { GetTaskDefinitionFeature } from "~/api/features/GetTaskDefinition/feature.js"; -import { ListTaskDefinitionsFeature } from "~/api/features/ListTaskDefinitions/feature.js"; -import { - CleanupTaskSubtreeUseCase, - CleanupTaskSubtreeUseCaseImpl -} from "~/api/features/CleanupTaskSubtree/index.js"; -import { TasksCrud } from "~/api/TasksCrud.js"; -import { TriggerTaskFeature } from "~/api/features/TriggerTask/feature.js"; -import { AbortTaskFeature } from "~/api/features/AbortTask/feature.js"; -import { GetTaskFeature } from "~/api/features/GetTask/feature.js"; -import { ListTasksFeature } from "~/api/features/ListTasks/feature.js"; -import { TestingRunTaskDefinition } from "~/api/tasks/testingRunTask.js"; -import { createRegisterExtensionPlugin } from "@webiny/handler"; -import { BackgroundTaskSettingsModel } from "~/api/models/BackgroundTaskSettingsModel.js"; -import { GetBackgroundTaskSettingsFeature } from "~/api/features/GetBackgroundTaskSettings/feature.js"; -import { UpdateBackgroundTaskSettingsFeature } from "~/api/features/UpdateBackgroundTaskSettings/feature.js"; -import { BackgroundTaskPermissionsFeature } from "~/api/features/BackgroundTaskPermissions/feature.js"; -import { createBackgroundTaskSettingsGraphQL } from "~/api/graphql/BackgroundTaskSettingsSchema.js"; - -const createTasksCrud = () => { - const tasksCrudPlugin = new ContextPlugin(async context => { - // Register the RunnableTaskDecorator to wrap all TaskDefinition instances - context.container.registerDecorator(RunnableTaskDecorator); - context.container.registerDecorator(SelfCleaningTaskDecorator); - - // Register task definition use cases - GetTaskDefinitionFeature.register(context.container); - ListTaskDefinitionsFeature.register(context.container); - - context.tasks = { - ...createDefinitionCrud(context), - ...createTaskCrud(context), - ...createServiceCrud(context) - }; - - // Register the full CRUD object as a DI abstraction for use cases that need it. - context.container.registerInstance(TasksCrud, context.tasks); - - // Register task CRUD use cases (must be after TasksCrud is registered). - TriggerTaskFeature.register(context.container); - AbortTaskFeature.register(context.container); - GetTaskFeature.register(context.container); - ListTasksFeature.register(context.container); - context.container.registerInstance( - CleanupTaskSubtreeUseCase, - new CleanupTaskSubtreeUseCaseImpl(context.container.resolve(TasksCrud)) - ); - }); - - tasksCrudPlugin.name = "tasks.context"; - - return tasksCrudPlugin; -}; - -const createTasksContext = (): Plugin[] => { - const modelsPlugin = createRegisterExtensionPlugin(context => { - context.container.register(TaskPrivateModel); - context.container.register(TaskLogPrivateModel); - context.container.register(BackgroundTaskSettingsModel); - }); - - return [createTasksCrud(), modelsPlugin]; -}; - -export const createBackgroundTaskContext = (): Plugin[] => { - return [ - ...createTasksContext(), - ...createBackgroundTaskSettingsGraphQL(), - new ContextPlugin(context => { - // Register legacy tasks context via a new abstraction - context.container.registerInstance(TaskService, context.tasks); - - // Register TaskExecutionContext EARLY (singleton, empty) - TaskExecutionContextFeature.register(context.container); - - // Register TaskController (depends on TaskExecutionContext) - context.container.register(TaskController); - - // Register a test task - context.container.register(TestingRunTaskDefinition); - - // Permissions. - BackgroundTaskPermissionsFeature.register(context.container); - - // Settings features. - GetBackgroundTaskSettingsFeature.register(context.container); - UpdateBackgroundTaskSettingsFeature.register(context.container); - }) - ]; -}; diff --git a/packages/background-tasks/src/api/crud/cleanupTaskSubtree.ts b/packages/background-tasks/src/api/crud/cleanupTaskSubtree.ts index 34b3d92d1d4..475ca22c2b8 100644 --- a/packages/background-tasks/src/api/crud/cleanupTaskSubtree.ts +++ b/packages/background-tasks/src/api/crud/cleanupTaskSubtree.ts @@ -1,4 +1,6 @@ -import type { Context, ITask } from "~/api/types.js"; +import type { Container } from "@webiny/di"; +import type { ITask } from "~/api/types.js"; +import { TasksCrud } from "~/api/TasksCrud.js"; /** * Recursively deletes the task identified by `rootId`, all its descendants, and @@ -6,16 +8,16 @@ import type { Context, ITask } from "~/api/types.js"; * best-effort: per-record errors are logged and swallowed, the function never * throws. */ -export const createCleanupTaskSubtree = (context: Context) => { +export const createCleanupTaskSubtree = (container: Container) => { const listChildren = async (parentId: string): Promise => { - const { items } = await context.tasks.listTasks({ + const { items } = await container.resolve(TasksCrud).listTasks({ where: { parentId } }); return items; }; const collectSubtree = async (rootId: string): Promise => { - const root = await context.tasks.getTask(rootId); + const root = await container.resolve(TasksCrud).getTask(rootId); if (!root) { return []; } @@ -37,17 +39,17 @@ export const createCleanupTaskSubtree = (context: Context) => { }; const deleteTaskLogs = async (task: ITask): Promise => { - const definition = context.tasks.getDefinition(task.definitionId); + const definition = container.resolve(TasksCrud).getDefinition(task.definitionId); if (!definition || definition.databaseLogs !== true) { return; } try { - const { items } = await context.tasks.listLogs({ + const { items } = await container.resolve(TasksCrud).listLogs({ where: { task: task.id } }); for (const log of items) { try { - await context.tasks.deleteLog(log.id); + await container.resolve(TasksCrud).deleteLog(log.id); } catch (ex: any) { console.warn( `cleanupTaskSubtree: failed to delete log "${log.id}" for task "${task.id}": ${ex.message}` @@ -66,7 +68,7 @@ export const createCleanupTaskSubtree = (context: Context) => { for (const task of ordered) { await deleteTaskLogs(task); try { - await context.tasks.deleteTask(task.id); + await container.resolve(TasksCrud).deleteTask(task.id); } catch (ex: any) { console.warn( `cleanupTaskSubtree: failed to delete task "${task.id}": ${ex.message}` diff --git a/packages/background-tasks/src/api/crud/crud.tasks.ts b/packages/background-tasks/src/api/crud/crud.tasks.ts index c2ed14c3025..513b6a37fff 100644 --- a/packages/background-tasks/src/api/crud/crud.tasks.ts +++ b/packages/background-tasks/src/api/crud/crud.tasks.ts @@ -1,6 +1,6 @@ import WebinyError from "@webiny/error"; +import type { Container } from "@webiny/di"; import type { - Context, IListTaskLogParams, IListTaskParams, ITaskCreateData, @@ -11,6 +11,7 @@ import type { ITaskUpdateData } from "~/api/types.js"; import { TaskDataStatus } from "~/api/types.js"; +import { TasksCrud } from "~/api/TasksCrud.js"; import { WEBINY_TASK_MODEL_ID } from "./TaskPrivateModel.js"; import { WEBINY_TASK_LOG_MODEL_ID } from "./TaskLogPrivateModel.js"; import type { CmsEntry, CmsModel } from "@webiny/api-headless-cms/types/index.js"; @@ -89,7 +90,6 @@ const convertToLog = (entry: CmsEntry): ITaskLog => { interface IValidateParams { definition: Pick; data: Pick; - context: Context; } const getZodSchema = (schema: GenericRecord | zod.ZodTypeAny) => { @@ -123,13 +123,15 @@ const validateTaskInput = async (params: IValidateParams) => { throw createZodError(result.error); }; -export const createTaskCrud = (context: Context): ITasksContextCrudObject => { - const cmsWhereMapper = context.container.resolve(CmsWhereMapper); +export const createTaskCrud = (container: Container): ITasksContextCrudObject => { + // Resolved lazily (inside listTasks/listLogs) rather than at build time — the factory is now + // invoked from BackgroundTasksFeature.register, which may run before CmsWhereMapper is registered. + const getCmsWhereMapper = () => container.resolve(CmsWhereMapper); const getTaskModel = async (): Promise => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); return await identityContext.withoutAuthorization(async () => { - const getModel = context.container.resolve(GetModelUseCase); + const getModel = container.resolve(GetModelUseCase); const result = await getModel.execute(WEBINY_TASK_MODEL_ID); if (result.isFail()) { throw new WebinyError(`There is no model "${WEBINY_TASK_MODEL_ID}".`); @@ -139,9 +141,9 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const getLogModel = async (): Promise => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); return await identityContext.withoutAuthorization(async () => { - const getModel = context.container.resolve(GetModelUseCase); + const getModel = container.resolve(GetModelUseCase); const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID); if (result.isFail()) { throw new WebinyError(`There is no model "${WEBINY_TASK_LOG_MODEL_ID}".`); @@ -156,11 +158,11 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { >( id: string ) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const entry = await identityContext.withoutAuthorization(async () => { const model = await getTaskModel(); - const getEntryById = context.container.resolve(GetEntryByIdUseCase); + const getEntryById = container.resolve(GetEntryByIdUseCase); const result = await getEntryById.execute(model, createRevisionId(id)); if (result.isFail()) { return null; @@ -181,13 +183,13 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { >( params?: IListTaskParams ) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const { entries, meta } = await identityContext.withoutAuthorization(async () => { const model = await getTaskModel(); - const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase); + const listLatestEntries = container.resolve(ListLatestEntriesUseCase); const result = await listLatestEntries.execute>(model, { ...params, - where: cmsWhereMapper.map({ + where: getCmsWhereMapper().map({ input: params?.where, fields: model.fields }) @@ -205,19 +207,18 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const createTask = async (data: ITaskCreateData) => { - const definition = context.tasks.getDefinition(data.definitionId); + const definition = container.resolve(TasksCrud).getDefinition(data.definitionId); if (!definition) { throw new TaskDefinitionNotFoundError(data.definitionId); } await validateTaskInput({ - context, definition, data }); - const identityContext = context.container.resolve(IdentityContext); - const eventPublisher = context.container.resolve(EventPublisher); + const identityContext = container.resolve(IdentityContext); + const eventPublisher = container.resolve(EventPublisher); const beforeCreateEvent = new TaskBeforeCreateEvent({ input: data @@ -226,7 +227,7 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { const result = await identityContext.withoutAuthorization(async () => { const model = await getTaskModel(); - const createEntry = context.container.resolve(CreateEntryUseCase); + const createEntry = container.resolve(CreateEntryUseCase); return createEntry.execute(model, { values: { ...data, @@ -263,8 +264,8 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { throw new TaskNotFoundError(); } - const identityContext = context.container.resolve(IdentityContext); - const eventPublisher = context.container.resolve(EventPublisher); + const identityContext = container.resolve(IdentityContext); + const eventPublisher = container.resolve(EventPublisher); const beforeUpdateEvent = new TaskBeforeUpdateEvent({ input: data, @@ -274,7 +275,7 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { const result = await identityContext.withoutAuthorization(async () => { const model = await getTaskModel(); - const updateEntry = context.container.resolve(UpdateEntryUseCase); + const updateEntry = container.resolve(UpdateEntryUseCase); return updateEntry.execute(model, createRevisionId(id), { values: { ...data @@ -305,8 +306,8 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { throw new TaskNotFoundError(); } - const identityContext = context.container.resolve(IdentityContext); - const eventPublisher = context.container.resolve(EventPublisher); + const identityContext = container.resolve(IdentityContext); + const eventPublisher = container.resolve(EventPublisher); const beforeDeleteEvent = new TaskBeforeDeleteEvent({ task @@ -315,7 +316,7 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { const result = await identityContext.withoutAuthorization(async () => { const model = await getTaskModel(); - const deleteEntry = context.container.resolve(DeleteEntryUseCase); + const deleteEntry = container.resolve(DeleteEntryUseCase); return deleteEntry.execute(model, createRevisionId(id)); }); @@ -330,10 +331,10 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const createLog = async (task: Pick, data: ITaskLogCreateInput) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const result = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const createEntry = context.container.resolve(CreateEntryUseCase); + const createEntry = container.resolve(CreateEntryUseCase); return createEntry.execute(model, { values: { ...data, @@ -350,10 +351,10 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const updateLog = async (id: string, data: ITaskLogUpdateInput) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const result = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const updateEntry = context.container.resolve(UpdateEntryUseCase); + const updateEntry = container.resolve(UpdateEntryUseCase); return updateEntry.execute(model, createRevisionId(id), { values: data }); @@ -367,10 +368,10 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const deleteLog = async (id: string) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const result = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const deleteEntry = context.container.resolve(DeleteEntryUseCase); + const deleteEntry = container.resolve(DeleteEntryUseCase); return deleteEntry.execute(model, id); }); @@ -382,11 +383,11 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const getLog = async (id: string): Promise => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); try { const result = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const getEntryById = context.container.resolve(GetEntryByIdUseCase); + const getEntryById = container.resolve(GetEntryByIdUseCase); return getEntryById.execute(model, id); }); @@ -404,10 +405,10 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { }; const getLatestLog = async (taskId: string): Promise => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const entry = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase); + const listLatestEntries = container.resolve(ListLatestEntriesUseCase); const result = await listLatestEntries.execute(model, { where: { values: { @@ -431,16 +432,16 @@ export const createTaskCrud = (context: Context): ITasksContextCrudObject => { return convertToLog(entry as unknown as CmsEntry); }; - const cleanupTaskSubtree = createCleanupTaskSubtree(context); + const cleanupTaskSubtree = createCleanupTaskSubtree(container); const listLogs = async (params: IListTaskLogParams) => { - const identityContext = context.container.resolve(IdentityContext); + const identityContext = container.resolve(IdentityContext); const { entries, meta } = await identityContext.withoutAuthorization(async () => { const model = await getLogModel(); - const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase); + const listLatestEntries = container.resolve(ListLatestEntriesUseCase); const result = await listLatestEntries.execute(model, { ...params, - where: cmsWhereMapper.map({ + where: getCmsWhereMapper().map({ input: params.where, fields: model.fields }) diff --git a/packages/background-tasks/src/api/crud/definition.tasks.ts b/packages/background-tasks/src/api/crud/definition.tasks.ts index 3f6909fe336..8e7a2af54ba 100644 --- a/packages/background-tasks/src/api/crud/definition.tasks.ts +++ b/packages/background-tasks/src/api/crud/definition.tasks.ts @@ -1,9 +1,10 @@ -import type { Context, ITasksContextDefinitionObject } from "~/api/types.js"; +import type { Container } from "@webiny/di"; +import type { ITasksContextDefinitionObject } from "~/api/types.js"; import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js"; import { GetTaskDefinitionUseCase } from "~/api/features/GetTaskDefinition/index.js"; import { ListTaskDefinitionsUseCase } from "~/api/features/ListTaskDefinitions/index.js"; -export const createDefinitionCrud = (context: Context): ITasksContextDefinitionObject => { +export const createDefinitionCrud = (container: Container): ITasksContextDefinitionObject => { return { getDefinition: < I extends TaskDefinition.TaskInput = TaskDefinition.TaskInput, @@ -11,7 +12,7 @@ export const createDefinitionCrud = (context: Context): ITasksContextDefinitionO >( id: string ) => { - const useCase = context.container.resolve(GetTaskDefinitionUseCase); + const useCase = container.resolve(GetTaskDefinitionUseCase); const result = useCase.execute(id); if (result.isOk()) { @@ -21,7 +22,7 @@ export const createDefinitionCrud = (context: Context): ITasksContextDefinitionO return null; }, listDefinitions: () => { - const useCase = context.container.resolve(ListTaskDefinitionsUseCase); + const useCase = container.resolve(ListTaskDefinitionsUseCase); return useCase.execute(); } }; diff --git a/packages/background-tasks/src/api/crud/service.tasks.ts b/packages/background-tasks/src/api/crud/service.tasks.ts index 6c1667e430b..0a073cff230 100644 --- a/packages/background-tasks/src/api/crud/service.tasks.ts +++ b/packages/background-tasks/src/api/crud/service.tasks.ts @@ -1,12 +1,13 @@ import WebinyError from "@webiny/error"; +import type { Container } from "@webiny/di"; import type { - Context, ITaskAbortParams, ITaskCreateData, ITaskLog, ITasksContextServiceObject, ITaskTriggerParams } from "~/api/types.js"; +import { TasksCrud } from "~/api/TasksCrud.js"; import { TaskDataStatus, TaskLogItemType } from "~/api/types.js"; import { NotFoundError } from "@webiny/handler-graphql"; import { createService } from "~/api/service/index.js"; @@ -48,7 +49,7 @@ const validateDelay = ( ); }; -export const createServiceCrud = (context: Context): ITasksContextServiceObject => { +export const createServiceCrud = (container: Container): ITasksContextServiceObject => { return { trigger: async < T extends TaskService.TaskInput = TaskService.TaskInput, @@ -56,9 +57,9 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject >( params: ITaskTriggerParams ): Promise, BaseError>> => { - const service = createService({ container: context.container }); + const service = createService({ container }); const { definition: id, input: inputValues, name, parent, delay = 0 } = params; - const definition = context.tasks.getDefinition(id); + const definition = container.resolve(TasksCrud).getDefinition(id); if (!definition) { throw new WebinyError(`Task definition was not found!`, "TASK_DEFINITION_ERROR", { id @@ -81,7 +82,7 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject let task: TaskService.Task; try { - task = await context.tasks.createTask(input); + task = await container.resolve(TasksCrud).createTask(input); } catch (ex) { console.log("Could not create the task.", ex); throw ex; @@ -107,11 +108,11 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject * In case of failure to create the Event Bridge Event, we need to delete the task that was meant to be created. * TODO maybe we can leave the task and update it as failed - with event bridge error? */ - await context.tasks.deleteTask(task.id); + await container.resolve(TasksCrud).deleteTask(task.id); throw ex; } - const updatedTask = await context.tasks.updateTask(task.id, { + const updatedTask = await container.resolve(TasksCrud).updateTask(task.id, { eventResponse: result }); @@ -120,8 +121,11 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject fetchServiceInfo: async ( input: TaskService.Task | string ): Promise>> => { - const service = createService({ container: context.container }); - const task = typeof input === "object" ? input : await context.tasks.getTask(input); + const service = createService({ container }); + const task = + typeof input === "object" + ? input + : await container.resolve(TasksCrud).getTask(input); if (!task && typeof input === "string") { throw new NotFoundError(`Task "${input}" was not found!`); } else if (!task) { @@ -149,12 +153,12 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject >( params: ITaskAbortParams ): Promise, BaseError>> => { - const task = await context.tasks.getTask(params.id); + const task = await container.resolve(TasksCrud).getTask(params.id); if (!task) { return Result.fail(new TaskNotFoundError()); } - const definition = context.tasks.getDefinition(task.definitionId); + const definition = container.resolve(TasksCrud).getDefinition(task.definitionId); if (!definition) { return Result.fail(new TaskDefinitionNotFoundError(task.definitionId)); } @@ -173,19 +177,19 @@ export const createServiceCrud = (context: Context): ITasksContextServiceObject } let taskLog: ITaskLog | null = null; try { - taskLog = await context.tasks.getLatestLog(task.id); + taskLog = await container.resolve(TasksCrud).getLatestLog(task.id); } catch {} if (!taskLog) { - taskLog = await context.tasks.createLog(task, { + taskLog = await container.resolve(TasksCrud).createLog(task, { iteration: 1, executionName: task.executionName }); } try { - const updatedTask = await context.tasks.updateTask(task.id, { + const updatedTask = await container.resolve(TasksCrud).updateTask(task.id, { taskStatus: TaskDataStatus.ABORTED }); - await context.tasks.updateLog(taskLog.id, { + await container.resolve(TasksCrud).updateLog(taskLog.id, { items: taskLog.items.concat([ { message: params.message || "Task aborted.", diff --git a/packages/background-tasks/src/api/graphql/BackgroundTaskSettingsSchema.ts b/packages/background-tasks/src/api/graphql/BackgroundTaskSettingsSchema.ts deleted file mode 100644 index 5e385b61959..00000000000 --- a/packages/background-tasks/src/api/graphql/BackgroundTaskSettingsSchema.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { GraphQLSchemaPlugin } from "@webiny/handler-graphql"; -import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js"; -import { ContextPlugin } from "@webiny/handler"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import type { Context } from "~/api/types.js"; -import { GetBackgroundTaskSettingsRepository } from "~/api/features/GetBackgroundTaskSettings/abstractions.js"; -import { UpdateBackgroundTaskSettingsUseCase } from "~/api/features/UpdateBackgroundTaskSettings/abstractions.js"; -import type { IUpdateBackgroundTaskSettingsInput } from "~/api/features/UpdateBackgroundTaskSettings/abstractions.js"; -import type { Plugin } from "@webiny/plugins/types.js"; -import { checkPermissions } from "./checkPermissions.js"; - -interface IUpdateSettingsArgs { - input: IUpdateBackgroundTaskSettingsInput; -} - -const resolve = async (fn: () => Promise) => { - try { - const data = await fn(); - return { data, error: null }; - } catch (error: any) { - return { - data: null, - error: { - message: error.message, - code: error.code, - data: error.data - } - }; - } -}; - -export const createBackgroundTaskSettingsGraphQL = (): Plugin[] => { - const plugin = new ContextPlugin(async ctx => { - if (!ctx.container.resolve(TenantContext).getTenant()) { - return; - } - - const schemaPlugin = new GraphQLSchemaPlugin({ - typeDefs: /* GraphQL */ ` - type WebinyBackgroundTaskSettings { - retentionDays: Int - } - - type WebinyBackgroundTaskSettingsResponse { - data: WebinyBackgroundTaskSettings - error: WebinyBackgroundTaskError - } - - input UpdateBackgroundTaskSettingsInput { - retentionDays: Int - } - - extend type WebinyBackgroundTaskQuery { - getSettings: WebinyBackgroundTaskSettingsResponse - } - - extend type WebinyBackgroundTaskMutation { - updateSettings( - input: UpdateBackgroundTaskSettingsInput! - ): WebinyBackgroundTaskSettingsResponse - } - `, - resolvers: { - WebinyBackgroundTaskQuery: { - getSettings: async (_, __, context) => { - return resolve(async () => { - await checkPermissions(context, { rwd: "r" }); - const repository = context.container.resolve( - GetBackgroundTaskSettingsRepository - ); - const result = await repository.execute(); - if (result.isFail()) { - throw result.error; - } - return result.value; - }); - } - }, - WebinyBackgroundTaskMutation: { - updateSettings: async (_, args: IUpdateSettingsArgs, context) => { - return resolve(async () => { - const useCase = context.container.resolve( - UpdateBackgroundTaskSettingsUseCase - ); - const result = await useCase.execute(args.input); - if (result.isFail()) { - throw result.error; - } - return result.value; - }); - } - } - } - }); - - schemaPlugin.name = "backgroundTasks.settings.graphql.schema"; - - ctx.container.registerInstance(CoreGraphQLSchemaFactory, { - async execute(builder) { - const { schema } = schemaPlugin; - if (schema.typeDefs) { - builder.addTypeDefs(schema.typeDefs); - } - if (schema.resolvers) { - builder.addLegacyResolvers(schema.resolvers as Record); - } - return builder; - } - }); - }); - - plugin.name = "backgroundTasks.settings.graphql"; - - return [plugin]; -}; diff --git a/packages/background-tasks/src/api/graphql/BackgroundTasksContextualSchema.ts b/packages/background-tasks/src/api/graphql/BackgroundTasksContextualSchema.ts new file mode 100644 index 00000000000..549dc1f0a6e --- /dev/null +++ b/packages/background-tasks/src/api/graphql/BackgroundTasksContextualSchema.ts @@ -0,0 +1,447 @@ +import type { Container } from "@webiny/di"; +import type { GraphQLSchema } from "graphql"; +import { makeExecutableSchema } from "@graphql-tools/schema"; +import { mergeResolvers } from "@graphql-tools/merge"; +import { GraphQLContextualSchema } from "@webiny/handler-graphql"; +import type { IGraphQLContextualSchema } from "@webiny/handler-graphql"; +import { renderSortEnum } from "@webiny/api-headless-cms/utils/renderSortEnum.js"; +import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js"; +import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js"; +import { createBaseContentSchema } from "@webiny/api-headless-cms/graphql/schema/baseContentSchema.js"; +import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; +import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; +import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js"; +import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js"; +import type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from "~/api/types.js"; +import { TasksCrud } from "~/api/TasksCrud.js"; +import { ListTaskDefinitionsUseCase } from "~/api/features/ListTaskDefinitions/abstractions.js"; +import { TriggerTaskUseCase } from "~/api/features/TriggerTask/abstractions.js"; +import { AbortTaskUseCase } from "~/api/features/AbortTask/abstractions.js"; +import { GetBackgroundTaskSettingsRepository } from "~/api/features/GetBackgroundTaskSettings/abstractions.js"; +import { UpdateBackgroundTaskSettingsUseCase } from "~/api/features/UpdateBackgroundTaskSettings/abstractions.js"; +import type { IUpdateBackgroundTaskSettingsInput } from "~/api/features/UpdateBackgroundTaskSettings/abstractions.js"; +import { emptyResolver, resolve, resolveList } from "./utils.js"; +import { checkPermissions } from "./checkPermissions.js"; + +interface IGetTaskQueryParams { + id: string; +} + +interface IAbortTaskMutationParams { + id: string; + message?: string; +} + +interface ITriggerTaskMutationParams { + name?: string; + definition: string; + input?: Record; + delay?: number; +} + +interface IDeleteTaskMutationParams { + id: string; +} + +interface IUpdateSettingsArgs { + input: IUpdateBackgroundTaskSettingsInput; +} + +/** + * Builds the background-tasks GraphQL schema after context enhancement — the schema shape depends on + * the per-tenant CMS task/log content models, so it can only be rendered at request time (once the + * tenant is known and the CMS facade is resolvable). Replaces the legacy `createBackgroundTaskGraphQL` + * + `createBackgroundTaskSettingsGraphQL` ContextPlugins; the settings schema is merged in here + * because it extends the task schema's `WebinyBackgroundTaskQuery`/`Mutation` types. + */ +class BackgroundTasksContextualSchemaImpl implements IGraphQLContextualSchema { + constructor( + private tenantCtx: TenantContext.Interface, + private identityCtx: IdentityContext.Interface + ) {} + + async build(ctx: Record): Promise { + if (!this.tenantCtx.getTenant()) { + return makeExecutableSchema({ + typeDefs: "type Query\ntype Mutation", + assumeValidSDL: true + }); + } + + const container = ctx.container as Container; + + const tasksCrud = container.resolve(TasksCrud); + const taskModel = await tasksCrud.getTaskModel(); + const logModel = await tasksCrud.getLogModel(); + + // Resolve the CMS use-cases lazily here (at build/request time) rather than as constructor + // dependencies — they depend on registrations the CMS initializer only makes during its own + // build(), so eager injection would fail when the engine constructs all contextual schemas. + const listModels = container.resolve(ListModelsUseCase); + const fieldRegistry = container.resolve(CmsModelFieldToGraphQLRegistry); + + const models = await this.identityCtx.withoutAuthorization(async () => { + const modelsResult = await listModels.execute({ includePrivate: false }); + return modelsResult.value.filter(model => model.fields.length > 0); + }); + + const taskFields = renderFields({ + models, + model: taskModel, + fields: taskModel.fields, + type: "manage", + fieldRegistry + }); + + const logFields = renderFields({ + models, + model: logModel, + fields: logModel.fields.filter(field => field.fieldId !== "task"), + type: "manage", + fieldRegistry + }); + + const listTasksFilterFieldsRender = renderListFilterFields({ + model: taskModel, + fields: taskModel.fields, + type: "manage", + fieldRegistry, + excludeFields: ["entryId"] + }); + + const listLogsFilterFieldsRender = renderListFilterFields({ + model: logModel, + fields: logModel.fields, + type: "manage", + fieldRegistry, + excludeFields: ["entryId"] + }); + + const sortTasksEnumRender = renderSortEnum({ + model: taskModel, + fields: taskModel.fields, + fieldRegistry, + sorters: [] + }); + + const sortLogsEnumRender = renderSortEnum({ + model: logModel, + fields: logModel.fields, + fieldRegistry, + sorters: [] + }); + + const typeDefs = /* GraphQL */ ` + type WebinyBackgroundTaskError { + message: String + code: String + data: JSON + stack: String + } + + ${taskFields.map(f => f.typeDefs).join("\n")} + ${logFields.map(f => f.typeDefs).join("\n")} + + type WebinyBackgroundTask { + id: String! + createdOn: DateTime! + savedOn: DateTime + createdBy: WebinyBackgroundTaskIdentity! + logs( + where: WebinyBackgroundTaskLogListWhereInput + limit: Number + sort: [WebinyBackgroundTaskLogListSorter!] + ): [WebinyBackgroundTaskLog!]! + ${taskFields.map(f => f.fields).join("\n")} + } + + type WebinyBackgroundTaskResponse { + data: WebinyBackgroundTask + error: WebinyBackgroundTaskError + } + + type WebinyBackgroundTaskMeta { + cursor: String + hasMoreItems: Boolean! + totalCount: Int! + } + + type WebinyBackgroundTaskListResponse { + data: [WebinyBackgroundTask!] + meta: WebinyBackgroundTaskMeta + error: WebinyBackgroundTaskError + } + + type WebinyBackgroundTaskLog { + id: String! + createdOn: DateTime! + createdBy: WebinyBackgroundTaskIdentity! + task: WebinyBackgroundTask! + ${logFields.map(f => f.fields).join("\n")} + } + + type WebinyBackgroundTaskLogListResponse { + data: [WebinyBackgroundTaskLog!] + meta: WebinyBackgroundTaskMeta + error: WebinyBackgroundTaskError + } + + type WebinyBackgroundTaskDefinition { + id: String! + title: String! + description: String + } + + type WebinyBackgroundTaskListDefinitionsResponse { + data: [WebinyBackgroundTaskDefinition!] + error: WebinyBackgroundTaskError + } + + type WebinyBackgroundTaskIdentity { + id: String! + displayName: String! + type: String + } + + type WebinyBackgroundTaskTriggerResponse { + data: WebinyBackgroundTask + error: WebinyBackgroundTaskError + } + + type WebinyBackgroundTaskDeleteResponse { + data: Boolean + error: WebinyBackgroundTaskError + } + + input WebinyBackgroundTaskListWhereInput { + ${listTasksFilterFieldsRender.allFiltersAsString() || "_empty: String"} + } + + input WebinyBackgroundTaskLogListWhereInput { + ${listLogsFilterFieldsRender.allFiltersAsString() || "_empty: String"} + } + + enum WebinyBackgroundTaskListSorter { + ${sortTasksEnumRender} + } + + enum WebinyBackgroundTaskLogListSorter { + ${sortLogsEnumRender} + } + + type WebinyBackgroundTaskQuery { + _empty: String + } + + type WebinyBackgroundTaskMutation { + _empty: String + } + + extend type Query { + backgroundTasks: WebinyBackgroundTaskQuery + } + + extend type Mutation { + backgroundTasks: WebinyBackgroundTaskMutation + } + + extend type WebinyBackgroundTaskQuery { + getTask(id: ID!): WebinyBackgroundTaskResponse! + listTasks( + where: WebinyBackgroundTaskListWhereInput + sort: [WebinyBackgroundTaskListSorter!] + limit: Int + after: String + search: String + ): WebinyBackgroundTaskListResponse! + listDefinitions: WebinyBackgroundTaskListDefinitionsResponse! + + listLogs( + where: WebinyBackgroundTaskLogListWhereInput + sort: [WebinyBackgroundTaskLogListSorter!] + limit: Int + after: String + search: String + ): WebinyBackgroundTaskLogListResponse! + } + + extend type WebinyBackgroundTaskMutation { + triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse! + abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse! + deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse! + } + + type WebinyBackgroundTaskSettings { + retentionDays: Int + } + + type WebinyBackgroundTaskSettingsResponse { + data: WebinyBackgroundTaskSettings + error: WebinyBackgroundTaskError + } + + input UpdateBackgroundTaskSettingsInput { + retentionDays: Int + } + + extend type WebinyBackgroundTaskQuery { + getSettings: WebinyBackgroundTaskSettingsResponse + } + + extend type WebinyBackgroundTaskMutation { + updateSettings( + input: UpdateBackgroundTaskSettingsInput! + ): WebinyBackgroundTaskSettingsResponse + } + `; + + const resolvers = { + Query: { + backgroundTasks: emptyResolver + }, + Mutation: { + backgroundTasks: emptyResolver + }, + WebinyBackgroundTaskQuery: { + getTask: async (_: unknown, args: IGetTaskQueryParams, context: Context) => { + return resolve(async () => { + await checkPermissions(context, { rwd: "r" }); + return await context.container.resolve(TasksCrud).getTask(args.id); + }); + }, + listTasks: async (_: unknown, args: IListTaskParams, context: Context) => { + return resolveList(async () => { + await checkPermissions(context, { rwd: "r" }); + return await context.container.resolve(TasksCrud).listTasks(args); + }); + }, + listDefinitions: async (_: unknown, __: unknown, context: Context) => { + return resolve(async () => { + await checkPermissions(context, { rwd: "r" }); + const result = context.container + .resolve(ListTaskDefinitionsUseCase) + .execute(); + /** + * Do not output private tasks. + */ + return result.filter(item => { + return !item.isPrivate; + }); + }); + }, + listLogs: async (_: unknown, args: IListTaskLogParams, context: Context) => { + return resolveList(async () => { + await checkPermissions(context, { rwd: "r" }); + return await context.container.resolve(TasksCrud).listLogs(args); + }); + }, + getSettings: async (_: unknown, __: unknown, context: Context) => { + return resolve(async () => { + await checkPermissions(context, { rwd: "r" }); + const repository = context.container.resolve( + GetBackgroundTaskSettingsRepository + ); + const result = await repository.execute(); + if (result.isFail()) { + throw result.error; + } + return result.value; + }); + } + }, + WebinyBackgroundTaskMutation: { + abortTask: async (_: unknown, args: IAbortTaskMutationParams, context: Context) => { + await checkPermissions(context, { rwd: "w" }); + return resolve(async () => { + const result = await context.container + .resolve(AbortTaskUseCase) + .execute(args); + if (result.isOk()) { + return result.value; + } + + throw result.error; + }); + }, + triggerTask: async ( + _: unknown, + args: ITriggerTaskMutationParams, + context: Context + ) => { + await checkPermissions(context, { rwd: "w" }); + return resolve(async () => { + const result = await context.container + .resolve(TriggerTaskUseCase) + .execute(args); + if (result.isOk()) { + return result.value; + } + + throw result.error; + }); + }, + deleteTask: async ( + _: unknown, + args: IDeleteTaskMutationParams, + context: Context + ) => { + await checkPermissions(context, { rwd: "d" }); + return resolve(async () => { + return await context.container.resolve(TasksCrud).deleteTask(args.id); + }); + }, + updateSettings: async (_: unknown, args: IUpdateSettingsArgs, context: Context) => { + return resolve(async () => { + const useCase = context.container.resolve( + UpdateBackgroundTaskSettingsUseCase + ); + const result = await useCase.execute(args.input); + if (result.isFail()) { + throw result.error; + } + return result.value; + }); + } + }, + /** + * Custom resolvers for fields + */ + WebinyBackgroundTask: { + logs: async (parent: ITask, args: IListTaskLogParams, context: Context) => { + const { items } = await context.container.resolve(TasksCrud).listLogs({ + sort: ["createdBy_ASC"], + limit: 10000, + ...args, + where: { + ...args?.where, + task: parent.id + } + }); + return items; + } + }, + WebinyBackgroundTaskLog: { + task: async (parent: ITaskLog, _: unknown, context: Context) => { + return await context.container.resolve(TasksCrud).getTask(parent.task); + } + } + }; + + // The generated task/log model schema references CMS base scalars (DateTime, JSON, Number, + // ...). Include createBaseContentSchema() — which declares those scalars, their resolvers, and + // the base Query/Mutation types — so this standalone schema is self-contained and valid before + // the engine merges it with the composed static schema. + const baseContent = createBaseContentSchema(); + + return makeExecutableSchema({ + typeDefs: [baseContent.schema.typeDefs as string, typeDefs], + resolvers: mergeResolvers([baseContent.schema.resolvers as any, resolvers as any]), + inheritResolversFromInterfaces: true + }); + } +} + +export const BackgroundTasksContextualSchema = GraphQLContextualSchema.createImplementation({ + implementation: BackgroundTasksContextualSchemaImpl, + dependencies: [TenantContext, IdentityContext] +}); diff --git a/packages/background-tasks/src/api/graphql/index.ts b/packages/background-tasks/src/api/graphql/index.ts deleted file mode 100644 index 6f25fc79d2a..00000000000 --- a/packages/background-tasks/src/api/graphql/index.ts +++ /dev/null @@ -1,396 +0,0 @@ -import { GraphQLSchemaPlugin } from "@webiny/handler-graphql"; -import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js"; -import { renderSortEnum } from "@webiny/api-headless-cms/utils/renderSortEnum.js"; -import { ContextPlugin } from "@webiny/handler"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -import type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from "~/api/types.js"; -import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js"; -import { emptyResolver, resolve, resolveList } from "./utils.js"; -import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js"; -import { checkPermissions } from "./checkPermissions.js"; -import type { Plugin } from "@webiny/plugins/types.js"; -import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js"; -import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js"; -import { TasksCrud } from "~/api/TasksCrud.js"; -import { ListTaskDefinitionsUseCase } from "~/api/features/ListTaskDefinitions/abstractions.js"; -import { TriggerTaskUseCase } from "~/api/features/TriggerTask/abstractions.js"; -import { AbortTaskUseCase } from "~/api/features/AbortTask/abstractions.js"; - -interface IGetTaskQueryParams { - id: string; -} - -interface IAbortTaskMutationParams { - id: string; - message?: string; -} - -interface ITriggerTaskMutationParams { - name?: string; - definition: string; - input?: Record; - delay?: number; -} - -interface IDeleteTaskMutationParams { - id: string; -} - -const createGraphQL = () => { - const plugin = new ContextPlugin(async ctx => { - if (!ctx.container.resolve(TenantContext).getTenant()) { - return; - } - - const tasksCrud = ctx.container.resolve(TasksCrud); - const taskModel = await tasksCrud.getTaskModel(); - const logModel = await tasksCrud.getLogModel(); - - const listModels = ctx.container.resolve(ListModelsUseCase); - const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry); - - const models = await ctx.container - .resolve(IdentityContext) - .withoutAuthorization(async () => { - const modelsResult = await listModels.execute({ includePrivate: false }); - - return modelsResult.value.filter(model => model.fields.length > 0); - }); - const taskFields = renderFields({ - models, - model: taskModel, - fields: taskModel.fields, - type: "manage", - fieldRegistry - }); - - const logFields = renderFields({ - models, - model: logModel, - fields: logModel.fields.filter(field => field.fieldId !== "task"), - type: "manage", - fieldRegistry - }); - - const listTasksFilterFieldsRender = renderListFilterFields({ - model: taskModel, - fields: taskModel.fields, - type: "manage", - fieldRegistry, - excludeFields: ["entryId"] - }); - - const listLogsFilterFieldsRender = renderListFilterFields({ - model: logModel, - fields: logModel.fields, - type: "manage", - fieldRegistry, - excludeFields: ["entryId"] - }); - - const sortTasksEnumRender = renderSortEnum({ - model: taskModel, - fields: taskModel.fields, - fieldRegistry, - sorters: [] - }); - - const sortLogsEnumRender = renderSortEnum({ - model: logModel, - fields: logModel.fields, - fieldRegistry, - sorters: [] - }); - - const plugin = new GraphQLSchemaPlugin({ - typeDefs: /* GraphQL */ ` - type WebinyBackgroundTaskError { - message: String - code: String - data: JSON - stack: String - } - - ${taskFields.map(f => f.typeDefs).join("\n")} - ${logFields.map(f => f.typeDefs).join("\n")} - - type WebinyBackgroundTask { - id: String! - createdOn: DateTime! - savedOn: DateTime - createdBy: WebinyBackgroundTaskIdentity! - logs( - where: WebinyBackgroundTaskLogListWhereInput - limit: Number - sort: [WebinyBackgroundTaskLogListSorter!] - ): [WebinyBackgroundTaskLog!]! - ${taskFields.map(f => f.fields).join("\n")} - } - - type WebinyBackgroundTaskResponse { - data: WebinyBackgroundTask - error: WebinyBackgroundTaskError - } - - type WebinyBackgroundTaskMeta { - cursor: String - hasMoreItems: Boolean! - totalCount: Int! - } - - type WebinyBackgroundTaskListResponse { - data: [WebinyBackgroundTask!] - meta: WebinyBackgroundTaskMeta - error: WebinyBackgroundTaskError - } - - type WebinyBackgroundTaskLog { - id: String! - createdOn: DateTime! - createdBy: WebinyBackgroundTaskIdentity! - task: WebinyBackgroundTask! - ${logFields.map(f => f.fields).join("\n")} - } - - type WebinyBackgroundTaskLogListResponse { - data: [WebinyBackgroundTaskLog!] - meta: WebinyBackgroundTaskMeta - error: WebinyBackgroundTaskError - } - - type WebinyBackgroundTaskDefinition { - id: String! - title: String! - description: String - } - - type WebinyBackgroundTaskListDefinitionsResponse { - data: [WebinyBackgroundTaskDefinition!] - error: WebinyBackgroundTaskError - } - - type WebinyBackgroundTaskIdentity { - id: String! - displayName: String! - type: String - } - - type WebinyBackgroundTaskTriggerResponse { - data: WebinyBackgroundTask - error: WebinyBackgroundTaskError - } - - type WebinyBackgroundTaskDeleteResponse { - data: Boolean - error: WebinyBackgroundTaskError - } - - input WebinyBackgroundTaskListWhereInput { - ${listTasksFilterFieldsRender.allFiltersAsString() || "_empty: String"} - } - - input WebinyBackgroundTaskLogListWhereInput { - ${listLogsFilterFieldsRender.allFiltersAsString() || "_empty: String"} - } - - enum WebinyBackgroundTaskListSorter { - ${sortTasksEnumRender} - } - - enum WebinyBackgroundTaskLogListSorter { - ${sortLogsEnumRender} - } - - type WebinyBackgroundTaskQuery { - _empty: String - } - - type WebinyBackgroundTaskMutation { - _empty: String - } - - extend type Query { - backgroundTasks: WebinyBackgroundTaskQuery - } - - extend type Mutation { - backgroundTasks: WebinyBackgroundTaskMutation - } - - extend type WebinyBackgroundTaskQuery { - getTask(id: ID!): WebinyBackgroundTaskResponse! - listTasks( - where: WebinyBackgroundTaskListWhereInput - sort: [WebinyBackgroundTaskListSorter!] - limit: Int - after: String - search: String - ): WebinyBackgroundTaskListResponse! - listDefinitions: WebinyBackgroundTaskListDefinitionsResponse! - - listLogs( - where: WebinyBackgroundTaskLogListWhereInput - sort: [WebinyBackgroundTaskLogListSorter!] - limit: Int - after: String - search: String - ): WebinyBackgroundTaskLogListResponse! - } - - extend type WebinyBackgroundTaskMutation { - triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse! - abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse! - deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse! - } - `, - resolvers: { - Query: { - backgroundTasks: emptyResolver - }, - Mutation: { - backgroundTasks: emptyResolver - }, - WebinyBackgroundTaskQuery: { - /** - * We need to think of a way to pass the args type to the resolver without assigning it directly. - */ - getTask: async (_, args: IGetTaskQueryParams, context) => { - return resolve(async () => { - await checkPermissions(context, { - rwd: "r" - }); - return await context.container.resolve(TasksCrud).getTask(args.id); - }); - }, - listTasks: async (_, args: IListTaskParams, context) => { - return resolveList(async () => { - await checkPermissions(context, { - rwd: "r" - }); - return await context.container.resolve(TasksCrud).listTasks(args); - }); - }, - listDefinitions: async (_, __, context) => { - return resolve(async () => { - await checkPermissions(context, { - rwd: "r" - }); - const result = context.container - .resolve(ListTaskDefinitionsUseCase) - .execute(); - /** - * Do not output private tasks. - */ - return result.filter(item => { - return !item.isPrivate; - }); - }); - }, - listLogs: async (_, args: IListTaskLogParams, context) => { - return resolveList(async () => { - await checkPermissions(context, { - rwd: "r" - }); - return await context.container.resolve(TasksCrud).listLogs(args); - }); - } - }, - WebinyBackgroundTaskMutation: { - /** - * We need to think of a way to pass the args type to the resolver without assigning it directly. - */ - abortTask: async (_, args: IAbortTaskMutationParams, context) => { - await checkPermissions(context, { - rwd: "w" - }); - return resolve(async () => { - const result = await context.container - .resolve(AbortTaskUseCase) - .execute(args); - if (result.isOk()) { - return result.value; - } - - throw result.error; - }); - }, - /** - * We need to think of a way to pass the args type to the resolver without assigning it directly. - */ - triggerTask: async (_, args: ITriggerTaskMutationParams, context) => { - await checkPermissions(context, { - rwd: "w" - }); - return resolve(async () => { - const result = await context.container - .resolve(TriggerTaskUseCase) - .execute(args); - if (result.isOk()) { - return result.value; - } - - throw result.error; - }); - }, - /** - * We need to think of a way to pass the args type to the resolver without assigning it directly. - */ - deleteTask: async (_, args: IDeleteTaskMutationParams, context) => { - await checkPermissions(context, { - rwd: "d" - }); - return resolve(async () => { - return await context.container.resolve(TasksCrud).deleteTask(args.id); - }); - } - }, - /** - * Custom resolvers for fields - */ - WebinyBackgroundTask: { - logs: async (parent: ITask, args: IListTaskLogParams, context) => { - const { items } = await context.container.resolve(TasksCrud).listLogs({ - sort: ["createdBy_ASC"], - limit: 10000, - ...args, - where: { - ...args?.where, - task: parent.id - } - }); - return items; - } - }, - WebinyBackgroundTaskLog: { - task: async (parent: ITaskLog, _, context) => { - return await context.container.resolve(TasksCrud).getTask(parent.task); - } - } - } - }); - - plugin.name = "tasks.graphql.schema"; - - ctx.container.registerInstance(CoreGraphQLSchemaFactory, { - async execute(builder) { - const { schema } = plugin; - if (schema.typeDefs) { - builder.addTypeDefs(schema.typeDefs); - } - if (schema.resolvers) { - builder.addLegacyResolvers(schema.resolvers as Record); - } - return builder; - } - }); - }); - - plugin.name = "tasks.graphql"; - - return plugin; -}; - -export const createBackgroundTaskGraphQL = (): Plugin[] => { - return [createGraphQL()]; -}; diff --git a/packages/background-tasks/src/api/index.ts b/packages/background-tasks/src/api/index.ts index 98d20fd2e97..a5c302690f5 100644 --- a/packages/background-tasks/src/api/index.ts +++ b/packages/background-tasks/src/api/index.ts @@ -1,11 +1,10 @@ export type { Timer } from "./abstractions/Timer.js"; export { TaskService } from "./domain/TaskService.js"; -export { createBackgroundTaskGraphQL } from "./graphql/index.js"; -export { createBackgroundTaskContext } from "./context.js"; export * from "./response/index.js"; export * from "./types.js"; export { BackgroundTasksFeature } from "./BackgroundTasksFeature.js"; +export { BackgroundTasksContextualSchema } from "./graphql/BackgroundTasksContextualSchema.js"; export { TasksCrud } from "./TasksCrud.js"; export { TriggerTaskUseCase } from "./features/TriggerTask/abstractions.js"; diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index 1ef2f4a62c5..20adf711caf 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -267,9 +267,11 @@ "files": [ "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", "/packages/handler-graphql/package.json", "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", "/packages/handler-graphql/package.json" ] }, @@ -285,11 +287,13 @@ "/packages/api-audit-logs/package.json", "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", "/packages/handler-db/package.json", "/packages/handler-graphql/package.json", "/packages/api-audit-logs/package.json", "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", "/packages/handler-db/package.json", "/packages/handler-graphql/package.json" ] @@ -5997,6 +6001,7 @@ { "file": "/packages/api-audit-logs/package.json", "types": ["dependencies"] }, { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, { "file": "/packages/handler-db/package.json", "types": ["dependencies"] }, { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } ] @@ -6254,6 +6259,7 @@ "files": [ { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } ] } diff --git a/packages/testing/src/context/plugins.ts b/packages/testing/src/context/plugins.ts index 00296d6714a..d846d1f8ee3 100644 --- a/packages/testing/src/context/plugins.ts +++ b/packages/testing/src/context/plugins.ts @@ -1,10 +1,6 @@ import type { Plugin, PluginCollection } from "@webiny/plugins/types.js"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; -import { - createBackgroundTaskContext, - createBackgroundTaskGraphQL, - TaskService -} from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types/index.js"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; @@ -87,16 +83,14 @@ export const createHandlerCore = (params: CreateHandlerCoreParams = {}) => { HeadlessCmsFeature.register(container, { type: "manage", extraPlugins: extraCmsPlugins }); + // Background tasks are DI-native now — the feature registers TasksCrud, the GraphQL + // contextual schema, decorators, etc. The mock TaskService override (below) must come + // AFTER so task triggering in tests goes through the mock transport, not the real facade. + BackgroundTasksFeature.register(container); container.registerInstance(TaskService, createMockTaskService()); }; - const legacyPlugins = [ - topPlugins, - createBackgroundTaskContext(), - ...createBackgroundTaskGraphQL(), - plugins, - bottomPlugins - ]; + const legacyPlugins = [topPlugins, plugins, bottomPlugins]; return { tenant, diff --git a/yarn.lock b/yarn.lock index 9edef9a3735..85b9aed5d2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10420,7 +10420,6 @@ __metadata: "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/feature": "npm:0.0.0" - "@webiny/plugins": "npm:0.0.0" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" languageName: unknown @@ -10432,7 +10431,6 @@ __metadata: dependencies: "@webiny/api-elasticsearch-tasks": "npm:0.0.0" "@webiny/api-headless-cms-es-tasks": "npm:0.0.0" - "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" rimraf: "npm:^6.1.3" @@ -11336,6 +11334,7 @@ __metadata: "@webiny/api-website-builder": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" + "@webiny/di": "npm:^1.0.2" "@webiny/feature": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/testing": "npm:0.0.0" @@ -12332,6 +12331,8 @@ __metadata: version: 0.0.0-use.local resolution: "@webiny/background-tasks@workspace:packages/background-tasks" dependencies: + "@graphql-tools/merge": "npm:^9.1.10" + "@graphql-tools/schema": "npm:^10.0.34" "@webiny/admin-ui": "npm:0.0.0" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" From c5e911c59d154693b814ceb0eb1f5ed88662f073 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 16:52:07 +0200 Subject: [PATCH 11/31] wip:13 (8o8jn) --- packages/api-scheduler/package.json | 2 - packages/api-scheduler/src/context.ts | 45 ------------------- packages/api-scheduler/src/createScheduler.ts | 7 --- packages/api-scheduler/src/index.ts | 3 -- packages/api-scheduler/tsconfig.build.json | 6 --- packages/api-scheduler/tsconfig.json | 6 --- yarn.lock | 2 - 7 files changed, 71 deletions(-) delete mode 100644 packages/api-scheduler/src/context.ts delete mode 100644 packages/api-scheduler/src/createScheduler.ts diff --git a/packages/api-scheduler/package.json b/packages/api-scheduler/package.json index 6c983f61582..0b5baeae584 100644 --- a/packages/api-scheduler/package.json +++ b/packages/api-scheduler/package.json @@ -26,9 +26,7 @@ "@webiny/event-handler-aws": "0.0.0", "@webiny/event-handler-core": "0.0.0", "@webiny/feature": "0.0.0", - "@webiny/handler": "0.0.0", "@webiny/handler-graphql": "0.0.0", - "@webiny/plugins": "0.0.0", "@webiny/utils": "0.0.0", "graphql": "^16.14.2" }, diff --git a/packages/api-scheduler/src/context.ts b/packages/api-scheduler/src/context.ts deleted file mode 100644 index cc9ea8bbec8..00000000000 --- a/packages/api-scheduler/src/context.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; -import { SCHEDULE_MODEL_ID } from "~/constants.js"; -import { ScheduledActionModel } from "~/shared/abstractions.js"; -import { SchedulePrivateModel } from "~/domain/SchedulePrivateModel.js"; -import { SchedulerFeature } from "~/features/SchedulerFeature.js"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; -import { SchedulerPermissionsFeature } from "~/features/permissions/feature.js"; -import { ContextPlugin } from "@webiny/api"; -import { createRegisterExtensionPlugin } from "@webiny/handler"; -import { NamespaceHandlerExecutionerFeature } from "~/features/NamespaceHandler/feature.js"; -import { SchedulerGraphQLFactoryFeature } from "~/graphql/feature.js"; - -export const registerSchedulerExtension = () => { - const extensionPlugin = createRegisterExtensionPlugin(async context => { - context.container.register(SchedulePrivateModel); - SchedulerPermissionsFeature.register(context.container); - SchedulerGraphQLFactoryFeature.register(context.container); - NamespaceHandlerExecutionerFeature.register(context.container); - SchedulerFeature.register(context.container); - }); - extensionPlugin.name = "scheduler.base.extension"; - - const contextPlugin = new ContextPlugin(async context => { - const tenantContext = context.container.resolve(TenantContext); - const getModel = context.container.resolve(GetModelUseCase); - - if (!tenantContext.getTenant()) { - return; - } - - await context.container.resolve(IdentityContext).withoutAuthorization(async () => { - const schedulerModel = await getModel.execute(SCHEDULE_MODEL_ID); - if (schedulerModel.isFail()) { - throw schedulerModel.error; - } - context.container.registerInstance(ScheduledActionModel, schedulerModel.value); - }); - }); - - contextPlugin.name = "scheduler.base.context"; - - return [extensionPlugin, contextPlugin]; -}; diff --git a/packages/api-scheduler/src/createScheduler.ts b/packages/api-scheduler/src/createScheduler.ts deleted file mode 100644 index 932bd07c66a..00000000000 --- a/packages/api-scheduler/src/createScheduler.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Plugin } from "@webiny/plugins/types.js"; -import { registerSchedulerExtension } from "~/context.js"; - -/** @deprecated use SchedulerFeature.register() + registerSchedulerAwsExtension() from @webiny/api-scheduler-aws */ -export const createScheduler = (): Plugin[] => { - return [...registerSchedulerExtension()]; -}; diff --git a/packages/api-scheduler/src/index.ts b/packages/api-scheduler/src/index.ts index 3e0569ff622..01148112b43 100644 --- a/packages/api-scheduler/src/index.ts +++ b/packages/api-scheduler/src/index.ts @@ -7,9 +7,6 @@ export { export type { IScheduledAction } from "./shared/abstractions.js"; export { ScheduledActionId } from "./domain/ScheduledActionId.js"; -export { createScheduler } from "./createScheduler.js"; export { SchedulerFeature } from "./SchedulerFeature.js"; export type { ISchedulerFeatureConfig } from "./SchedulerFeature.js"; export { ScheduledActionLambdaHandler } from "./ScheduledActionLambdaHandler.js"; - -export { registerSchedulerExtension } from "./context.js"; diff --git a/packages/api-scheduler/tsconfig.build.json b/packages/api-scheduler/tsconfig.build.json index 0e5c7ddbc4c..c5fd9414ce3 100644 --- a/packages/api-scheduler/tsconfig.build.json +++ b/packages/api-scheduler/tsconfig.build.json @@ -9,9 +9,7 @@ { "path": "../event-handler-aws/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, - { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, - { "path": "../plugins/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" } ], "compilerOptions": { @@ -35,12 +33,8 @@ "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"] } diff --git a/packages/api-scheduler/tsconfig.json b/packages/api-scheduler/tsconfig.json index d72df8adb2a..d20bb278279 100644 --- a/packages/api-scheduler/tsconfig.json +++ b/packages/api-scheduler/tsconfig.json @@ -9,9 +9,7 @@ { "path": "../event-handler-aws" }, { "path": "../event-handler-core" }, { "path": "../feature" }, - { "path": "../handler" }, { "path": "../handler-graphql" }, - { "path": "../plugins" }, { "path": "../utils" } ], "compilerOptions": { @@ -35,12 +33,8 @@ "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"] } diff --git a/yarn.lock b/yarn.lock index 85b9aed5d2f..7925610eadd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11265,9 +11265,7 @@ __metadata: "@webiny/event-handler-aws": "npm:0.0.0" "@webiny/event-handler-core": "npm:0.0.0" "@webiny/feature": "npm:0.0.0" - "@webiny/handler": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" - "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" graphql: "npm:^16.14.2" From ffb8363d1451d88691c9f82c763cc5cb30ff1105 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Thu, 9 Jul 2026 17:02:49 +0200 Subject: [PATCH 12/31] refactor: convert scheduler packages off legacy ContextPlugin to DI api-scheduler: delete dead registerSchedulerExtension + createScheduler (superseded by SchedulerFeature + SchedulerModelContextualSchema). api-scheduler-aws/-server: convert the SchedulerService transport ContextPlugins to RequestContextInitializer; wire aws consumer directly. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-event-handler-aws/package.json | 3 +- .../src/createWebinyApiHandler.ts | 11 +-- .../api-event-handler-aws/tsconfig.build.json | 7 +- packages/api-event-handler-aws/tsconfig.json | 7 +- packages/api-scheduler-aws/src/context.ts | 52 +++++----- packages/api-scheduler-server/package.json | 4 +- packages/api-scheduler-server/src/context.ts | 94 ++++++++++--------- .../api-scheduler-server/tsconfig.build.json | 13 +-- packages/api-scheduler-server/tsconfig.json | 13 +-- yarn.lock | 5 +- 10 files changed, 101 insertions(+), 108 deletions(-) diff --git a/packages/api-event-handler-aws/package.json b/packages/api-event-handler-aws/package.json index 45ea2852c5b..4a60a54c3b0 100644 --- a/packages/api-event-handler-aws/package.json +++ b/packages/api-event-handler-aws/package.json @@ -29,8 +29,7 @@ "@webiny/event-handler-aws": "0.0.0", "@webiny/event-handler-core": "0.0.0", "@webiny/handler": "0.0.0", - "@webiny/handler-db": "0.0.0", - "@webiny/handler-graphql": "0.0.0" + "@webiny/handler-db": "0.0.0" }, "peerDependencies": { "@webiny/di": ">=0.2.3" diff --git a/packages/api-event-handler-aws/src/createWebinyApiHandler.ts b/packages/api-event-handler-aws/src/createWebinyApiHandler.ts index 6390b825dfd..650d2ea3a6f 100644 --- a/packages/api-event-handler-aws/src/createWebinyApiHandler.ts +++ b/packages/api-event-handler-aws/src/createWebinyApiHandler.ts @@ -19,7 +19,6 @@ import { WebSocketEventType } from "@webiny/event-handler-aws"; import { BackgroundTasksAwsFeature } from "@webiny/background-tasks-aws"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; import { registerExtensions } from "@webiny/handler"; import { DbFeature } from "@webiny/handler-db"; import { registerApiRequestStack } from "@webiny/api-event-handler-core"; @@ -124,13 +123,11 @@ export function createWebinyApiHandler(config: CreateWebinyApiHandlerConfig) { registerRealtimeTransport: c => { WebsocketsAwsFeature.register(c); }, - // Scheduler transport: bridge the scheduler-aws extension (EventBridge Scheduler). + // Scheduler transport: the scheduler-aws extension (EventBridge Scheduler). registerSchedulerTransport: c => { - registerLegacyPluginsViaGqlContextualSchema(c, [ - ...registerSchedulerAwsExtension({ - getClient: schedulerConfig => createSchedulerClient(schedulerConfig) - }) - ]); + registerSchedulerAwsExtension(c, { + getClient: schedulerConfig => createSchedulerClient(schedulerConfig) + }); } }); } diff --git a/packages/api-event-handler-aws/tsconfig.build.json b/packages/api-event-handler-aws/tsconfig.build.json index f45af82012c..0d76c2715b4 100644 --- a/packages/api-event-handler-aws/tsconfig.build.json +++ b/packages/api-event-handler-aws/tsconfig.build.json @@ -13,8 +13,7 @@ { "path": "../event-handler-aws/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, - { "path": "../handler-db/tsconfig.build.json" }, - { "path": "../handler-graphql/tsconfig.build.json" } + { "path": "../handler-db/tsconfig.build.json" } ], "compilerOptions": { "rootDir": "./src", @@ -46,9 +45,7 @@ "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"] + "@webiny/handler-db": ["../handler-db/src"] } } } diff --git a/packages/api-event-handler-aws/tsconfig.json b/packages/api-event-handler-aws/tsconfig.json index 0774406b2e6..c39a3e1aa7d 100644 --- a/packages/api-event-handler-aws/tsconfig.json +++ b/packages/api-event-handler-aws/tsconfig.json @@ -13,8 +13,7 @@ { "path": "../event-handler-aws" }, { "path": "../event-handler-core" }, { "path": "../handler" }, - { "path": "../handler-db" }, - { "path": "../handler-graphql" } + { "path": "../handler-db" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -46,9 +45,7 @@ "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"] + "@webiny/handler-db": ["../handler-db/src"] } } } diff --git a/packages/api-scheduler-aws/src/context.ts b/packages/api-scheduler-aws/src/context.ts index 21c64ee1d07..efd5367cdf6 100644 --- a/packages/api-scheduler-aws/src/context.ts +++ b/packages/api-scheduler-aws/src/context.ts @@ -1,43 +1,49 @@ +import type { Container } from "@webiny/di"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; import type { SchedulerClient, SchedulerClientConfig } from "@webiny/aws-sdk/client-scheduler/index.js"; import { getManifest } from "~/manifest.js"; -import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js"; import { EventBridgeSchedulerService } from "~/features/SchedulerService/EventBridgeSchedulerService.js"; import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { ContextPlugin } from "@webiny/api"; export interface IRegisterSchedulerAwsExtensionParams { getClient(config?: SchedulerClientConfig): Pick; } -export const registerSchedulerAwsExtension = (params: IRegisterSchedulerAwsExtensionParams) => { - const plugin = new ContextPlugin(async context => { - const tenantContext = context.container.resolve(TenantContext); +/** + * Registers the AWS (EventBridge Scheduler) transport for the scheduler. Binds `SchedulerService` + * per-request via a RequestContextInitializer (post-tenant): resolves the deployed scheduler + * manifest and picks the EventBridge service, or a no-op Void service when the manifest is missing. + */ +export const registerSchedulerAwsExtension = ( + container: Container, + params: IRegisterSchedulerAwsExtensionParams +) => { + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const requestContainer = ctx.container as Container; - if (!tenantContext.getTenant()) { - return; - } + if (!requestContainer.resolve(TenantContext).getTenant()) { + return; + } - const manifest = await getManifest(); + const manifest = await getManifest(); - if (manifest.error) { - context.container.registerInstance(SchedulerService, new VoidSchedulerService()); - } else { - context.container.registerInstance( - SchedulerService, - new EventBridgeSchedulerService(params.getClient, { - lambdaArn: manifest.data.lambdaArn, - roleArn: manifest.data.roleArn - }) - ); + if (manifest.error) { + requestContainer.registerInstance(SchedulerService, new VoidSchedulerService()); + } else { + requestContainer.registerInstance( + SchedulerService, + new EventBridgeSchedulerService(params.getClient, { + lambdaArn: manifest.data.lambdaArn, + roleArn: manifest.data.roleArn + }) + ); + } } }); - - plugin.name = "scheduler.aws.extension"; - - return [plugin]; }; diff --git a/packages/api-scheduler-server/package.json b/packages/api-scheduler-server/package.json index cabf9d9504b..a7894ac39be 100644 --- a/packages/api-scheduler-server/package.json +++ b/packages/api-scheduler-server/package.json @@ -18,11 +18,11 @@ "description": "Server-side cron-based implementation for the Webiny action scheduler.", "license": "MIT", "dependencies": { - "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", - "@webiny/api-headless-cms": "0.0.0", "@webiny/api-scheduler": "0.0.0", + "@webiny/di": "^1.0.2", "@webiny/error": "0.0.0", + "@webiny/event-handler-core": "0.0.0", "bree": "^9.2.9" }, "devDependencies": { diff --git a/packages/api-scheduler-server/src/context.ts b/packages/api-scheduler-server/src/context.ts index 0bf7cd40b7e..0b6b3fb725e 100644 --- a/packages/api-scheduler-server/src/context.ts +++ b/packages/api-scheduler-server/src/context.ts @@ -1,61 +1,65 @@ -import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; +import type { Container } from "@webiny/di"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js"; import { ExecuteScheduledActionUseCase } from "@webiny/api-scheduler/features/ExecuteScheduledAction/index.js"; import { ListScheduledActionsUseCase } from "@webiny/api-scheduler/features/ListScheduledActions/index.js"; import { Logger } from "@webiny/api-core/features/logger/abstractions.js"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; import { BreeSchedulerService } from "~/BreeSchedulerService.js"; -import { ContextPlugin } from "@webiny/api"; -export const registerSchedulerServerExtension = () => { - const plugin = new ContextPlugin(async context => { - const tenantContext = context.container.resolve(TenantContext); +/** + * Registers the self-hosted (Bree, in-process) scheduler transport. Binds `SchedulerService` + * per-request via a RequestContextInitializer (post-tenant): builds the Bree service, wires the + * trigger to ExecuteScheduledActionUseCase, and starts it with the tenant's pending actions. + */ +export const registerSchedulerServerExtension = (container: Container) => { + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const requestContainer = ctx.container as Container; + const tenantContext = requestContainer.resolve(TenantContext); - const tenant = tenantContext.getTenant(); - if (!tenant) { - return; - } - - const logger = context.container.resolve(Logger); - const executeScheduledAction = context.container.resolve(ExecuteScheduledActionUseCase); - - const service = new BreeSchedulerService({ - logger, - onTrigger: async (id, namespace) => { - const result = await executeScheduledAction.execute({ - id, - namespace, - tenant: tenant.id - }); - - if (result.isFail()) { - logger.error( - `Scheduled action "${id}" execution failed: ${result.error.message}` - ); - } + const tenant = tenantContext.getTenant(); + if (!tenant) { + return; } - }); - context.container.registerInstance(SchedulerService, service); + const logger = requestContainer.resolve(Logger); + const executeScheduledAction = requestContainer.resolve(ExecuteScheduledActionUseCase); + + const service = new BreeSchedulerService({ + logger, + onTrigger: async (id, namespace) => { + const result = await executeScheduledAction.execute({ + id, + namespace, + tenant: tenant.id + }); - const listScheduledActions = context.container.resolve(ListScheduledActionsUseCase); - const listResult = await listScheduledActions.execute({ - where: {}, - limit: 1000 - }); + if (result.isFail()) { + logger.error( + `Scheduled action "${id}" execution failed: ${result.error.message}` + ); + } + } + }); - const pendingActions = listResult.isOk() - ? listResult.value.items.map(action => ({ - id: action.id, - namespace: action.namespace, - scheduledFor: action.scheduledFor - })) - : undefined; + requestContainer.registerInstance(SchedulerService, service); - await service.start(pendingActions); - }); + const listScheduledActions = requestContainer.resolve(ListScheduledActionsUseCase); + const listResult = await listScheduledActions.execute({ + where: {}, + limit: 1000 + }); - plugin.name = "scheduler.server.extension"; + const pendingActions = listResult.isOk() + ? listResult.value.items.map(action => ({ + id: action.id, + namespace: action.namespace, + scheduledFor: action.scheduledFor + })) + : undefined; - return plugin; + await service.start(pendingActions); + } + }); }; diff --git a/packages/api-scheduler-server/tsconfig.build.json b/packages/api-scheduler-server/tsconfig.build.json index a94dd4e2553..210e36a8a8a 100644 --- a/packages/api-scheduler-server/tsconfig.build.json +++ b/packages/api-scheduler-server/tsconfig.build.json @@ -2,11 +2,10 @@ "extends": "../../tsconfig.build.json", "include": ["src"], "references": [ - { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, - { "path": "../api-headless-cms/tsconfig.build.json" }, { "path": "../api-scheduler/tsconfig.build.json" }, - { "path": "../error/tsconfig.build.json" } + { "path": "../error/tsconfig.build.json" }, + { "path": "../event-handler-core/tsconfig.build.json" } ], "compilerOptions": { "rootDir": "./src", @@ -15,16 +14,14 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], - "@webiny/api-headless-cms": ["../api-headless-cms/src"], "@webiny/api-scheduler/*": ["../api-scheduler/src/*"], "@webiny/api-scheduler": ["../api-scheduler/src"], "@webiny/error/*": ["../error/src/*"], - "@webiny/error": ["../error/src"] + "@webiny/error": ["../error/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"] } } } diff --git a/packages/api-scheduler-server/tsconfig.json b/packages/api-scheduler-server/tsconfig.json index 3a325fc71d2..8fe674959bd 100644 --- a/packages/api-scheduler-server/tsconfig.json +++ b/packages/api-scheduler-server/tsconfig.json @@ -2,11 +2,10 @@ "extends": "../../tsconfig.json", "include": ["src", "__tests__"], "references": [ - { "path": "../api" }, { "path": "../api-core" }, - { "path": "../api-headless-cms" }, { "path": "../api-scheduler" }, - { "path": "../error" } + { "path": "../error" }, + { "path": "../event-handler-core" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -15,16 +14,14 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], - "@webiny/api-headless-cms": ["../api-headless-cms/src"], "@webiny/api-scheduler/*": ["../api-scheduler/src/*"], "@webiny/api-scheduler": ["../api-scheduler/src"], "@webiny/error/*": ["../error/src/*"], - "@webiny/error": ["../error/src"] + "@webiny/error": ["../error/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"] } } } diff --git a/yarn.lock b/yarn.lock index 7925610eadd..74427bb37b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10618,7 +10618,6 @@ __metadata: "@webiny/event-handler-core": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" "@webiny/handler-db": "npm:0.0.0" - "@webiny/handler-graphql": "npm:0.0.0" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" vitest: "npm:^4.1.9" @@ -11239,12 +11238,12 @@ __metadata: version: 0.0.0-use.local resolution: "@webiny/api-scheduler-server@workspace:packages/api-scheduler-server" dependencies: - "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" - "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-scheduler": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" + "@webiny/di": "npm:^1.0.2" "@webiny/error": "npm:0.0.0" + "@webiny/event-handler-core": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" bree: "npm:^9.2.9" typescript: "npm:6.0.3" From 47c37b0e1837606feb706ec63a7a78ebbb04a027 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 07:54:44 +0200 Subject: [PATCH 13/31] refactor: convert fm-server + hcms-es-tasks off ContextPlugin to DI api-file-manager-server: aggregate ContextPlugin -> FileManagerServerFeature. api-headless-cms-es-tasks: task-registration ContextPlugin -> HeadlessCmsEsTasksFeature; migrate test harness; drop from dead api- background-tasks-os bundle. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-background-tasks-os/package.json | 1 - packages/api-background-tasks-os/src/index.ts | 9 ++-- .../tsconfig.build.json | 3 -- .../api-background-tasks-os/tsconfig.json | 8 +--- packages/api-file-manager-server/package.json | 1 - .../src/FileManagerServerFeature.ts | 39 ++++++++++++++++ packages/api-file-manager-server/src/index.ts | 44 +------------------ .../tsconfig.build.json | 3 -- .../api-file-manager-server/tsconfig.json | 3 -- .../__tests__/context/useHandler.ts | 10 ++--- .../api-headless-cms-es-tasks/package.json | 2 +- .../src/HeadlessCmsEsTasksFeature.ts | 11 +++++ .../api-headless-cms-es-tasks/src/index.ts | 19 ++------ .../tsconfig.build.json | 6 +-- .../api-headless-cms-es-tasks/tsconfig.json | 6 +-- yarn.lock | 6 +-- 16 files changed, 73 insertions(+), 98 deletions(-) create mode 100644 packages/api-file-manager-server/src/FileManagerServerFeature.ts create mode 100644 packages/api-headless-cms-es-tasks/src/HeadlessCmsEsTasksFeature.ts diff --git a/packages/api-background-tasks-os/package.json b/packages/api-background-tasks-os/package.json index 1d6d00188ca..25073b138ee 100644 --- a/packages/api-background-tasks-os/package.json +++ b/packages/api-background-tasks-os/package.json @@ -15,7 +15,6 @@ "license": "MIT", "dependencies": { "@webiny/api-elasticsearch-tasks": "0.0.0", - "@webiny/api-headless-cms-es-tasks": "0.0.0", "@webiny/plugins": "0.0.0" }, "devDependencies": { diff --git a/packages/api-background-tasks-os/src/index.ts b/packages/api-background-tasks-os/src/index.ts index ae82a8284b9..64b41a7259b 100644 --- a/packages/api-background-tasks-os/src/index.ts +++ b/packages/api-background-tasks-os/src/index.ts @@ -1,10 +1,9 @@ import type { PluginCollection } from "@webiny/plugins/types.js"; import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks"; -import { createHeadlessCmsEsTasks } from "@webiny/api-headless-cms-es-tasks"; -// NOTE: background-tasks itself is now registered DI-natively via BackgroundTasksFeature -// (wired in registerApiRequestStack for every flavour), so it is no longer bundled here. This -// factory only carries the OpenSearch-specific ES/CMS-ES task plugins (still legacy). +// NOTE: background-tasks + hcms-es-tasks are now registered DI-natively (BackgroundTasksFeature / +// HeadlessCmsEsTasksFeature), so they are no longer bundled here. This factory only carries the +// OpenSearch-specific Elasticsearch task plugins (still legacy). export const createBackgroundTasks = (): PluginCollection => { - return [...createElasticsearchBackgroundTasks(), createHeadlessCmsEsTasks()]; + return [...createElasticsearchBackgroundTasks()]; }; diff --git a/packages/api-background-tasks-os/tsconfig.build.json b/packages/api-background-tasks-os/tsconfig.build.json index ed0e817139d..1da6532a4f7 100644 --- a/packages/api-background-tasks-os/tsconfig.build.json +++ b/packages/api-background-tasks-os/tsconfig.build.json @@ -3,7 +3,6 @@ "include": ["src"], "references": [ { "path": "../api-elasticsearch-tasks/tsconfig.build.json" }, - { "path": "../api-headless-cms-es-tasks/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" } ], "compilerOptions": { @@ -15,8 +14,6 @@ "~tests/*": ["./__tests__/*"], "@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"], "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], - "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"], - "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-background-tasks-os/tsconfig.json b/packages/api-background-tasks-os/tsconfig.json index b8fff9d5e79..12122508fed 100644 --- a/packages/api-background-tasks-os/tsconfig.json +++ b/packages/api-background-tasks-os/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.json", "include": ["src", "__tests__"], - "references": [ - { "path": "../api-elasticsearch-tasks" }, - { "path": "../api-headless-cms-es-tasks" }, - { "path": "../plugins" } - ], + "references": [{ "path": "../api-elasticsearch-tasks" }, { "path": "../plugins" }], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], "outDir": "./dist", @@ -15,8 +11,6 @@ "~tests/*": ["./__tests__/*"], "@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"], "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], - "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"], - "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-file-manager-server/package.json b/packages/api-file-manager-server/package.json index 2b4f1121a6a..43fa7aa54a7 100644 --- a/packages/api-file-manager-server/package.json +++ b/packages/api-file-manager-server/package.json @@ -14,7 +14,6 @@ "author": "Webiny Ltd", "license": "MIT", "dependencies": { - "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", "@webiny/api-file-manager": "0.0.0", "@webiny/background-tasks": "0.0.0", diff --git a/packages/api-file-manager-server/src/FileManagerServerFeature.ts b/packages/api-file-manager-server/src/FileManagerServerFeature.ts new file mode 100644 index 00000000000..250015912d0 --- /dev/null +++ b/packages/api-file-manager-server/src/FileManagerServerFeature.ts @@ -0,0 +1,39 @@ +import { existsSync, mkdirSync } from "node:fs"; +import { type Container, createFeature } from "@webiny/feature/api"; +import { FileManagerServerConfig } from "~/features/FileManagerServerConfig/abstractions.js"; +import { FileManagerServerConfigFeature } from "~/features/FileManagerServerConfig/feature.js"; +import { UploadSingleFileRouteFeature } from "~/routes/UploadSingleFileRoute/feature.js"; +import { UploadPartRouteFeature } from "~/routes/UploadPartRoute/feature.js"; +import { CleanupStaleMultipartUploadsFeature } from "~/features/CleanupStaleMultipartUploads/feature.js"; +import { DeleteFileFromDiskFeature } from "~/features/DeleteFileFromDisk/feature.js"; +import { ExtractMetadataFeature } from "~/features/ExtractMetadata/feature.js"; +import { FlushCacheFeature } from "~/features/FlushCache/feature.js"; +import { GetFileContentsByIdFeature } from "~/features/GetFileContentsById/feature.js"; +import { GetFileContentsByKeyFeature } from "~/features/GetFileContentsByKey/feature.js"; +import { GetUploadPayloadFeature } from "~/features/GetUploadPayload/feature.js"; +import { CreateMultiPartUploadFeature } from "~/features/CreateMultiPartUpload/feature.js"; +import { CompleteMultiPartUploadFeature } from "~/features/CompleteMultiPartUpload/feature.js"; + +export const FileManagerServerFeature = createFeature({ + name: "FileManagerServer", + register(container: Container) { + FileManagerServerConfigFeature.register(container); + + const config = container.resolve(FileManagerServerConfig); + if (!existsSync(config.storagePath)) { + mkdirSync(config.storagePath, { recursive: true }); + } + + FlushCacheFeature.register(container); + DeleteFileFromDiskFeature.register(container); + ExtractMetadataFeature.register(container); + GetFileContentsByIdFeature.register(container); + GetFileContentsByKeyFeature.register(container); + GetUploadPayloadFeature.register(container); + CreateMultiPartUploadFeature.register(container); + CompleteMultiPartUploadFeature.register(container); + CleanupStaleMultipartUploadsFeature.register(container); + UploadSingleFileRouteFeature.register(container); + UploadPartRouteFeature.register(container); + } +}); diff --git a/packages/api-file-manager-server/src/index.ts b/packages/api-file-manager-server/src/index.ts index a63e5fd8bff..a81320fa3fb 100644 --- a/packages/api-file-manager-server/src/index.ts +++ b/packages/api-file-manager-server/src/index.ts @@ -1,45 +1,3 @@ -import { existsSync, mkdirSync } from "node:fs"; -import { ContextPlugin } from "@webiny/api"; -import { FileManagerServerConfig } from "~/features/FileManagerServerConfig/abstractions.js"; -import { FileManagerServerConfigFeature } from "~/features/FileManagerServerConfig/feature.js"; -import { UploadSingleFileRouteFeature } from "~/routes/UploadSingleFileRoute/feature.js"; -import { UploadPartRouteFeature } from "~/routes/UploadPartRoute/feature.js"; -import { CleanupStaleMultipartUploadsFeature } from "~/features/CleanupStaleMultipartUploads/feature.js"; -import { DeleteFileFromDiskFeature } from "~/features/DeleteFileFromDisk/feature.js"; -import { ExtractMetadataFeature } from "~/features/ExtractMetadata/feature.js"; -import { FlushCacheFeature } from "~/features/FlushCache/feature.js"; -import { GetFileContentsByIdFeature } from "~/features/GetFileContentsById/feature.js"; -import { GetFileContentsByKeyFeature } from "~/features/GetFileContentsByKey/feature.js"; -import { GetUploadPayloadFeature } from "~/features/GetUploadPayload/feature.js"; -import { CreateMultiPartUploadFeature } from "~/features/CreateMultiPartUpload/feature.js"; -import { CompleteMultiPartUploadFeature } from "~/features/CompleteMultiPartUpload/feature.js"; - export { createFileUploadModifier } from "@webiny/api-file-manager/features/upload/index.js"; export { createAssetDelivery } from "./assetDelivery/createAssetDelivery.js"; - -const contextPlugin = new ContextPlugin(context => { - const container = context.container; - - FileManagerServerConfigFeature.register(container); - - const config = container.resolve(FileManagerServerConfig); - if (!existsSync(config.storagePath)) { - mkdirSync(config.storagePath, { recursive: true }); - } - - FlushCacheFeature.register(container); - DeleteFileFromDiskFeature.register(container); - ExtractMetadataFeature.register(container); - GetFileContentsByIdFeature.register(container); - GetFileContentsByKeyFeature.register(container); - GetUploadPayloadFeature.register(container); - CreateMultiPartUploadFeature.register(container); - CompleteMultiPartUploadFeature.register(container); - CleanupStaleMultipartUploadsFeature.register(container); - UploadSingleFileRouteFeature.register(container); - UploadPartRouteFeature.register(container); -}); - -contextPlugin.name = `fileManagerServer.context`; - -export const createFileManagerServer = () => [contextPlugin]; +export { FileManagerServerFeature } from "./FileManagerServerFeature.js"; diff --git a/packages/api-file-manager-server/tsconfig.build.json b/packages/api-file-manager-server/tsconfig.build.json index 22b60cd7fb3..d49750b2813 100644 --- a/packages/api-file-manager-server/tsconfig.build.json +++ b/packages/api-file-manager-server/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.build.json", "include": ["src"], "references": [ - { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-file-manager/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, @@ -20,8 +19,6 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], diff --git a/packages/api-file-manager-server/tsconfig.json b/packages/api-file-manager-server/tsconfig.json index bac41ddc4cd..ac02f1d4e04 100644 --- a/packages/api-file-manager-server/tsconfig.json +++ b/packages/api-file-manager-server/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.json", "include": ["src", "__tests__"], "references": [ - { "path": "../api" }, { "path": "../api-core" }, { "path": "../api-file-manager" }, { "path": "../background-tasks" }, @@ -20,8 +19,6 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts index d482ee80368..b0e68816f49 100644 --- a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts @@ -7,7 +7,7 @@ import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockT import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; import type { Context } from "~/types"; -import { createHeadlessCmsEsTasks } from "~/index.js"; +import { HeadlessCmsEsTasksFeature } from "~/index.js"; type Params = Omit & { plugins?: any }; @@ -22,14 +22,14 @@ export const useHandler = (params: Params = {}) => table: process.env.DB_TABLE }); - // Background tasks are DI-native (TasksCrud, GraphQL contextual schema, TriggerTaskUseCase). - // Register the feature, then override TaskService with a mock transport for triggering. + // Background tasks + es-tasks are DI-native. Register the features, then override + // TaskService with a mock transport for triggering. BackgroundTasksFeature.register(container); + HeadlessCmsEsTasksFeature.register(container); container.registerInstance(TaskService, createMockTaskService()); - // es-tasks task definitions + any test-supplied plugins (still legacy). + // Any test-supplied plugins (still legacy). registerLegacyPluginsViaGqlContextualSchema(container, [ - createHeadlessCmsEsTasks(), ...[plugins].flat(Infinity as 1).filter(Boolean) ]); } diff --git a/packages/api-headless-cms-es-tasks/package.json b/packages/api-headless-cms-es-tasks/package.json index 876a6518432..56e170684fd 100644 --- a/packages/api-headless-cms-es-tasks/package.json +++ b/packages/api-headless-cms-es-tasks/package.json @@ -17,13 +17,13 @@ }, "license": "MIT", "dependencies": { - "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", "@webiny/api-headless-cms": "0.0.0", "@webiny/api-headless-cms-ddb-es": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/error": "0.0.0", + "@webiny/feature": "0.0.0", "@webiny/utils": "0.0.0" }, "devDependencies": { diff --git a/packages/api-headless-cms-es-tasks/src/HeadlessCmsEsTasksFeature.ts b/packages/api-headless-cms-es-tasks/src/HeadlessCmsEsTasksFeature.ts new file mode 100644 index 00000000000..74dfd48383b --- /dev/null +++ b/packages/api-headless-cms-es-tasks/src/HeadlessCmsEsTasksFeature.ts @@ -0,0 +1,11 @@ +import { type Container, createFeature } from "@webiny/feature/api"; +import { MockDataCreatorTaskDefinition } from "~/tasks/MockDataCreatorTask.js"; +import { MockDataManagerTaskDefinition } from "~/tasks/MockDataManagerTask.js"; + +export const HeadlessCmsEsTasksFeature = createFeature({ + name: "HeadlessCmsEsTasks", + register(container: Container) { + container.register(MockDataCreatorTaskDefinition); + container.register(MockDataManagerTaskDefinition); + } +}); diff --git a/packages/api-headless-cms-es-tasks/src/index.ts b/packages/api-headless-cms-es-tasks/src/index.ts index dba029297ce..e909bf7cec6 100644 --- a/packages/api-headless-cms-es-tasks/src/index.ts +++ b/packages/api-headless-cms-es-tasks/src/index.ts @@ -1,18 +1,5 @@ -import { createContextPlugin } from "@webiny/api"; -import { - MockDataCreatorTaskDefinition, - MOCK_DATA_CREATOR_TASK_ID -} from "~/tasks/MockDataCreatorTask.js"; -import { - MockDataManagerTaskDefinition, - MOCK_DATA_MANAGER_TASK_ID -} from "~/tasks/MockDataManagerTask.js"; +import { MOCK_DATA_CREATOR_TASK_ID } from "~/tasks/MockDataCreatorTask.js"; +import { MOCK_DATA_MANAGER_TASK_ID } from "~/tasks/MockDataManagerTask.js"; export { MOCK_DATA_CREATOR_TASK_ID, MOCK_DATA_MANAGER_TASK_ID }; - -export const createHeadlessCmsEsTasks = () => { - return createContextPlugin(context => { - context.container.register(MockDataCreatorTaskDefinition); - context.container.register(MockDataManagerTaskDefinition); - }); -}; +export { HeadlessCmsEsTasksFeature } from "./HeadlessCmsEsTasksFeature.js"; diff --git a/packages/api-headless-cms-es-tasks/tsconfig.build.json b/packages/api-headless-cms-es-tasks/tsconfig.build.json index 50c9d44c9f3..df0e7820b2a 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.build.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.build.json @@ -2,13 +2,13 @@ "extends": "../../tsconfig.build.json", "include": ["src"], "references": [ - { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, { "path": "../api-headless-cms-ddb-es/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, + { "path": "../feature/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" } @@ -20,8 +20,6 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], @@ -34,6 +32,8 @@ "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], + "@webiny/feature/*": ["../feature/src/*"], + "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-headless-cms-es-tasks/tsconfig.json b/packages/api-headless-cms-es-tasks/tsconfig.json index 83100d26ecd..3d5546fa6a5 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.json @@ -2,13 +2,13 @@ "extends": "../../tsconfig.json", "include": ["src", "__tests__"], "references": [ - { "path": "../api" }, { "path": "../api-core" }, { "path": "../api-headless-cms" }, { "path": "../api-headless-cms-ddb-es" }, { "path": "../api-opensearch" }, { "path": "../background-tasks" }, { "path": "../error" }, + { "path": "../feature" }, { "path": "../utils" }, { "path": "../handler-db" }, { "path": "../handler-graphql" }, @@ -21,8 +21,6 @@ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], @@ -35,6 +33,8 @@ "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], + "@webiny/feature/*": ["../feature/src/*"], + "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/yarn.lock b/yarn.lock index 74427bb37b5..5ee2bca3310 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10430,7 +10430,6 @@ __metadata: resolution: "@webiny/api-background-tasks-os@workspace:packages/api-background-tasks-os" dependencies: "@webiny/api-elasticsearch-tasks": "npm:0.0.0" - "@webiny/api-headless-cms-es-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" rimraf: "npm:^6.1.3" @@ -10773,7 +10772,6 @@ __metadata: version: 0.0.0-use.local resolution: "@webiny/api-file-manager-server@workspace:packages/api-file-manager-server" dependencies: - "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" @@ -10939,11 +10937,10 @@ __metadata: languageName: unknown linkType: soft -"@webiny/api-headless-cms-es-tasks@npm:0.0.0, @webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks": +"@webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks": version: 0.0.0-use.local resolution: "@webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks" dependencies: - "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-headless-cms-ddb-es": "npm:0.0.0" @@ -10951,6 +10948,7 @@ __metadata: "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/error": "npm:0.0.0" + "@webiny/feature": "npm:0.0.0" "@webiny/handler-db": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" From e04aa470250129966dfc4621d46d85fd532ef3d6 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 10:23:04 +0200 Subject: [PATCH 14/31] refactor(handler-db): retire the context.db bag for DI abstractions DbFeature no longer writes ctx.db (drops the EMPTY_SCHEMA contextual schema that existed only for that). Readers migrated to DI: db.driver.getClient() -> resolve(DynamoDBClient).client; db.store -> resolve(DbInstance).store. Dropped the .db type from api-websockets + api-audit-logs contexts. The legacy dbPlugins default (test storage-preset glue) stays, documented @deprecated, until the setupFile presets move to their own drivers. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-audit-logs/package.json | 1 - packages/api-audit-logs/src/types.ts | 3 +-- packages/api-audit-logs/tsconfig.build.json | 3 --- packages/api-audit-logs/tsconfig.json | 3 --- .../tasks/deleteModel/graphql/crud.test.ts | 5 +++-- .../__mocks/schedulerManifestPlugin.ts | 4 ++-- packages/api-scheduler-aws/package.json | 1 + .../api-scheduler-aws/tsconfig.build.json | 3 +++ packages/api-scheduler-aws/tsconfig.json | 3 +++ packages/api-websockets/src/types.ts | 3 +-- packages/cli-core/files/references.json | 3 --- packages/handler-db/package.json | 4 +--- packages/handler-db/src/DbFeature.ts | 19 ++++--------------- packages/handler-db/src/abstractions.ts | 4 ++-- packages/handler-db/src/index.ts | 6 ++++++ packages/handler-db/tsconfig.build.json | 7 ++----- packages/handler-db/tsconfig.json | 7 ++----- yarn.lock | 4 +--- 18 files changed, 32 insertions(+), 51 deletions(-) diff --git a/packages/api-audit-logs/package.json b/packages/api-audit-logs/package.json index d1d37851288..46a92a8f9dd 100644 --- a/packages/api-audit-logs/package.json +++ b/packages/api-audit-logs/package.json @@ -46,7 +46,6 @@ "@webiny/common-audit-logs": "0.0.0", "@webiny/error": "0.0.0", "@webiny/feature": "0.0.0", - "@webiny/handler-db": "0.0.0", "@webiny/handler-graphql": "0.0.0", "@webiny/utils": "0.0.0", "@webiny/wcp": "0.0.0", diff --git a/packages/api-audit-logs/src/types.ts b/packages/api-audit-logs/src/types.ts index b2187448da4..59076619afb 100644 --- a/packages/api-audit-logs/src/types.ts +++ b/packages/api-audit-logs/src/types.ts @@ -1,6 +1,5 @@ import type { GenericRecord } from "@webiny/api/types.js"; import type { Action, App, Entity } from "@webiny/common-audit-logs/types.js"; -import type { DbContext } from "@webiny/handler-db/types.js"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import type { IAuditLog } from "~/storage/types.js"; import type { IStorageListParams } from "~/storage/abstractions/Storage.js"; @@ -44,7 +43,7 @@ export interface AuditLogsContextValue { listAuditLogs(params: IListAuditLogsParams): Promise; } -export interface AuditLogsContext extends ApiCoreContext, Pick { +export interface AuditLogsContext extends ApiCoreContext { auditLogs: AuditLogsContextValue; } diff --git a/packages/api-audit-logs/tsconfig.build.json b/packages/api-audit-logs/tsconfig.build.json index 571ab3e8e6f..1bc2e4e867b 100644 --- a/packages/api-audit-logs/tsconfig.build.json +++ b/packages/api-audit-logs/tsconfig.build.json @@ -12,7 +12,6 @@ { "path": "../common-audit-logs/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, - { "path": "../handler-db/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" }, @@ -48,8 +47,6 @@ "@webiny/error": ["../error/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-audit-logs/tsconfig.json b/packages/api-audit-logs/tsconfig.json index 5c6116c96ab..3d071aa1b9e 100644 --- a/packages/api-audit-logs/tsconfig.json +++ b/packages/api-audit-logs/tsconfig.json @@ -12,7 +12,6 @@ { "path": "../common-audit-logs" }, { "path": "../error" }, { "path": "../feature" }, - { "path": "../handler-db" }, { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../wcp" }, @@ -49,8 +48,6 @@ "@webiny/error": ["../error/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-headless-cms-tasks/__tests__/tasks/deleteModel/graphql/crud.test.ts b/packages/api-headless-cms-tasks/__tests__/tasks/deleteModel/graphql/crud.test.ts index a89b30e0a0d..de878e2ca4b 100644 --- a/packages/api-headless-cms-tasks/__tests__/tasks/deleteModel/graphql/crud.test.ts +++ b/packages/api-headless-cms-tasks/__tests__/tasks/deleteModel/graphql/crud.test.ts @@ -4,6 +4,7 @@ import type { IStoreValue } from "~/features/DeleteModelTask/types.js"; import { createStoreKey } from "~/helpers/store.js"; import { DeleteModelOperations } from "~/graphql/deleteModel/abstractions.js"; import { HeadlessCms } from "@webiny/api-headless-cms/features/shared/abstractions.js"; +import { DbInstance } from "@webiny/handler-db/abstractions.js"; describe("headless cms tasks crud", () => { it("should list models being deleted", async () => { @@ -22,7 +23,7 @@ describe("headless cms tasks crud", () => { tenant: tenant.id }; - await context.db.store.storeValue(createStoreKey(value), value); + await context.container.resolve(DbInstance).store.storeValue(createStoreKey(value), value); const secondaryContext = await handler(); @@ -32,7 +33,7 @@ describe("headless cms tasks crud", () => { expect(resultsPopulated).toHaveLength(1); expect(resultsPopulated).toEqual([value]); - await context.db.store.removeValue(createStoreKey(value)); + await context.container.resolve(DbInstance).store.removeValue(createStoreKey(value)); const tertiaryContext = await handler(); diff --git a/packages/api-scheduler-aws/__tests__/__mocks/schedulerManifestPlugin.ts b/packages/api-scheduler-aws/__tests__/__mocks/schedulerManifestPlugin.ts index 972154d90bd..d21444aa5a9 100644 --- a/packages/api-scheduler-aws/__tests__/__mocks/schedulerManifestPlugin.ts +++ b/packages/api-scheduler-aws/__tests__/__mocks/schedulerManifestPlugin.ts @@ -1,6 +1,6 @@ -import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js"; import { PutCommand } from "@webiny/aws-sdk/client-dynamodb/index.js"; import { ContextPlugin } from "@webiny/api"; +import { DynamoDBClient } from "@webiny/db-dynamodb"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; export const createSchedulerManifestPlugin = () => { @@ -10,7 +10,7 @@ export const createSchedulerManifestPlugin = () => { roleArn: "arn:aws:iam::123456789012:role/my-scheduler-role" }; - const client = context.db.driver.getClient() as DynamoDBDocument; + const client = context.container.resolve(DynamoDBClient).client; await client.send( new PutCommand({ diff --git a/packages/api-scheduler-aws/package.json b/packages/api-scheduler-aws/package.json index 7cc5a7efb93..29a758c7617 100644 --- a/packages/api-scheduler-aws/package.json +++ b/packages/api-scheduler-aws/package.json @@ -32,6 +32,7 @@ "@webiny/api-headless-cms": "0.0.0", "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", + "@webiny/db-dynamodb": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-aws": "0.0.0", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-scheduler-aws/tsconfig.build.json b/packages/api-scheduler-aws/tsconfig.build.json index 8cbd01a0263..655ec9a0c20 100644 --- a/packages/api-scheduler-aws/tsconfig.build.json +++ b/packages/api-scheduler-aws/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../event-handler-aws/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, @@ -40,6 +41,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-testing/*": ["../api-testing/src/*"], "@webiny/api-testing": ["../api-testing/src"], + "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], + "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], "@webiny/event-handler-aws": ["../event-handler-aws/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-scheduler-aws/tsconfig.json b/packages/api-scheduler-aws/tsconfig.json index 3825f364f77..54516998ce3 100644 --- a/packages/api-scheduler-aws/tsconfig.json +++ b/packages/api-scheduler-aws/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../error" }, { "path": "../utils" }, { "path": "../api-testing" }, + { "path": "../db-dynamodb" }, { "path": "../event-handler-aws" }, { "path": "../event-handler-core" }, { "path": "../feature" }, @@ -40,6 +41,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-testing/*": ["../api-testing/src/*"], "@webiny/api-testing": ["../api-testing/src"], + "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], + "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], "@webiny/event-handler-aws": ["../event-handler-aws/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-websockets/src/types.ts b/packages/api-websockets/src/types.ts index 4bcb97a3641..11052382909 100644 --- a/packages/api-websockets/src/types.ts +++ b/packages/api-websockets/src/types.ts @@ -1,4 +1,3 @@ -import type { DbContext } from "@webiny/handler-db/types.js"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { SecurityIdentity } from "@webiny/api-core/types/security.js"; @@ -6,7 +5,7 @@ import type { GenericRecord } from "@webiny/api/types.js"; export type IWebsocketsIdentity = Pick; -export interface Context extends DbContext, ApiCoreContext {} +export interface Context extends ApiCoreContext {} export interface WebsocketsPermission extends SecurityPermission { name: "websockets"; diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index 20adf711caf..1fe79195647 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -288,13 +288,11 @@ "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", "/packages/background-tasks/package.json", - "/packages/handler-db/package.json", "/packages/handler-graphql/package.json", "/packages/api-audit-logs/package.json", "/packages/api-headless-cms/package.json", "/packages/api-record-locking/package.json", "/packages/background-tasks/package.json", - "/packages/handler-db/package.json", "/packages/handler-graphql/package.json" ] }, @@ -6002,7 +6000,6 @@ { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, - { "file": "/packages/handler-db/package.json", "types": ["dependencies"] }, { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } ] } diff --git a/packages/handler-db/package.json b/packages/handler-db/package.json index aaf36eef8bd..e2c39dc86ad 100644 --- a/packages/handler-db/package.json +++ b/packages/handler-db/package.json @@ -14,7 +14,6 @@ "description": "Webiny API plugin that provides a db driver for DynamoDB.", "author": "Webiny Ltd.", "dependencies": { - "@graphql-tools/schema": "^10.0.34", "@webiny/api": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/db": "0.0.0", @@ -22,8 +21,7 @@ "@webiny/db-utils": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/feature": "0.0.0", - "@webiny/handler": "0.0.0", - "@webiny/handler-graphql": "0.0.0" + "@webiny/handler": "0.0.0" }, "devDependencies": { "@webiny/build-tools": "0.0.0", diff --git a/packages/handler-db/src/DbFeature.ts b/packages/handler-db/src/DbFeature.ts index 6868e812fe1..ab89a44eb78 100644 --- a/packages/handler-db/src/DbFeature.ts +++ b/packages/handler-db/src/DbFeature.ts @@ -2,8 +2,6 @@ import { createFeature } from "@webiny/feature/api"; import { Db } from "@webiny/db"; import { DynamoDbDriver, DynamoDBClientFeature, FilterUtilFeature } from "@webiny/db-dynamodb"; import { ValueFilterFeature } from "@webiny/db-utils"; -import { GraphQLContextualSchema } from "@webiny/handler-graphql"; -import { makeExecutableSchema } from "@graphql-tools/schema"; import type { Container } from "@webiny/di"; import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js"; import { DbInstance } from "./abstractions.js"; @@ -19,25 +17,16 @@ export const DbFeature = createFeature({ const driver = new DynamoDbDriver({ documentClient: config.documentClient }); const db = new Db({ driver, table: config.table }); - // Register DynamoDBClient abstraction (Bruno's pattern: { client: DynamoDBDocument }) + // Raw DynamoDB document client abstraction ({ client: DynamoDBDocument }) — the DI-native + // replacement for the old `context.db.driver.getClient()`. DynamoDBClientFeature.register(container, config.documentClient); // DDB filter/query utilities — required for CMS entry filtering FilterUtilFeature.register(container); ValueFilterFeature.register(container); - // Register the full Db instance for code that needs driver + key-value store + // Full Db instance (driver + key-value store) for code that needs it — the DI-native + // replacement for `context.db`. Resolve via `DbInstance` instead of reading the context bag. container.registerInstance(DbInstance, db as Db); - - const EMPTY_SCHEMA = makeExecutableSchema({ - typeDefs: "type Query\ntype Mutation", - assumeValidSDL: true - }); - container.registerInstance(GraphQLContextualSchema, { - async build(ctx: Record) { - ctx.db = db; - return EMPTY_SCHEMA; - } - }); } }); diff --git a/packages/handler-db/src/abstractions.ts b/packages/handler-db/src/abstractions.ts index b77778a3c06..902ab6ddaeb 100644 --- a/packages/handler-db/src/abstractions.ts +++ b/packages/handler-db/src/abstractions.ts @@ -5,8 +5,8 @@ import type { Db } from "@webiny/db"; export { DynamoDBClient, DynamoDBClientFeature } from "@webiny/db-dynamodb"; /** - * The full Db instance (driver + key-value store). - * Provides context.db compatibility for legacy code. + * The full Db instance (driver + key-value store). The DI-native replacement for the old + * `context.db` bag — resolve this instead of reading the context. */ export const DbInstance = new Abstraction>("DbInstance"); diff --git a/packages/handler-db/src/index.ts b/packages/handler-db/src/index.ts index 50a5a20474c..42f18009055 100644 --- a/packages/handler-db/src/index.ts +++ b/packages/handler-db/src/index.ts @@ -8,6 +8,12 @@ export { DbFeature } from "./DbFeature.js"; export type { DbFeatureConfig } from "./DbFeature.js"; export { DynamoDBClient, DynamoDBClientFeature, DbInstance } from "./abstractions.js"; +/** + * @deprecated Legacy test-storage-preset glue that sets the `context.db` bag. Production wires the + * DB via `DbFeature` (DbInstance + DynamoDBClient DI abstractions) and never reads `context.db`. + * Still used by the DDB/DDB-ES `setupFile.js` storage presets — remove once those move to their own + * storage-operations factories/drivers (see the setupFile TODO). + */ export default (args: ConstructorArgs) => { const plugin = createRegisterExtensionPlugin(async context => { if (context.db) { diff --git a/packages/handler-db/tsconfig.build.json b/packages/handler-db/tsconfig.build.json index 316dcf38dd2..0bb4cf25640 100644 --- a/packages/handler-db/tsconfig.build.json +++ b/packages/handler-db/tsconfig.build.json @@ -8,8 +8,7 @@ { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../db-utils/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, - { "path": "../handler/tsconfig.build.json" }, - { "path": "../handler-graphql/tsconfig.build.json" } + { "path": "../handler/tsconfig.build.json" } ], "compilerOptions": { "rootDir": "./src", @@ -31,9 +30,7 @@ "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"] + "@webiny/handler": ["../handler/src"] } } } diff --git a/packages/handler-db/tsconfig.json b/packages/handler-db/tsconfig.json index a8a93cfe37c..e0cae9fbb75 100644 --- a/packages/handler-db/tsconfig.json +++ b/packages/handler-db/tsconfig.json @@ -8,8 +8,7 @@ { "path": "../db-dynamodb" }, { "path": "../db-utils" }, { "path": "../feature" }, - { "path": "../handler" }, - { "path": "../handler-graphql" } + { "path": "../handler" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -31,9 +30,7 @@ "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"] + "@webiny/handler": ["../handler/src"] } } } diff --git a/yarn.lock b/yarn.lock index 5ee2bca3310..c463ea5c229 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10399,7 +10399,6 @@ __metadata: "@webiny/feature": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" "@webiny/handler-aws": "npm:0.0.0" - "@webiny/handler-db": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" @@ -11214,6 +11213,7 @@ __metadata: "@webiny/api-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" + "@webiny/db-dynamodb": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/error": "npm:0.0.0" "@webiny/event-handler-aws": "npm:0.0.0" @@ -12717,7 +12717,6 @@ __metadata: version: 0.0.0-use.local resolution: "@webiny/handler-db@workspace:packages/handler-db" dependencies: - "@graphql-tools/schema": "npm:^10.0.34" "@webiny/api": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -12727,7 +12726,6 @@ __metadata: "@webiny/di": "npm:^1.0.2" "@webiny/feature": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" - "@webiny/handler-graphql": "npm:0.0.0" rimraf: "npm:^6.1.3" typescript: "npm:6.0.3" languageName: unknown From 0d02b86fa687aaa4107df8bca2ce54abb7ceae67 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 10:57:56 +0200 Subject: [PATCH 15/31] refactor(handler-db): move test-only dbPlugins to /testing subpath The legacy dbPlugins (test storage-preset glue) is now a named export from @webiny/handler-db/testing instead of the shipped default export; the two DDB/DDB-ES setupFile.js presets import it from there. Keeps test scaffolding out of the package's production entry. DbContext inlined into testing.ts; types.ts removed. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/__api__/setupFile.js | 2 +- .../__tests__/__api__/setupFile.js | 2 +- packages/handler-db/src/index.ts | 26 ---------------- packages/handler-db/src/testing.ts | 30 +++++++++++++++++++ packages/handler-db/src/types.ts | 6 ---- 5 files changed, 32 insertions(+), 34 deletions(-) create mode 100644 packages/handler-db/src/testing.ts delete mode 100644 packages/handler-db/src/types.ts diff --git a/packages/api-headless-cms-ddb-es/__tests__/__api__/setupFile.js b/packages/api-headless-cms-ddb-es/__tests__/__api__/setupFile.js index 18fd2dbfb00..a0c58a15399 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/__api__/setupFile.js +++ b/packages/api-headless-cms-ddb-es/__tests__/__api__/setupFile.js @@ -1,5 +1,5 @@ import { EntryBeforeCreateEventHandler } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js"; -import dbPlugins from "@webiny/handler-db"; +import { dbPlugins } from "@webiny/handler-db/testing"; import { DynamoDbDriver, registerDynamoDBCore } from "@webiny/db-dynamodb"; import { getDocumentClient, simulateStream } from "@webiny/project-utils/testing/dynamodb/index.js"; import { registerCmsOpenSearchStorageOperations } from "../../src/index"; diff --git a/packages/api-headless-cms-ddb/__tests__/__api__/setupFile.js b/packages/api-headless-cms-ddb/__tests__/__api__/setupFile.js index 9933260b789..460cfe9c59a 100644 --- a/packages/api-headless-cms-ddb/__tests__/__api__/setupFile.js +++ b/packages/api-headless-cms-ddb/__tests__/__api__/setupFile.js @@ -1,4 +1,4 @@ -import dbPlugins from "@webiny/handler-db"; +import { dbPlugins } from "@webiny/handler-db/testing"; import { DynamoDbDriver, registerDynamoDBCore } from "@webiny/db-dynamodb"; import { createCmsEntryFieldSortingPlugin, registerDynamoDbStorageOperations } from "../../src"; import { setStorageOps } from "@webiny/project-utils/testing/environment/index.js"; diff --git a/packages/handler-db/src/index.ts b/packages/handler-db/src/index.ts index 42f18009055..d080342804e 100644 --- a/packages/handler-db/src/index.ts +++ b/packages/handler-db/src/index.ts @@ -1,29 +1,3 @@ -import type { ConstructorArgs } from "@webiny/db"; -import { Db } from "@webiny/db"; -import { createRegisterExtensionPlugin } from "@webiny/handler"; -import type { DbContext } from "./types.js"; -import { DbRegistryFeature } from "@webiny/db/exports/api/db.js"; - export { DbFeature } from "./DbFeature.js"; export type { DbFeatureConfig } from "./DbFeature.js"; export { DynamoDBClient, DynamoDBClientFeature, DbInstance } from "./abstractions.js"; - -/** - * @deprecated Legacy test-storage-preset glue that sets the `context.db` bag. Production wires the - * DB via `DbFeature` (DbInstance + DynamoDBClient DI abstractions) and never reads `context.db`. - * Still used by the DDB/DDB-ES `setupFile.js` storage presets — remove once those move to their own - * storage-operations factories/drivers (see the setupFile TODO). - */ -export default (args: ConstructorArgs) => { - const plugin = createRegisterExtensionPlugin(async context => { - if (context.db) { - return; - } - - DbRegistryFeature.register(context.container); - - context.db = new Db(args); - }); - plugin.name = "handler-db/extension/db"; - return [plugin]; -}; diff --git a/packages/handler-db/src/testing.ts b/packages/handler-db/src/testing.ts new file mode 100644 index 00000000000..70a8b91ef19 --- /dev/null +++ b/packages/handler-db/src/testing.ts @@ -0,0 +1,30 @@ +import type { ConstructorArgs } from "@webiny/db"; +import { Db } from "@webiny/db"; +import { createRegisterExtensionPlugin } from "@webiny/handler"; +import { DbRegistryFeature } from "@webiny/db/exports/api/db.js"; +import type { Context } from "@webiny/api/types.js"; + +interface DbContext extends Context { + db: Db; +} + +/** + * @deprecated Test-only storage-preset glue: registers `DbRegistry` and sets the legacy `context.db` + * bag. Production wires the DB via `DbFeature` (DbInstance + DynamoDBClient DI abstractions) and never + * reads `context.db`. Used only by the DDB/DDB-ES `setupFile.js` test presets — remove once those + * move to their own storage-operations factories/drivers (see the setupFile TODO). The `DbRegistry` + * registration must be preserved (the DDB-ES CMS storage resolves it in `beforeInit`). + */ +export const dbPlugins = (args: ConstructorArgs) => { + const plugin = createRegisterExtensionPlugin(async context => { + if (context.db) { + return; + } + + DbRegistryFeature.register(context.container); + + context.db = new Db(args); + }); + plugin.name = "handler-db/extension/db"; + return [plugin]; +}; diff --git a/packages/handler-db/src/types.ts b/packages/handler-db/src/types.ts deleted file mode 100644 index 5fdf868466e..00000000000 --- a/packages/handler-db/src/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Db } from "@webiny/db"; -import type { Context } from "@webiny/api/types.js"; - -export interface DbContext extends Context { - db: Db; -} From 41b7c39978e05e3d847c419677bd61626fcf7987 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 12:40:20 +0200 Subject: [PATCH 16/31] refactor: convert cms-tasks + bulk-actions cluster off ContextPlugin to DI New HcmsBulkActionsFeature (config + 6 actions + tasks + a per-request RequestContextInitializer for the model-derived CmsGraphQLSchemaFactory). Eliminated the BulkActionContext service-locator bag: bulk-action tasks now inject concrete use-cases (TasksCrud/ListTasksUseCase/TriggerTaskUseCase/ GetModelUseCase) instead of the request context. HcmsTasksFeature now registers bulk-actions + delete-model directly (delete- model crud/graphql ContextPlugins -> RequestContextInitializers, order preserved for DeleteModelOperations/DisableModelFeature); deleted the HcmsTasksInitializer bridge. ddb-es orphan re-exports the feature. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/context/useGraphQLHandler.ts | 10 +- .../src/HcmsBulkActionsFeature.ts | 60 ++++++++++++ .../BulkActionContext/abstractions.ts | 10 -- .../src/features/BulkActionContext/index.ts | 1 - .../createBulkActionTasks.ts | 25 +++-- .../internals/ChildTasksCleanup.ts | 9 +- .../internals/CreateTasksByModel.ts | 18 ++-- .../internals/ProcessTasksByModel.ts | 12 +-- .../EntriesBulkAction/internals/TaskCache.ts | 11 +-- .../src/graphql/createDefaultGraphQL.ts | 95 ++++++++++--------- .../src/index.ts | 53 +---------- .../src/tasks/createEmptyTrashBinsTask.ts | 8 -- .../src/tasks/index.ts | 1 - .../src/index.ts | 16 +--- .../src/HcmsTasksFeature.ts | 17 +++- .../src/HcmsTasksInitializer.ts | 32 ------- .../src/graphql/deleteModel/crud.ts | 14 +-- .../src/graphql/deleteModel/index.ts | 14 +-- packages/api-headless-cms-tasks/src/index.ts | 24 ----- 19 files changed, 185 insertions(+), 245 deletions(-) create mode 100644 packages/api-headless-cms-bulk-actions/src/HcmsBulkActionsFeature.ts delete mode 100644 packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/abstractions.ts delete mode 100644 packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/index.ts delete mode 100644 packages/api-headless-cms-bulk-actions/src/tasks/createEmptyTrashBinsTask.ts delete mode 100644 packages/api-headless-cms-bulk-actions/src/tasks/index.ts delete mode 100644 packages/api-headless-cms-tasks/src/HcmsTasksInitializer.ts diff --git a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts index dab8aa75df7..5a81108ee04 100644 --- a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts +++ b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts @@ -1,5 +1,4 @@ import { getIntrospectionQuery } from "graphql"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; import { HeadlessCmsContextualSchema } from "@webiny/api-headless-cms/HeadlessCmsContextualSchema.js"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import { until } from "@webiny/project-utils/testing/helpers/until.js"; @@ -8,7 +7,7 @@ import type { IdentityData } from "@webiny/api-core/features/security/IdentityCo import type { Plugin, PluginCollection } from "@webiny/plugins/types"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; import { BackgroundTasksFeature } from "@webiny/background-tasks/api"; -import { createHcmsBulkActions } from "~/index"; +import { HcmsBulkActionsFeature } from "~/index"; import { createIdentity, createPermissions } from "~tests/context/helpers"; export interface UseGQLHandlerParams { @@ -33,10 +32,6 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { const extraCmsPlugins = ([plugins] as any[]).flat(Infinity as 1).filter(Boolean); - // createHcmsBulkActions is a legacy gql plugin applied via the contextual-schema path on - // /graphql (after the CMS contextual schema). Background tasks are DI-native (feature below). - const latePlugins = [createHcmsBulkActions()].flat(Infinity as 1).filter(Boolean); - const { handler, invoke } = createCmsTestHandler({ identity: params.identity ?? createIdentity(), permissions: params.permissions ?? (createPermissions() as SecurityPermission[]), @@ -44,8 +39,9 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { extraCmsPlugins, features: container => { container.register(HeadlessCmsContextualSchema); + // Background tasks + bulk actions are DI-native now. BackgroundTasksFeature.register(container); - registerLegacyPluginsViaGqlContextualSchema(container, latePlugins); + HcmsBulkActionsFeature.register(container); } }); diff --git a/packages/api-headless-cms-bulk-actions/src/HcmsBulkActionsFeature.ts b/packages/api-headless-cms-bulk-actions/src/HcmsBulkActionsFeature.ts new file mode 100644 index 00000000000..7b1707ca0db --- /dev/null +++ b/packages/api-headless-cms-bulk-actions/src/HcmsBulkActionsFeature.ts @@ -0,0 +1,60 @@ +import { type Container, createFeature } from "@webiny/feature/api"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import { + EntriesBulkAction, + EntriesBulkActionConfig +} from "~/features/EntriesBulkAction/abstractions.js"; +import { createBulkActionTasks } from "~/features/EntriesBulkAction/createBulkActionTasks.js"; +import { DeleteEntriesBulkActionFeature } from "~/features/DeleteEntriesBulkAction/feature.js"; +import { MoveToFolderBulkActionFeature } from "~/features/MoveToFolderBulkAction/feature.js"; +import { MoveToTrashBulkActionFeature } from "~/features/MoveToTrashBulkAction/feature.js"; +import { PublishEntriesBulkActionFeature } from "~/features/PublishEntriesBulkAction/feature.js"; +import { UnpublishEntriesBulkActionFeature } from "~/features/UnpublishEntriesBulkAction/feature.js"; +import { RestoreEntriesBulkActionFeature } from "~/features/RestoreEntriesBulkAction/feature.js"; +import { EmptyTrashBinTaskDefinition } from "~/tasks/EmptyTrashBinTaskDefinition.js"; +import { registerDefaultBulkActionGraphQL } from "~/graphql/createDefaultGraphQL.js"; +import { createBulkActionGraphQL } from "~/graphql/createBulkActionGraphQL.js"; +import type { HcmsBulkActionsContext } from "~/types.js"; + +export interface HcmsBulkActionsFeatureConfig { + batchSize?: number; +} + +export const HcmsBulkActionsFeature = createFeature({ + name: "HcmsBulkActions", + register(container: Container, config?: HcmsBulkActionsFeatureConfig) { + container.registerInstance(EntriesBulkActionConfig, { + batchSize: config?.batchSize ?? 100 + }); + + // Bulk-action implementations (one EntriesBulkAction each). + DeleteEntriesBulkActionFeature.register(container); + MoveToFolderBulkActionFeature.register(container); + MoveToTrashBulkActionFeature.register(container); + PublishEntriesBulkActionFeature.register(container); + UnpublishEntriesBulkActionFeature.register(container); + RestoreEntriesBulkActionFeature.register(container); + + container.register(EmptyTrashBinTaskDefinition); + + // Per-action task definitions (list + process). resolveAll works now that the actions are + // registered above; the task definitions need no per-request/model data. + const bulkActionsConfig = container.resolve(EntriesBulkActionConfig); + for (const bulkAction of container.resolveAll(EntriesBulkAction)) { + createBulkActionTasks(bulkAction, bulkActionsConfig).register(container); + } + + // The bulk-action GraphQL is model-derived (per-tenant models are known only at request + // time), so it's built in a RequestContextInitializer that registers CmsGraphQLSchemaFactory + // instances — merged by the CMS schema build that runs after initializers. + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const context = ctx as HcmsBulkActionsContext; + await registerDefaultBulkActionGraphQL(context); + for (const bulkAction of container.resolveAll(EntriesBulkAction)) { + await createBulkActionGraphQL(context, bulkAction); + } + } + }); + } +}); diff --git a/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/abstractions.ts b/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/abstractions.ts deleted file mode 100644 index 04a4aeefec9..00000000000 --- a/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/abstractions.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createAbstraction } from "@webiny/feature/api"; -import type { HcmsBulkActionsContext } from "~/types.js"; - -// TODO: this is a bridge for legacy context; needs review and refactor of code that uses it. - -export const BulkActionContext = createAbstraction("BulkActionContext"); - -export namespace BulkActionContext { - export type Interface = HcmsBulkActionsContext; -} diff --git a/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/index.ts b/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/index.ts deleted file mode 100644 index ea9ebfb8417..00000000000 --- a/packages/api-headless-cms-bulk-actions/src/features/BulkActionContext/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./abstractions.js"; diff --git a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/createBulkActionTasks.ts b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/createBulkActionTasks.ts index bdefe2064a6..902c6d62cc7 100644 --- a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/createBulkActionTasks.ts +++ b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/createBulkActionTasks.ts @@ -1,7 +1,7 @@ import { createFeature } from "@webiny/feature/api"; import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js"; import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; -import { BulkActionContext } from "~/features/BulkActionContext/index.js"; +import { ListTasksUseCase, TriggerTaskUseCase, TasksCrud } from "@webiny/background-tasks/api"; import type { IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput, @@ -41,14 +41,23 @@ export const createBulkActionTasks = ( public readonly maxIterations = 500; public readonly databaseLogs = false; public readonly isPrivate = true; - public readonly context: BulkActionContext.Interface; public readonly getModel: GetModelUseCase.Interface; + public readonly listTasks: ListTasksUseCase.Interface; + public readonly triggerTask: TriggerTaskUseCase.Interface; + public readonly tasksCrud: TasksCrud.Interface; public readonly selfCleanup = ["onSuccess" as const, "onAbort" as const]; - constructor(context: BulkActionContext.Interface, getModel: GetModelUseCase.Interface) { - this.context = context; + constructor( + getModel: GetModelUseCase.Interface, + listTasks: ListTasksUseCase.Interface, + triggerTask: TriggerTaskUseCase.Interface, + tasksCrud: TasksCrud.Interface + ) { this.getModel = getModel; + this.listTasks = listTasks; + this.triggerTask = triggerTask; + this.tasksCrud = tasksCrud; } async run({ @@ -67,14 +76,14 @@ export const createBulkActionTasks = ( switch (action) { case BulkActionOperationByModelAction.PROCESS_SUBTASKS: { - const processTasks = new ProcessTasksByModel(this.context, processTaskId); + const processTasks = new ProcessTasksByModel(this.listTasks, processTaskId); return await processTasks.execute({ input, controller }); } case BulkActionOperationByModelAction.CREATE_SUBTASKS: case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS: { const createTasks = new CreateTasksByModel( - this.context, this.getModel, + this.triggerTask, bulkAction, processTaskId, batchSize @@ -115,7 +124,7 @@ export const createBulkActionTasks = ( async cleanup(task: TaskDefinition.Task) { const childTasksCleanup = new ChildTasksCleanup(); try { - await childTasksCleanup.execute({ context: this.context, task }); + await childTasksCleanup.execute({ tasksCrud: this.tasksCrud, task }); } catch (ex) { console.error(`Error while cleaning "${listTaskId}" child tasks.`, ex); } @@ -157,7 +166,7 @@ export const createBulkActionTasks = ( const BulkListTask = TaskDefinition.createImplementation({ implementation: BulkActionListTask, - dependencies: [BulkActionContext, GetModelUseCase] + dependencies: [GetModelUseCase, ListTasksUseCase, TriggerTaskUseCase, TasksCrud] }); const BulkProcessTask = TaskDefinition.createImplementation({ diff --git a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts index f3a4d5596fa..978a19302af 100644 --- a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts +++ b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts @@ -1,9 +1,9 @@ -import type { ITask, Context } from "@webiny/background-tasks/api"; -import { TaskLogItemType, TasksCrud } from "@webiny/background-tasks/api"; +import type { ITask, TasksCrud } from "@webiny/background-tasks/api"; +import { TaskLogItemType } from "@webiny/background-tasks/api"; import type { IUseCase } from "~/abstractions/index.js"; export interface IChildTasksCleanupExecuteParams { - context: Context; + tasksCrud: TasksCrud.Interface; task: ITask; } @@ -13,8 +13,7 @@ export interface IChildTasksCleanupExecuteParams { */ export class ChildTasksCleanup implements IUseCase { public async execute(params: IChildTasksCleanupExecuteParams): Promise { - const { context, task } = params; - const tasksCrud = context.container.resolve(TasksCrud); + const { tasksCrud, task } = params; const { items: childTasks } = await tasksCrud.listTasks({ where: { diff --git a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/CreateTasksByModel.ts b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/CreateTasksByModel.ts index 96476b89911..d445b3d8c72 100644 --- a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/CreateTasksByModel.ts +++ b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/CreateTasksByModel.ts @@ -3,8 +3,8 @@ import { TaskCache } from "./TaskCache.js"; import type { IBulkActionOperationByModelTaskParams } from "~/types.js"; import { BulkActionOperationByModelAction } from "~/types.js"; import { EntriesBulkAction } from "~/features/EntriesBulkAction/abstractions.js"; -import { BulkActionContext } from "~/features/BulkActionContext/index.js"; -import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; +import type { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; +import type { TriggerTaskUseCase } from "@webiny/background-tasks/api"; const MAX_TASK_LIST_LENGTH = 10; @@ -15,12 +15,12 @@ export class CreateTasksByModel { private readonly taskCache: TaskCache; private readonly batchSize: number; private readonly bulkAction: EntriesBulkAction.Interface; - private readonly context: BulkActionContext.Interface; + private readonly triggerTask: TriggerTaskUseCase.Interface; private readonly getModel: GetModelUseCase.Interface; constructor( - context: BulkActionContext.Interface, getModel: GetModelUseCase.Interface, + triggerTask: TriggerTaskUseCase.Interface, bulkAction: EntriesBulkAction.Interface, taskDefinition: string, batchSize: number @@ -29,7 +29,7 @@ export class CreateTasksByModel { this.taskCache = new TaskCache(taskDefinition); this.batchSize = batchSize; this.bulkAction = bulkAction; - this.context = context; + this.triggerTask = triggerTask; } async execute(params: IBulkActionOperationByModelTaskParams) { @@ -55,7 +55,7 @@ export class CreateTasksByModel { if (controller.runtime.isAborted()) { return controller.response.aborted(); } else if (controller.runtime.isCloseToTimeout()) { - await this.taskCache.triggerTask(this.context, controller.state.getTask()); + await this.taskCache.triggerTask(this.triggerTask, controller.state.getTask()); return controller.response.continue({ ...input, action: BulkActionOperationByModelAction.PROCESS_SUBTASKS @@ -75,7 +75,7 @@ export class CreateTasksByModel { // Continue processing if we are reached the task list length limit if (this.taskCache.getTasksLength() === MAX_TASK_LIST_LENGTH) { - await this.taskCache.triggerTask(this.context, controller.state.getTask()); + await this.taskCache.triggerTask(this.triggerTask, controller.state.getTask()); return controller.response.continue({ ...input, action: BulkActionOperationByModelAction.PROCESS_SUBTASKS @@ -84,7 +84,7 @@ export class CreateTasksByModel { // Continue processing if no entries are returned in the current batch if (entries.length === 0) { - await this.taskCache.triggerTask(this.context, controller.state.getTask()); + await this.taskCache.triggerTask(this.triggerTask, controller.state.getTask()); return controller.response.continue({ ...input, action: BulkActionOperationByModelAction.PROCESS_SUBTASKS @@ -109,7 +109,7 @@ export class CreateTasksByModel { // Continue processing if there are no more entries or pagination is complete if (!meta.hasMoreItems || !meta.cursor) { - await this.taskCache.triggerTask(this.context, controller.state.getTask()); + await this.taskCache.triggerTask(this.triggerTask, controller.state.getTask()); return controller.response.continue({ ...input, diff --git a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ProcessTasksByModel.ts b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ProcessTasksByModel.ts index e21231268a3..0478fdb6f47 100644 --- a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ProcessTasksByModel.ts +++ b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/ProcessTasksByModel.ts @@ -1,7 +1,7 @@ -import { TaskDataStatus, ListTasksUseCase } from "@webiny/background-tasks/api"; +import { TaskDataStatus } from "@webiny/background-tasks/api"; +import type { ListTasksUseCase } from "@webiny/background-tasks/api"; import type { IBulkActionOperationByModelTaskParams } from "~/types.js"; import { BulkActionOperationByModelAction } from "~/types.js"; -import { BulkActionContext } from "~/features/BulkActionContext/index.js"; /** * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model. @@ -9,11 +9,11 @@ import { BulkActionContext } from "~/features/BulkActionContext/index.js"; * the task based on the status. */ export class ProcessTasksByModel { - private context: BulkActionContext.Interface; + private readonly listTasks: ListTasksUseCase.Interface; private readonly taskDefinition: string; - constructor(context: BulkActionContext.Interface, taskDefinition: string) { - this.context = context; + constructor(listTasks: ListTasksUseCase.Interface, taskDefinition: string) { + this.listTasks = listTasks; this.taskDefinition = taskDefinition; } @@ -28,7 +28,7 @@ export class ProcessTasksByModel { }); } - const { items } = await this.context.container.resolve(ListTasksUseCase).execute({ + const { items } = await this.listTasks.execute({ where: { parentId: controller.state.getTask().id, definitionId: this.taskDefinition, diff --git a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/TaskCache.ts b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/TaskCache.ts index 1a651cd32eb..a4eba9f7f68 100644 --- a/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/TaskCache.ts +++ b/packages/api-headless-cms-bulk-actions/src/features/EntriesBulkAction/internals/TaskCache.ts @@ -1,6 +1,5 @@ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js"; -import type { HcmsBulkActionsContext } from "~/types.js"; -import { TriggerTaskUseCase } from "@webiny/background-tasks/api"; +import type { TriggerTaskUseCase } from "@webiny/background-tasks/api"; /** * TaskCache class for managing and triggering cached tasks. @@ -23,11 +22,11 @@ export class TaskCache({ + await triggerTask.execute({ definition: this.taskDefinition, parent, input: task diff --git a/packages/api-headless-cms-bulk-actions/src/graphql/createDefaultGraphQL.ts b/packages/api-headless-cms-bulk-actions/src/graphql/createDefaultGraphQL.ts index 76442c0976f..0806b561ac4 100644 --- a/packages/api-headless-cms-bulk-actions/src/graphql/createDefaultGraphQL.ts +++ b/packages/api-headless-cms-bulk-actions/src/graphql/createDefaultGraphQL.ts @@ -6,53 +6,57 @@ import { } from "@webiny/api-headless-cms"; import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js"; import { CMS_MODEL_SINGLETON_TAG } from "@webiny/api-headless-cms/constants.js"; -import { ContextPlugin } from "@webiny/api"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -export const createDefaultGraphQL = () => { - return new ContextPlugin(async context => { - const tenant = context.container.resolve(TenantContext).getTenant(); +/** + * Registers the "default" bulk-action GraphQL for every public model: the shared response types plus, + * per model, an empty `BulkActionName` enum + `bulkAction` mutation skeleton (each + * action extends the enum via createBulkActionGraphQL). Run per-request from the bulk-actions + * RequestContextInitializer (models are only known at request time). + */ +export const registerDefaultBulkActionGraphQL = async (context: HcmsBulkActionsContext) => { + const tenant = context.container.resolve(TenantContext).getTenant(); - if (!(await isHeadlessCmsReady(context))) { - return; - } - - const defaultPlugin = new CmsGraphQLSchemaPlugin({ - typeDefs: /* GraphQL */ ` - type BulkActionResponseData { - id: String - } + if (!(await isHeadlessCmsReady(context))) { + return; + } - type BulkActionResponse { - data: BulkActionResponseData - error: CmsError - } - ` - }); - defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`; + const defaultPlugin = new CmsGraphQLSchemaPlugin({ + typeDefs: /* GraphQL */ ` + type BulkActionResponseData { + id: String + } - const modelsResult = await context.container - .resolve(IdentityContext) - .withoutAuthorization(async () => { - return context.container.resolve(ListModelsUseCase).execute(); - }); - if (modelsResult.isFail()) { - return; - } - const models = modelsResult.value.filter(model => { - if (model.isPrivate) { - return false; + type BulkActionResponse { + data: BulkActionResponseData + error: CmsError } - const tags = Array.isArray(model.tags) ? model.tags : []; - return !tags.includes(CMS_MODEL_SINGLETON_TAG); + ` + }); + defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`; + + const modelsResult = await context.container + .resolve(IdentityContext) + .withoutAuthorization(async () => { + return context.container.resolve(ListModelsUseCase).execute(); }); + if (modelsResult.isFail()) { + return; + } + const models = modelsResult.value.filter(model => { + if (model.isPrivate) { + return false; + } + const tags = Array.isArray(model.tags) ? model.tags : []; + return !tags.includes(CMS_MODEL_SINGLETON_TAG); + }); - const modelPlugins: CmsGraphQLSchemaPlugin[] = []; + const modelPlugins: CmsGraphQLSchemaPlugin[] = []; - models.forEach(model => { - const plugin = new CmsGraphQLSchemaPlugin({ - typeDefs: /* GraphQL */ ` + models.forEach(model => { + const plugin = new CmsGraphQLSchemaPlugin({ + typeDefs: /* GraphQL */ ` enum BulkAction${model.singularApiName}Name { _empty } @@ -66,16 +70,15 @@ export const createDefaultGraphQL = () => { ): BulkActionResponse } `, - isApplicable: context => - context.container.resolve(TenantContext).getTenant().id === tenant.id - }); - - plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`; - modelPlugins.push(plugin); + isApplicable: context => + context.container.resolve(TenantContext).getTenant().id === tenant.id }); - context.container.registerInstance(CmsGraphQLSchemaFactory, { - execute: () => [defaultPlugin, ...modelPlugins] - }); + plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`; + modelPlugins.push(plugin); + }); + + context.container.registerInstance(CmsGraphQLSchemaFactory, { + execute: () => [defaultPlugin, ...modelPlugins] }); }; diff --git a/packages/api-headless-cms-bulk-actions/src/index.ts b/packages/api-headless-cms-bulk-actions/src/index.ts index 27493328db1..e3c4bb2c17f 100644 --- a/packages/api-headless-cms-bulk-actions/src/index.ts +++ b/packages/api-headless-cms-bulk-actions/src/index.ts @@ -1,53 +1,4 @@ -import { createContextPlugin } from "@webiny/api"; -import { - EntriesBulkAction, - EntriesBulkActionConfig -} from "~/features/EntriesBulkAction/abstractions.js"; -import { BulkActionContext } from "~/features/BulkActionContext/index.js"; -import { createBulkActionTasks } from "~/features/EntriesBulkAction/createBulkActionTasks.js"; -import { createDefaultGraphQL } from "~/graphql/createDefaultGraphQL.js"; -import { createBulkActionGraphQL } from "~/graphql/createBulkActionGraphQL.js"; -import { DeleteEntriesBulkActionFeature } from "~/features/DeleteEntriesBulkAction/feature.js"; -import { MoveToFolderBulkActionFeature } from "~/features/MoveToFolderBulkAction/feature.js"; -import { MoveToTrashBulkActionFeature } from "~/features/MoveToTrashBulkAction/feature.js"; -import { PublishEntriesBulkActionFeature } from "~/features/PublishEntriesBulkAction/feature.js"; -import { UnpublishEntriesBulkActionFeature } from "~/features/UnpublishEntriesBulkAction/feature.js"; -import { RestoreEntriesBulkActionFeature } from "~/features/RestoreEntriesBulkAction/feature.js"; -import type { HcmsBulkActionsContext } from "~/types.js"; - export type * from "./abstractions/index.js"; -export { createEmptyTrashBinsTask } from "./tasks/index.js"; export { BulkActionsEventBridgeLambdaHandler } from "./BulkActionsEventBridgeLambdaHandler.js"; - -interface BulkActionsConfig { - batchSize?: number; -} - -export const createHcmsBulkActions = (config?: BulkActionsConfig) => { - const batchSize = config?.batchSize ?? 100; - - return [ - createDefaultGraphQL(), - createContextPlugin(context => { - context.container.registerInstance(EntriesBulkActionConfig, { batchSize }); - DeleteEntriesBulkActionFeature.register(context.container); - MoveToFolderBulkActionFeature.register(context.container); - MoveToTrashBulkActionFeature.register(context.container); - PublishEntriesBulkActionFeature.register(context.container); - UnpublishEntriesBulkActionFeature.register(context.container); - RestoreEntriesBulkActionFeature.register(context.container); - }), - createContextPlugin(async context => { - context.container.registerInstance(BulkActionContext, context); - - const bulkActions = context.container.resolveAll(EntriesBulkAction); - const bulkActionsConfig = context.container.resolve(EntriesBulkActionConfig); - - for (const bulkAction of bulkActions) { - const feature = createBulkActionTasks(bulkAction, bulkActionsConfig); - feature.register(context.container); - await createBulkActionGraphQL(context, bulkAction); - } - }) - ]; -}; +export { HcmsBulkActionsFeature } from "./HcmsBulkActionsFeature.js"; +export type { HcmsBulkActionsFeatureConfig } from "./HcmsBulkActionsFeature.js"; diff --git a/packages/api-headless-cms-bulk-actions/src/tasks/createEmptyTrashBinsTask.ts b/packages/api-headless-cms-bulk-actions/src/tasks/createEmptyTrashBinsTask.ts deleted file mode 100644 index d17d22e2e8b..00000000000 --- a/packages/api-headless-cms-bulk-actions/src/tasks/createEmptyTrashBinsTask.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createContextPlugin } from "@webiny/api"; -import { EmptyTrashBinTaskDefinition } from "./EmptyTrashBinTaskDefinition.js"; - -export const createEmptyTrashBinsTask = () => { - return createContextPlugin(context => { - context.container.register(EmptyTrashBinTaskDefinition); - }); -}; diff --git a/packages/api-headless-cms-bulk-actions/src/tasks/index.ts b/packages/api-headless-cms-bulk-actions/src/tasks/index.ts deleted file mode 100644 index d8222fcc215..00000000000 --- a/packages/api-headless-cms-bulk-actions/src/tasks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./createEmptyTrashBinsTask.js"; diff --git a/packages/api-headless-cms-tasks-ddb-es/src/index.ts b/packages/api-headless-cms-tasks-ddb-es/src/index.ts index 81435ab239e..f1e1ecd3958 100644 --- a/packages/api-headless-cms-tasks-ddb-es/src/index.ts +++ b/packages/api-headless-cms-tasks-ddb-es/src/index.ts @@ -1,13 +1,3 @@ -import { - createEmptyTrashBinsTask, - createHcmsBulkActions -} from "@webiny/api-headless-cms-bulk-actions"; -import { createDeleteModelTask } from "@webiny/api-headless-cms-tasks"; - -export const createHcmsTasks = () => { - return [ - createHcmsBulkActions({ batchSize: 1000 }), - createEmptyTrashBinsTask(), - createDeleteModelTask() - ]; -}; +// The DDB-ES variant now shares the DI-native HcmsTasksFeature (storage is provided separately via +// DbFeature / registerRequestStorage). Kept as a re-export for the storage-flavour package surface. +export { HcmsTasksFeature } from "@webiny/api-headless-cms-tasks"; diff --git a/packages/api-headless-cms-tasks/src/HcmsTasksFeature.ts b/packages/api-headless-cms-tasks/src/HcmsTasksFeature.ts index c11bd637550..0aff7a1075a 100644 --- a/packages/api-headless-cms-tasks/src/HcmsTasksFeature.ts +++ b/packages/api-headless-cms-tasks/src/HcmsTasksFeature.ts @@ -1,9 +1,22 @@ import { type Container, createFeature } from "@webiny/feature/api"; -import { HcmsTasksInitializer } from "./HcmsTasksInitializer.js"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import { HcmsBulkActionsFeature } from "@webiny/api-headless-cms-bulk-actions"; +import { DeleteModelTaskFeature } from "./features/DeleteModelTask/feature.js"; +import { createDeleteModelCrud } from "./graphql/deleteModel/crud.js"; +import { createDeleteModelGraphQl } from "./graphql/deleteModel/index.js"; export const HcmsTasksFeature = createFeature({ name: "HcmsTasks", register(container: Container) { - container.register(HcmsTasksInitializer); + // Bulk actions (entries) + the empty-trash-bin task. + HcmsBulkActionsFeature.register(container, { batchSize: 100 }); + + // Delete-model task + its per-request operations/schema. The crud initializer registers + // DeleteModelOperations (+ DisableModelFeature) and MUST run before the GraphQL initializer, + // whose resolvers resolve DeleteModelOperations — RequestContextInitializers run in + // registration order. + DeleteModelTaskFeature.register(container); + container.registerInstance(RequestContextInitializer, createDeleteModelCrud()); + container.registerInstance(RequestContextInitializer, createDeleteModelGraphQl()); } }); diff --git a/packages/api-headless-cms-tasks/src/HcmsTasksInitializer.ts b/packages/api-headless-cms-tasks/src/HcmsTasksInitializer.ts deleted file mode 100644 index 3b539bc60f0..00000000000 --- a/packages/api-headless-cms-tasks/src/HcmsTasksInitializer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { RequestContextInitializer } from "@webiny/event-handler-core"; -import type { IRequestContextInitializer } from "@webiny/event-handler-core"; -import { createHcmsTasks } from "./index.js"; - -// A request initializer: it contributes no schema content, it just runs the legacy -// createHcmsTasks() plugins per request. It runs after context enhancers and after the CMS -// initializer (which registers the CMS facade and ctx.plugins these plugins rely on), and before -// contextual schemas. -class HcmsTasksInitializerImpl implements IRequestContextInitializer { - private readonly plugins = createHcmsTasks().flat(Infinity as 1); - private initialized = false; - - async init(ctx: Record): Promise { - if (!this.initialized) { - this.initialized = true; - - // Every createHcmsTasks() plugin is a ContextPlugin whose apply() does DI registration - // (CmsGraphQLSchemaFactory / Feature.register). The old `else ctx.plugins.register(...)` - // fallback was dead — nothing produced non-apply plugins here. - for (const plugin of this.plugins) { - if (plugin && typeof (plugin as any).apply === "function") { - await (plugin as any).apply(ctx); - } - } - } - } -} - -export const HcmsTasksInitializer = RequestContextInitializer.createImplementation({ - implementation: HcmsTasksInitializerImpl, - dependencies: [] -}); diff --git a/packages/api-headless-cms-tasks/src/graphql/deleteModel/crud.ts b/packages/api-headless-cms-tasks/src/graphql/deleteModel/crud.ts index b0200f783ec..1c218f6a35c 100644 --- a/packages/api-headless-cms-tasks/src/graphql/deleteModel/crud.ts +++ b/packages/api-headless-cms-tasks/src/graphql/deleteModel/crud.ts @@ -6,7 +6,7 @@ import { createMemoryCache } from "@webiny/api-headless-cms/utils/index.js"; import type { IStoreValue } from "~/features/DeleteModelTask/types.js"; import type { ListStoreKeysResult } from "~/features/DeleteModelTask/types.js"; import type { GenericRecord } from "@webiny/api/types.js"; -import { ContextPlugin } from "@webiny/api"; +import type { RequestContextInitializer } from "@webiny/event-handler-core"; import { DisableModelFeature } from "~/features/DisableModel/feature.js"; import { createStoreNamespace } from "~/helpers/store.js"; import { fullyDeleteModel } from "~/graphql/deleteModel/fullyDeleteModel.js"; @@ -14,8 +14,8 @@ import { cancelDeleteModel } from "~/graphql/deleteModel/cancelDeleteModel.js"; import { getDeleteModelProgress } from "~/graphql/deleteModel/getDeleteModelProgress.js"; import { DeleteModelOperations } from "~/graphql/deleteModel/abstractions.js"; -export const createDeleteModelCrud = () => { - const plugin = new ContextPlugin(async context => { +export const createDeleteModelCrud = (): RequestContextInitializer.Interface => ({ + async init(context: HcmsTasksContext) { const getTenant = (): string => { return context.container.resolve(TenantContext).getTenant().id; }; @@ -74,9 +74,5 @@ export const createDeleteModelCrud = () => { context.container.registerInstance(DeleteModelOperations, operations); DisableModelFeature.register(context.container); - }); - - plugin.name = "headlessCms.context.cms.fullyDeleteModel"; - - return plugin; -}; + } +}); diff --git a/packages/api-headless-cms-tasks/src/graphql/deleteModel/index.ts b/packages/api-headless-cms-tasks/src/graphql/deleteModel/index.ts index 775c30ea8df..6a30834e23c 100644 --- a/packages/api-headless-cms-tasks/src/graphql/deleteModel/index.ts +++ b/packages/api-headless-cms-tasks/src/graphql/deleteModel/index.ts @@ -1,5 +1,5 @@ import zod from "zod"; -import { ContextPlugin } from "@webiny/api"; +import type { RequestContextInitializer } from "@webiny/event-handler-core"; import { CmsGraphQLSchemaPlugin, CmsGraphQLSchemaFactory, @@ -47,8 +47,10 @@ const getValidation = zod }) .readonly(); -export const createDeleteModelGraphQl = () => { - const contextPlugin = new ContextPlugin(async inputContext => { +export const createDeleteModelGraphQl = < + T extends HcmsTasksContext = HcmsTasksContext +>(): RequestContextInitializer.Interface => ({ + async init(inputContext: T) { const ready = await isHeadlessCmsReady(inputContext); if (!ready || !inputContext.container.resolve(HeadlessCms).MANAGE) { @@ -202,7 +204,5 @@ export const createDeleteModelGraphQl = [plugin] }); - }); - contextPlugin.name = "headless-cms.context.createDeleteModelGraphQl"; - return contextPlugin; -}; + } +}); diff --git a/packages/api-headless-cms-tasks/src/index.ts b/packages/api-headless-cms-tasks/src/index.ts index ea565319015..4a0dbd49e6b 100644 --- a/packages/api-headless-cms-tasks/src/index.ts +++ b/packages/api-headless-cms-tasks/src/index.ts @@ -1,25 +1 @@ -import { - createEmptyTrashBinsTask, - createHcmsBulkActions -} from "@webiny/api-headless-cms-bulk-actions"; -import { createContextPlugin } from "@webiny/api"; -import { DeleteModelTaskFeature } from "~/features/DeleteModelTask/feature.js"; -import { createDeleteModelCrud } from "~/graphql/deleteModel/crud.js"; -import { createDeleteModelGraphQl } from "~/graphql/deleteModel/index.js"; - -export const createDeleteModelTask = () => { - return [ - createDeleteModelCrud(), - createDeleteModelGraphQl(), - createContextPlugin(context => { - DeleteModelTaskFeature.register(context.container); - }) - ]; -}; - -export const createHcmsTasks = () => [ - createHcmsBulkActions({ batchSize: 100 }), - createEmptyTrashBinsTask(), - createDeleteModelTask() -]; export { HcmsTasksFeature } from "./HcmsTasksFeature.js"; From f43f032ed30e900e6acf961094fa8cf08d8e0812 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 12:58:21 +0200 Subject: [PATCH 17/31] refactor(fm-s3): convert file-manager-s3 off ContextPlugin to DI FileManagerS3Feature now registers the S3 file-operation features + the static S3 GraphQL schema (CoreGraphQLSchemaFactory) natively, dropping the legacy ContextPlugin + createFileManagerS3 array. WCP-gated threat scanning moved to a RequestContextInitializer so the canUseFileManagerThreatDetection() gate runs after the per-request license refresh (register-time reads NullLicense and would silently skip it). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../src/FileManagerS3Feature.ts | 53 +++++++++++++++++-- packages/api-file-manager-s3/src/index.ts | 31 +---------- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/packages/api-file-manager-s3/src/FileManagerS3Feature.ts b/packages/api-file-manager-s3/src/FileManagerS3Feature.ts index 308fcce988e..49a7aa9825e 100644 --- a/packages/api-file-manager-s3/src/FileManagerS3Feature.ts +++ b/packages/api-file-manager-s3/src/FileManagerS3Feature.ts @@ -1,6 +1,15 @@ import { type Container, createFeature } from "@webiny/feature/api"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import { createFileManagerS3 } from "./index.js"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js"; +import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js"; +import { createS3GraphQLSchema } from "./graphql/schema.js"; +import { DeleteFileFromBucketFeature } from "~/features/DeleteFileFromBucket/feature.js"; +import { WriteFileMetadataFeature } from "~/features/WriteFileMetadata/feature.js"; +import { ApplyThreatScanningFeature } from "~/enterprise/ApplyThreatScanning/feature.js"; +import { FlushCacheFeature } from "~/features/FlushCache/feature.js"; +import { ExtractMetadataFeature } from "~/features/ExtractMetadata/feature.js"; +import { GetFileContentsByIdFeature } from "~/features/GetFileContentsById/feature.js"; +import { GetFileContentsByKeyFeature } from "~/features/GetFileContentsByKey/feature.js"; import { createS3AssetDeliveryFeature } from "./assetDelivery/feature.js"; import type { AssetDeliveryParams } from "./assetDelivery/types.js"; @@ -11,10 +20,44 @@ export interface FileManagerS3FeatureConfig { export const FileManagerS3Feature = createFeature({ name: "FileManagerS3", register(container: Container, config: FileManagerS3FeatureConfig = {}) { - // Register S3-specific asset delivery implementations (S3AssetResolver, S3OutputStrategy) - // These replace the null implementations from AssetDeliveryFeature in FileManagerAppFeature + // Register S3-specific asset delivery implementations (S3AssetResolver, S3OutputStrategy). + // These replace the null implementations from AssetDeliveryFeature in FileManagerAppFeature. createS3AssetDeliveryFeature(config.assetDelivery).register(container); - registerLegacyPluginsViaGqlContextualSchema(container, createFileManagerS3()); + // S3 file-operation features. + FlushCacheFeature.register(container); + DeleteFileFromBucketFeature.register(container); + ExtractMetadataFeature.register(container); + WriteFileMetadataFeature.register(container); + GetFileContentsByIdFeature.register(container); + GetFileContentsByKeyFeature.register(container); + + // Static S3 GraphQL schema (extends FmQuery/FmMutation) — contribute to the core schema. + const s3Schema = createS3GraphQLSchema(); + container.registerInstance(CoreGraphQLSchemaFactory, { + async execute(builder) { + const { schema } = s3Schema; + if (schema.typeDefs) { + builder.addTypeDefs(schema.typeDefs); + } + if (schema.resolvers) { + builder.addLegacyResolvers(schema.resolvers as Record); + } + return builder; + } + }); + + // Threat scanning is WCP-gated. The gate MUST run after the per-request WCP license refresh + // (a RequestInitializer, pre-auth) — at register() time WcpContext still sees the NullLicense + // and the feature would silently never register. So gate + register it in a + // RequestContextInitializer (post-auth, post-license). + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const wcp = ctx.container.resolve(WcpContext); + if (wcp.canUseFileManagerThreatDetection()) { + ApplyThreatScanningFeature.register(ctx.container); + } + } + }); } }); diff --git a/packages/api-file-manager-s3/src/index.ts b/packages/api-file-manager-s3/src/index.ts index f445698f116..2f8489f1647 100644 --- a/packages/api-file-manager-s3/src/index.ts +++ b/packages/api-file-manager-s3/src/index.ts @@ -1,33 +1,4 @@ -import { ContextPlugin } from "@webiny/api"; -import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js"; -import { createS3GraphQLSchema } from "./graphql/schema.js"; -import { DeleteFileFromBucketFeature } from "~/features/DeleteFileFromBucket/feature.js"; -import { WriteFileMetadataFeature } from "~/features/WriteFileMetadata/feature.js"; -import { ApplyThreatScanningFeature } from "~/enterprise/ApplyThreatScanning/feature.js"; -import { FlushCacheFeature } from "~/features/FlushCache/feature.js"; -import { ExtractMetadataFeature } from "~/features/ExtractMetadata/feature.js"; -import { GetFileContentsByIdFeature } from "~/features/GetFileContentsById/feature.js"; -import { GetFileContentsByKeyFeature } from "~/features/GetFileContentsByKey/feature.js"; export { createFileUploadModifier } from "./utils/FileUploadModifier.js"; export { createAssetDelivery } from "./assetDelivery/createAssetDelivery.js"; - -const contextPlugin = new ContextPlugin(context => { - const container = context.container; - - FlushCacheFeature.register(container); - DeleteFileFromBucketFeature.register(container); - ExtractMetadataFeature.register(container); - WriteFileMetadataFeature.register(container); - GetFileContentsByIdFeature.register(container); - GetFileContentsByKeyFeature.register(container); - - const wcp = container.resolve(WcpContext); - if (wcp.canUseFileManagerThreatDetection()) { - ApplyThreatScanningFeature.register(container); - } -}); - -contextPlugin.name = `fileManagerS3.context`; - -export const createFileManagerS3 = () => [contextPlugin, createS3GraphQLSchema()]; export { FileManagerS3Feature } from "./FileManagerS3Feature.js"; +export type { FileManagerS3FeatureConfig } from "./FileManagerS3Feature.js"; From 1add1493980c844bd092859c2ce457568635fc95 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Fri, 10 Jul 2026 16:18:19 +0200 Subject: [PATCH 18/31] chore: yarn format Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/cli-core/files/references.json | 8367 ++++++++++++++++++++++- 1 file changed, 8366 insertions(+), 1 deletion(-) diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index c8085580d57..1155f21aeed 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -1 +1,8366 @@ -{"dependencies":[{"name":"@ai-sdk/anthropic","version":"4.0.8","files":["/packages/api-core/package.json","/packages/api-core/package.json"]},{"name":"@ai-sdk/openai","version":"4.0.8","files":["/packages/api-core/package.json","/packages/api-core/package.json"]},{"name":"@apollo/react-components","version":"3.1.5","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@apollo/react-hooks","version":"3.1.5","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@auth0/auth0-spa-js","version":"2.23.0","files":["/packages/auth0/package.json","/packages/auth0/package.json"]},{"name":"@aws-sdk/client-apigatewaymanagementapi","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudfront","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-events","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-logs","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cognito-identity-provider","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb-streams","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-eventbridge","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iam","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iot","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-lambda","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-s3","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-scheduler","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sfn","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sqs","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sts","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/credential-providers","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-dynamodb","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-storage","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-presigned-post","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-request-presigner","version":"3.1080.0","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/util-dynamodb","version":"3.996.5","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@babel/code-frame","version":"8.0.0","files":["/packages/api-headless-cms/package.json","/packages/api-headless-cms/package.json"]},{"name":"@emotion/css","version":"11.13.5","files":["/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor-actions/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor-actions/package.json"]},{"name":"@emotion/react","version":"11.14.0","files":["/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json"]},{"name":"@emotion/styled","version":"11.14.1","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor-actions/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor-actions/package.json"]},{"name":"@fortawesome/fontawesome-common-types","version":"7.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"@fortawesome/fontawesome-svg-core","version":"7.3.0","files":["/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json"]},{"name":"@fortawesome/free-brands-svg-icons","version":"7.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"@fortawesome/free-regular-svg-icons","version":"7.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"@fortawesome/free-solid-svg-icons","version":"7.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"@fortawesome/react-fontawesome","version":"3.3.1","files":["/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json","/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json"]},{"name":"@graphql-tools/merge","version":"9.1.11","files":["/packages/api-headless-cms/package.json","/packages/api-record-locking/package.json","/packages/background-tasks/package.json","/packages/handler-graphql/package.json","/packages/api-headless-cms/package.json","/packages/api-record-locking/package.json","/packages/background-tasks/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/resolvers-composition","version":"7.0.33","files":["/packages/handler-graphql/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/schema","version":"10.0.35","files":["/packages/api-audit-logs/package.json","/packages/api-headless-cms/package.json","/packages/api-record-locking/package.json","/packages/background-tasks/package.json","/packages/handler-graphql/package.json","/packages/api-audit-logs/package.json","/packages/api-headless-cms/package.json","/packages/api-record-locking/package.json","/packages/background-tasks/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/utils","version":"11.2.0","files":["/packages/handler-graphql/package.json","/packages/handler-graphql/package.json"]},{"name":"@iconify/json","version":"2.2.497","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@lexical/code","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/hashtag","version":"0.46.0","files":["/packages/lexical-nodes/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/headless","version":"0.46.0","files":["/packages/lexical-converter/package.json","/packages/lexical-converter/package.json"]},{"name":"@lexical/history","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-editor/package.json"]},{"name":"@lexical/html","version":"0.46.0","files":["/packages/lexical-converter/package.json","/packages/lexical-converter/package.json"]},{"name":"@lexical/list","version":"0.46.0","files":["/packages/lexical-nodes/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/mark","version":"0.46.0","files":["/packages/lexical-nodes/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/overflow","version":"0.46.0","files":["/packages/lexical-nodes/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/react","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/rich-text","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/selection","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/text","version":"0.46.0","files":["/packages/lexical-editor/package.json","/packages/lexical-editor/package.json"]},{"name":"@lexical/utils","version":"0.46.0","files":["/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.15","files":["/packages/app-scheduler/package.json","/packages/app-scheduler/package.json"]},{"name":"@minoru/react-dnd-treeview","version":"3.5.4","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@modelcontextprotocol/sdk","version":"1.29.0","files":["/packages/mcp/package.json","/packages/mcp/package.json"]},{"name":"@monaco-editor/react","version":"4.7.0","files":["/packages/admin-ui/package.json","/packages/app-sdk-playground/package.json","/packages/app-website-builder/package.json","/packages/admin-ui/package.json","/packages/app-sdk-playground/package.json","/packages/app-website-builder/package.json"]},{"name":"@noble/hashes","version":"2.2.0","files":["/packages/utils/package.json","/packages/utils/package.json"]},{"name":"@octokit/rest","version":"22.0.1","files":["/scripts/release/package.json","/scripts/release/package.json"]},{"name":"@okta/okta-auth-js","version":"8.0.1","files":["/packages/okta/package.json","/packages/okta/package.json"]},{"name":"@opensearch-project/opensearch","version":"3.6.0","files":["/packages/api-opensearch/package.json","/packages/api-opensearch/package.json"]},{"name":"@pulumi/aws","version":"7.35.0","files":["/packages/project-aws/package.json","/packages/pulumi-sdk/package.json","/packages/project-aws/package.json","/packages/pulumi-sdk/package.json"]},{"name":"@pulumi/pulumi","version":"3.250.0","files":["/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json"]},{"name":"@pulumi/random","version":"4.21.0","files":["/packages/project-aws/package.json","/packages/project-aws/package.json"]},{"name":"@radix-ui/react-scroll-area","version":"1.2.14","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@rsbuild/core","version":"2.1.4","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rsbuild/plugin-react","version":"2.1.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rsbuild/plugin-sass","version":"2.0.1","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rsbuild/plugin-svgr","version":"2.0.5","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rsbuild/plugin-type-check","version":"1.5.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rsdoctor/rspack-plugin","version":"1.5.17","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rslib/core","version":"0.23.2","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@rspack/core","version":"2.1.2","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@swc/plugin-emotion","version":"14.15.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@tailwindcss/postcss","version":"4.3.2","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"@tanstack/react-table","version":"8.21.3","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@types/aws-lambda","version":"8.10.162","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"@types/hoist-non-react-statics","version":"3.3.7","files":["/package.json"]},{"name":"@types/prismjs","version":"1.26.6","files":["/packages/lexical-nodes/package.json","/packages/lexical-nodes/package.json"]},{"name":"@types/react","version":"18.3.31","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"accounting","version":"0.4.1","files":["/packages/i18n/package.json","/packages/i18n/package.json"]},{"name":"ai","version":"7.0.16","files":["/packages/ai-powerups/package.json","/packages/api-core/package.json","/packages/ai-powerups/package.json","/packages/api-core/package.json"]},{"name":"apollo-cache","version":"1.3.5","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json"]},{"name":"apollo-cache-inmemory","version":"1.6.6","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"apollo-client","version":"2.6.10","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json"]},{"name":"apollo-link","version":"1.2.14","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json"]},{"name":"apollo-link-batch-http","version":"1.2.14","files":["/packages/app-serverless-cms/package.json","/packages/app-serverless-cms/package.json"]},{"name":"apollo-link-context","version":"1.0.20","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json"]},{"name":"apollo-link-error","version":"1.1.13","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"apollo-link-http-common","version":"0.2.16","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"apollo-utilities","version":"1.3.4","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-serverless-cms/package.json"]},{"name":"aws-amplify","version":"6.18.0","files":["/packages/cognito/package.json","/packages/cognito/package.json"]},{"name":"better-sqlite3","version":"12.11.1","files":["/packages/project-server-template/template/appTemplates/api/graphql/package.json","/packages/project-server-template/template/appTemplates/api/graphql/package.json"]},{"name":"bree","version":"9.2.9","files":["/packages/api-scheduler-server/package.json","/packages/api-scheduler-server/package.json"]},{"name":"bson-objectid","version":"2.0.4","files":["/packages/utils/package.json","/packages/utils/package.json"]},{"name":"bytes","version":"3.1.2","files":["/packages/admin-ui/package.json","/packages/api-sync-system/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/admin-ui/package.json","/packages/api-sync-system/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json"]},{"name":"cache-control-parser","version":"2.2.0","files":["/packages/api-file-manager/package.json","/packages/api-file-manager/package.json"]},{"name":"chalk","version":"5.6.2","files":["/packages/aws-layers/package.json","/packages/build-tools/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/cli-server/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/system-requirements/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/cli/package.json","/scripts/release/package.json","/packages/aws-layers/package.json","/packages/build-tools/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/cli-server/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/system-requirements/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/cli/package.json","/scripts/release/package.json"]},{"name":"cheerio","version":"1.2.0","files":["/packages/lexical-converter/package.json","/packages/lexical-converter/package.json"]},{"name":"chokidar","version":"5.0.0","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"ci-info","version":"4.4.0","files":["/packages/cli-core/package.json","/packages/global-config/package.json","/packages/project/package.json","/packages/telemetry/package.json","/packages/cli-core/package.json","/packages/global-config/package.json","/packages/project/package.json","/packages/telemetry/package.json"]},{"name":"class-variance-authority","version":"0.7.1","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"classnames","version":"2.5.1","files":["/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/app-admin/package.json","/packages/app-website-builder/package.json"]},{"name":"cli-progress","version":"3.12.0","files":["/scripts/cjsToEsm/package.json","/scripts/cjsToEsm/package.json"]},{"name":"cli-table3","version":"0.6.5","files":["/packages/system-requirements/package.json","/packages/system-requirements/package.json"]},{"name":"clsx","version":"2.1.1","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"cmdk","version":"1.1.1","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"css-loader","version":"7.1.4","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"csstype","version":"3.2.3","files":["/packages/website-builder-sdk/package.json","/packages/website-builder-sdk/package.json"]},{"name":"dataloader","version":"2.2.3","files":["/packages/api-core/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-core/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json"]},{"name":"date-fns","version":"4.4.0","files":["/packages/admin-ui/package.json","/packages/api-headless-cms-storage/package.json","/packages/app-audit-logs/package.json","/packages/db-dynamodb/package.json","/packages/admin-ui/package.json","/packages/api-headless-cms-storage/package.json","/packages/app-audit-logs/package.json","/packages/db-dynamodb/package.json"]},{"name":"dayjs","version":"1.11.21","files":["/packages/app-file-manager/package.json","/packages/app-file-manager/package.json"]},{"name":"debounce","version":"3.0.0","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"decompress","version":"4.2.1","files":["/packages/pulumi-sdk/package.json","/packages/pulumi-sdk/package.json"]},{"name":"deep-equal","version":"2.2.3","files":["/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json","/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json"]},{"name":"deepmerge","version":"4.3.1","files":["/packages/project/package.json","/packages/website-builder-sdk/package.json","/packages/project/package.json","/packages/website-builder-sdk/package.json"]},{"name":"dnd-core","version":"16.0.1","files":["/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-common/package.json"]},{"name":"dot-prop","version":"10.1.0","files":["/packages/api-headless-cms-storage/package.json","/packages/db-dynamodb/package.json","/packages/api-headless-cms-storage/package.json","/packages/db-dynamodb/package.json"]},{"name":"dot-prop-immutable","version":"2.1.1","files":["/packages/api-headless-cms/package.json","/packages/app-headless-cms/package.json","/packages/api-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"dotenv","version":"17.4.2","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"dynamodb-toolbox","version":"0.9.5","files":["/packages/db-dynamodb/package.json","/packages/db-dynamodb/package.json"]},{"name":"email-addresses","version":"5.0.0","files":["/packages/api-mailer/package.json","/packages/project-aws/package.json","/packages/api-mailer/package.json","/packages/project-aws/package.json"]},{"name":"execa","version":"9.6.1","files":["/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/packages/system-requirements/package.json","/scripts/buildPackages/package.json","/scripts/release/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/packages/system-requirements/package.json","/scripts/buildPackages/package.json","/scripts/release/package.json"]},{"name":"exifreader","version":"4.41.0","files":["/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json"]},{"name":"exit-hook","version":"5.1.0","files":["/packages/project/package.json","/packages/project-aws/package.json","/packages/project/package.json","/packages/project-aws/package.json"]},{"name":"fast-glob","version":"3.3.3","files":["/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/i18n/package.json","/packages/project/package.json","/scripts/cjsToEsm/package.json","/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/i18n/package.json","/packages/project/package.json","/scripts/cjsToEsm/package.json"]},{"name":"fast-json-patch","version":"3.1.1","files":["/packages/website-builder-sdk/package.json","/packages/website-builder-sdk/package.json"]},{"name":"fast-json-stable-stringify","version":"2.1.0","files":["/packages/website-builder-sdk/package.json","/packages/website-builder-sdk/package.json"]},{"name":"fecha","version":"4.2.3","files":["/packages/i18n/package.json","/packages/i18n/package.json"]},{"name":"find-up","version":"8.0.0","files":["/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/scripts/prepublishOnly/package.json","/scripts/cli/package.json","/scripts/cjsToEsm/package.json","/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/scripts/prepublishOnly/package.json","/scripts/cli/package.json","/scripts/cjsToEsm/package.json"]},{"name":"front-matter","version":"4.0.2","files":["/packages/ai-powerups/package.json","/packages/mcp/package.json","/packages/ai-powerups/package.json","/packages/mcp/package.json"]},{"name":"fs-extra","version":"11.3.6","files":["/packages/build-tools/package.json","/packages/create-webiny-project/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/packages/build-tools/package.json","/packages/create-webiny-project/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"fuse.js","version":"7.4.2","files":["/packages/db-utils/package.json","/packages/db-utils/package.json"]},{"name":"get-tsconfig","version":"4.14.0","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/project-utils/package.json","/scripts/prepublishOnly/package.json","/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/project-utils/package.json","/scripts/prepublishOnly/package.json"]},{"name":"graphql","version":"16.14.2","files":["/packages/api-core/package.json","/packages/api-file-manager/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-scheduler/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/handler-graphql/package.json","/packages/languages/package.json","/packages/self-hosted-auth/package.json","/packages/webhooks/package.json","/packages/api-core/package.json","/packages/api-file-manager/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-scheduler/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-admin/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/handler-graphql/package.json","/packages/languages/package.json","/packages/self-hosted-auth/package.json","/packages/webhooks/package.json"]},{"name":"graphql-request","version":"7.4.0","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"graphql-scalars","version":"1.25.0","files":["/packages/handler-graphql/package.json","/packages/handler-graphql/package.json"]},{"name":"graphql-tag","version":"2.12.7","files":["/packages/api-headless-cms/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/api-headless-cms/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json"]},{"name":"history","version":"5.3.0","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app/package.json","/packages/app-admin/package.json"]},{"name":"humanize-duration","version":"3.34.0","files":["/packages/cli-core/package.json","/packages/project/package.json","/packages/cli-core/package.json","/packages/project/package.json"]},{"name":"inquirer","version":"14.0.2","files":["/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json"]},{"name":"invariant","version":"2.2.4","files":["/packages/app/package.json","/packages/project-aws/package.json","/packages/app/package.json","/packages/project-aws/package.json"]},{"name":"is-hotkey","version":"0.2.0","files":["/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json","/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json"]},{"name":"jose","version":"6.2.3","files":["/packages/api-core/package.json","/packages/api-core/package.json"]},{"name":"js-yaml","version":"5.2.1","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"jsdom","version":"29.1.1","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"jsesc","version":"3.1.0","files":["/packages/telemetry/package.json","/packages/telemetry/package.json"]},{"name":"jsonpack","version":"1.1.5","files":["/packages/utils/package.json","/packages/utils/package.json"]},{"name":"jsonwebtoken","version":"9.0.3","files":["/packages/api-core/package.json","/packages/auth0/package.json","/packages/cognito/package.json","/packages/okta/package.json","/packages/self-hosted-auth/package.json","/packages/api-core/package.json","/packages/auth0/package.json","/packages/cognito/package.json","/packages/okta/package.json","/packages/self-hosted-auth/package.json"]},{"name":"jwt-decode","version":"4.0.0","files":["/package.json"]},{"name":"knex","version":"3.3.0","files":["/packages/api-aco-sql/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-core-sql/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-websockets-sql/package.json","/packages/project-server-template/package.json","/packages/project-server-template/template/appTemplates/api/graphql/package.json","/packages/self-hosted-auth-sql/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-core-sql/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-websockets-sql/package.json","/packages/project-server-template/package.json","/packages/project-server-template/template/appTemplates/api/graphql/package.json","/packages/self-hosted-auth-sql/package.json"]},{"name":"lexical","version":"0.46.0","files":["/packages/app-admin/package.json","/packages/lexical-converter/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-theme/package.json","/packages/app-admin/package.json","/packages/lexical-converter/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-theme/package.json"]},{"name":"listr2","version":"10.2.2","files":["/packages/create-webiny-project/package.json","/scripts/buildPackages/package.json","/packages/create-webiny-project/package.json","/scripts/buildPackages/package.json"]},{"name":"load-json-file","version":"7.0.1","files":["/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/global-config/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/packages/telemetry/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/cjsToEsm/package.json","/scripts/release/package.json","/packages/build-tools/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/global-config/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/packages/telemetry/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/cjsToEsm/package.json","/scripts/release/package.json"]},{"name":"load-script","version":"2.0.0","files":["/packages/app-graphql-playground/package.json","/packages/app-graphql-playground/package.json"]},{"name":"lodash","version":"4.18.1","files":["/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api-aco/package.json","/packages/api-core/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-sync-system/package.json","/packages/api-website-builder/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/app-workflows/package.json","/packages/background-tasks/package.json","/packages/build-tools/package.json","/packages/cognito/package.json","/packages/db-dynamodb/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/lexical-editor/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-utils/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/react-properties/package.json","/packages/self-hosted-auth/package.json","/packages/validation/package.json","/packages/webhooks/package.json","/packages/website-builder-sdk/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api-aco/package.json","/packages/api-core/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-sync-system/package.json","/packages/api-website-builder/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/app-workflows/package.json","/packages/background-tasks/package.json","/packages/build-tools/package.json","/packages/cognito/package.json","/packages/db-dynamodb/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/lexical-editor/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-utils/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/react-properties/package.json","/packages/self-hosted-auth/package.json","/packages/validation/package.json","/packages/webhooks/package.json","/packages/website-builder-sdk/package.json"]},{"name":"markdown-to-jsx","version":"9.8.2","files":["/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/app-admin/package.json","/packages/app-website-builder/package.json"]},{"name":"matcher","version":"6.0.0","files":["/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json"]},{"name":"mime","version":"4.1.0","files":["/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/project-aws/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/project-aws/package.json"]},{"name":"minimatch","version":"10.2.5","files":["/packages/admin-ui/package.json","/packages/api-core/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/project/package.json","/packages/admin-ui/package.json","/packages/api-core/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/project/package.json"]},{"name":"mobx","version":"6.16.1","files":["/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-utils/package.json","/packages/app-website-builder/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/languages/package.json","/packages/okta/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-utils/package.json","/packages/app-website-builder/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/languages/package.json","/packages/okta/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json"]},{"name":"mobx-react-lite","version":"4.1.1","files":["/packages/ai-powerups/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/okta/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json","/packages/ai-powerups/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/okta/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json"]},{"name":"monaco-editor","version":"0.53.0","files":["/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-sdk-playground/package.json","/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/app-sdk-playground/package.json"]},{"name":"mqtt","version":"5.15.2","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"nanoid","version":"5.1.16","files":["/packages/app/package.json","/packages/react-properties/package.json","/packages/utils/package.json","/packages/website-builder-sdk/package.json","/packages/app/package.json","/packages/react-properties/package.json","/packages/utils/package.json","/packages/website-builder-sdk/package.json"]},{"name":"nanoid-dictionary","version":"5.0.0","files":["/packages/utils/package.json","/packages/website-builder-sdk/package.json","/packages/utils/package.json","/packages/website-builder-sdk/package.json"]},{"name":"neverthrow","version":"8.2.0","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"node-notifier","version":"10.0.1","files":["/scripts/buildPackages/package.json","/scripts/buildPackages/package.json"]},{"name":"nodemailer","version":"9.0.3","files":["/packages/api-mailer/package.json","/packages/api-mailer/package.json"]},{"name":"object-hash","version":"3.0.0","files":["/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json"]},{"name":"object-merge-advanced","version":"14.1.3","files":["/packages/background-tasks/package.json","/packages/background-tasks/package.json"]},{"name":"object-sizeof","version":"2.6.5","files":["/packages/background-tasks/package.json","/packages/background-tasks/package.json"]},{"name":"ohash","version":"2.0.11","files":["/packages/i18n/package.json","/packages/i18n/package.json"]},{"name":"open","version":"11.0.0","files":["/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json"]},{"name":"ora","version":"9.4.1","files":["/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json"]},{"name":"os","version":"0.1.2","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"p-limit","version":"7.3.0","files":["/scripts/cjsToEsm/package.json","/scripts/cjsToEsm/package.json"]},{"name":"p-map","version":"7.0.5","files":["/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json","/packages/sdk/package.json","/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json","/packages/sdk/package.json"]},{"name":"p-reduce","version":"3.0.0","files":["/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json"]},{"name":"p-retry","version":"8.0.0","files":["/packages/api-dynamodb-to-elasticsearch/package.json","/packages/project-aws/package.json","/packages/sdk/package.json","/packages/utils/package.json","/scripts/release/package.json","/packages/api-dynamodb-to-elasticsearch/package.json","/packages/project-aws/package.json","/packages/sdk/package.json","/packages/utils/package.json","/scripts/release/package.json"]},{"name":"pino","version":"10.3.1","files":["/packages/api-core/package.json","/packages/cli-core/package.json","/packages/project/package.json","/packages/website-builder-sdk/package.json","/scripts/cli/package.json","/packages/api-core/package.json","/packages/cli-core/package.json","/packages/project/package.json","/packages/website-builder-sdk/package.json","/scripts/cli/package.json"]},{"name":"pino-lambda","version":"4.4.1","files":["/packages/api-core/package.json","/packages/api-core/package.json"]},{"name":"pino-pretty","version":"13.1.3","files":["/packages/cli-core/package.json","/packages/project/package.json","/packages/website-builder-sdk/package.json","/packages/cli-core/package.json","/packages/project/package.json","/packages/website-builder-sdk/package.json"]},{"name":"pluralize","version":"8.0.0","files":["/packages/api-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/api-headless-cms/package.json","/packages/app-website-builder/package.json"]},{"name":"postcss","version":"8.5.16","files":["/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json"]},{"name":"postcss-import","version":"16.1.1","files":["/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json"]},{"name":"postcss-loader","version":"8.2.1","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"radix-ui","version":"1.6.2","files":["/packages/admin-ui/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor/package.json","/packages/admin-ui/package.json","/packages/app-website-builder/package.json","/packages/lexical-editor/package.json"]},{"name":"raw-loader","version":"4.0.2","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"react","version":"18.3.1","files":["/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/languages/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-aws-template/package.json","/packages/project-server-template/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/self-hosted-auth/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/webiny/package.json","/packages/website-builder-react/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cognito/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/languages/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-aws-template/package.json","/packages/project-server-template/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/self-hosted-auth/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/webiny/package.json","/packages/website-builder-react/package.json"]},{"name":"react-color","version":"2.19.3","files":["/packages/admin-ui/package.json","/packages/lexical-editor-actions/package.json","/packages/admin-ui/package.json","/packages/lexical-editor-actions/package.json"]},{"name":"react-custom-scrollbars","version":"4.2.1","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"react-day-picker","version":"10.0.1","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"react-dnd","version":"16.0.1","files":["/packages/admin-ui/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/admin-ui/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json"]},{"name":"react-dnd-html5-backend","version":"16.0.1","files":["/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json"]},{"name":"react-dom","version":"18.3.1","files":["/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/build-tools/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/languages/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/react-composition/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json","/packages/ai-powerups/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/build-tools/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/languages/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/react-composition/package.json","/packages/tenant-manager/package.json","/packages/webhooks/package.json","/packages/website-builder-react/package.json"]},{"name":"react-helmet","version":"6.1.0","files":["/packages/app-admin-ui/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json","/packages/app-admin-ui/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json"]},{"name":"react-lazy-load","version":"4.0.1","files":["/packages/app-file-manager/package.json","/packages/app-file-manager/package.json"]},{"name":"react-refresh","version":"0.18.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"react-resizable-panels","version":"4.12.1","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"react-transition-group","version":"4.4.5","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"react-virtualized","version":"9.22.6","files":["/packages/admin-ui/package.json","/packages/app-admin/package.json","/packages/admin-ui/package.json","/packages/app-admin/package.json"]},{"name":"replace-in-path","version":"1.1.0","files":["/packages/project-aws/package.json","/packages/project-server/package.json","/packages/project-aws/package.json","/packages/project-server/package.json"]},{"name":"reset-css","version":"5.0.2","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"rimraf","version":"6.1.3","files":["/packages/build-tools/package.json","/packages/create-webiny-project/package.json","/packages/build-tools/package.json","/packages/create-webiny-project/package.json"]},{"name":"sanitize-filename","version":"1.6.4","files":["/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json"]},{"name":"sass","version":"1.101.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"sass-loader","version":"17.0.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"semver","version":"7.8.5","files":["/packages/api-sync-system/package.json","/packages/cli-core/package.json","/packages/pulumi-sdk/package.json","/packages/system-requirements/package.json","/scripts/release/package.json","/packages/api-sync-system/package.json","/packages/cli-core/package.json","/packages/pulumi-sdk/package.json","/packages/system-requirements/package.json","/scripts/release/package.json"]},{"name":"serialize-error","version":"13.0.1","files":["/packages/project/package.json","/scripts/buildPackages/package.json","/packages/project/package.json","/scripts/buildPackages/package.json"]},{"name":"sharp","version":"0.35.3","files":["/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json"]},{"name":"slugify","version":"1.6.9","files":["/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/form/package.json","/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/form/package.json"]},{"name":"sonner","version":"2.0.7","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"standardwebhooks","version":"1.0.0","files":["/packages/sdk/package.json","/packages/webhooks/package.json","/packages/sdk/package.json","/packages/webhooks/package.json"]},{"name":"strip-ansi","version":"7.2.0","files":["/packages/telemetry/package.json","/packages/telemetry/package.json"]},{"name":"strip-json-comments","version":"5.0.3","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"style-loader","version":"4.0.0","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"tailwind-merge","version":"3.6.0","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"tailwindcss","version":"4.3.2","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"tar","version":"7.5.19","files":["/packages/pulumi-sdk/package.json","/packages/pulumi-sdk/package.json"]},{"name":"tinycolor2","version":"1.6.0","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"ts-invariant","version":"0.10.3","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"ts-morph","version":"28.0.0","files":["/packages/build-tools/package.json","/packages/project/package.json","/packages/project-aws/package.json","/scripts/cli/package.json","/scripts/cjsToEsm/package.json","/scripts/generateSkills/package.json","/packages/build-tools/package.json","/packages/project/package.json","/packages/project-aws/package.json","/scripts/cli/package.json","/scripts/cjsToEsm/package.json","/scripts/generateSkills/package.json"]},{"name":"tsx","version":"4.23.0","files":["/packages/build-tools/package.json","/packages/cli-aws/package.json","/packages/cli-server/package.json","/packages/project/package.json","/scripts/buildPackages/package.json","/scripts/cjsToEsm/package.json","/packages/build-tools/package.json","/packages/cli-aws/package.json","/packages/cli-server/package.json","/packages/project/package.json","/scripts/buildPackages/package.json","/scripts/cjsToEsm/package.json"]},{"name":"tw-animate-css","version":"1.4.0","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"type-fest","version":"5.8.0","files":["/packages/admin-ui/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/db/package.json","/scripts/cli/package.json","/packages/admin-ui/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/db/package.json","/scripts/cli/package.json"]},{"name":"typescript","version":"7.0.2","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"unicode-emoji-json","version":"0.9.0","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/packages/plugins/package.json","/packages/plugins/package.json"]},{"name":"url-loader","version":"4.1.1","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"use-deep-compare-effect","version":"1.8.1","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms/package.json"]},{"name":"utf-8-validate","version":"6.0.6","files":["/packages/build-tools/package.json","/packages/build-tools/package.json"]},{"name":"validate-npm-package-name","version":"8.0.0","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"vitest","version":"4.1.10","files":["/packages/api-headless-cms-aco/package.json","/packages/api-headless-cms-aco/package.json"]},{"name":"vue","version":"3.5.39","files":["/packages/website-builder-vue/package.json","/packages/website-builder-vue/package.json"]},{"name":"warning","version":"4.0.3","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"write-json-file","version":"7.0.0","files":["/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/global-config/package.json","/packages/project/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/release/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/global-config/package.json","/packages/project/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json","/scripts/release/package.json"]},{"name":"ws","version":"8.21.0","files":["/packages/api-websockets-server/package.json","/packages/api-websockets-server/package.json"]},{"name":"yargs","version":"18.0.0","files":["/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/i18n/package.json","/scripts/buildPackages/package.json","/scripts/cli/package.json","/scripts/release/package.json","/packages/cli-core/package.json","/packages/create-webiny-project/package.json","/packages/i18n/package.json","/scripts/buildPackages/package.json","/scripts/cli/package.json","/scripts/release/package.json"]},{"name":"yesno","version":"0.4.0","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"zod","version":"4.4.3","files":["/packages/ai-powerups/package.json","/packages/api-audit-logs/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-core/package.json","/packages/api-file-manager/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-mailer/package.json","/packages/api-scheduler-aws/package.json","/packages/api-sync-system/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-server/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cli-core/package.json","/packages/cognito/package.json","/packages/handler-graphql/package.json","/packages/mcp/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/sdk/package.json","/packages/self-hosted-auth/package.json","/packages/utils/package.json","/packages/webhooks/package.json","/packages/ai-powerups/package.json","/packages/api-audit-logs/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-core/package.json","/packages/api-file-manager/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-mailer/package.json","/packages/api-scheduler-aws/package.json","/packages/api-sync-system/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-server/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder/package.json","/packages/auth0/package.json","/packages/background-tasks/package.json","/packages/cli-core/package.json","/packages/cognito/package.json","/packages/handler-graphql/package.json","/packages/mcp/package.json","/packages/okta/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/sdk/package.json","/packages/self-hosted-auth/package.json","/packages/utils/package.json","/packages/webhooks/package.json"]}],"devDependencies":[{"name":"@4tw/cypress-drag-drop","version":"2.3.1","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"@babel/code-frame","version":"8.0.0","files":["/package.json"]},{"name":"@commitlint/cli","version":"21.2.0","files":["/package.json"]},{"name":"@commitlint/config-conventional","version":"21.2.0","files":["/package.json"]},{"name":"@emotion/react","version":"11.14.0","files":["/packages/react-rich-text-lexical-renderer/package.json","/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"@faker-js/faker","version":"10.5.0","files":["/packages/api-sync-system/package.json","/packages/api-sync-system/package.json"]},{"name":"@fortawesome/free-solid-svg-icons","version":"7.3.0","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@grpc/grpc-js","version":"1.14.4","files":["/package.json"]},{"name":"@lexical/code","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/hashtag","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/headless","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/history","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/html","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/list","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/mark","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/overflow","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/react","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/rich-text","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/selection","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/text","version":"0.46.0","files":["/package.json"]},{"name":"@lexical/utils","version":"0.46.0","files":["/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.15","files":["/packages/icons/package.json","/packages/icons/package.json"]},{"name":"@octokit/rest","version":"22.0.1","files":["/package.json"]},{"name":"@rsbuild/core","version":"2.1.4","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@rsbuild/plugin-svgr","version":"2.0.5","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@storybook/addon-a11y","version":"10.4.6","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@storybook/addon-docs","version":"10.4.6","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@storybook/react","version":"10.4.6","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@tailwindcss/postcss","version":"4.3.2","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@testing-library/cypress","version":"10.1.3","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"@testing-library/react","version":"16.3.2","files":["/packages/app-admin/package.json","/packages/form/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/app-admin/package.json","/packages/form/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"@testing-library/user-event","version":"14.6.1","files":["/packages/form/package.json","/packages/form/package.json"]},{"name":"@types/accounting","version":"0.4.5","files":["/packages/i18n/package.json","/packages/i18n/package.json"]},{"name":"@types/bytes","version":"3.1.5","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/cli-progress","version":"3.11.6","files":["/scripts/cjsToEsm/package.json","/scripts/cjsToEsm/package.json"]},{"name":"@types/debounce","version":"1.2.4","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"@types/deep-equal","version":"1.0.4","files":["/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json"]},{"name":"@types/fs-extra","version":"11.0.4","files":["/package.json"]},{"name":"@types/graphlib","version":"2.1.12","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/humanize-duration","version":"3.27.4","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"@types/invariant","version":"2.2.37","files":["/packages/form/package.json","/packages/form/package.json"]},{"name":"@types/is-hotkey","version":"0.1.10","files":["/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json","/packages/app-admin/package.json","/packages/app-website-builder/package.json","/packages/website-builder-sdk/package.json"]},{"name":"@types/is-number","version":"7.0.5","files":["/packages/db-dynamodb/package.json","/packages/db-dynamodb/package.json"]},{"name":"@types/js-yaml","version":"4.0.9","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"@types/jsdom","version":"28.0.3","files":["/packages/project/package.json","/packages/project/package.json"]},{"name":"@types/jsonpack","version":"1.1.6","files":["/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json"]},{"name":"@types/jsonwebtoken","version":"9.0.10","files":["/packages/api-core/package.json","/packages/auth0/package.json","/packages/okta/package.json","/packages/self-hosted-auth/package.json","/packages/api-core/package.json","/packages/auth0/package.json","/packages/okta/package.json","/packages/self-hosted-auth/package.json"]},{"name":"@types/jwk-to-pem","version":"2.0.3","files":["/packages/auth0/package.json","/packages/okta/package.json","/packages/auth0/package.json","/packages/okta/package.json"]},{"name":"@types/lodash","version":"4.17.24","files":["/packages/api-sync-system/package.json","/packages/app/package.json","/packages/cli-core/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/mcp/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/validation/package.json","/packages/api-sync-system/package.json","/packages/app/package.json","/packages/cli-core/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/mcp/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/validation/package.json"]},{"name":"@types/ncp","version":"2.0.8","files":["/packages/mcp/package.json","/packages/project-aws/package.json","/packages/mcp/package.json","/packages/project-aws/package.json"]},{"name":"@types/node","version":"24.13.2","files":["/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/create-webiny-project/_templates/base/template.package.json"]},{"name":"@types/nodemailer","version":"8.0.1","files":["/packages/api-mailer/package.json","/packages/api-mailer/package.json"]},{"name":"@types/object-hash","version":"3.0.6","files":["/packages/api-file-manager/package.json","/packages/api-file-manager/package.json"]},{"name":"@types/pluralize","version":"0.0.33","files":["/packages/api-headless-cms/package.json","/packages/api-headless-cms/package.json"]},{"name":"@types/postcss-import","version":"14.0.3","files":["/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json"]},{"name":"@types/react","version":"18.3.31","files":["/package.json","/packages/admin-ui/package.json","/packages/app-aco/package.json","/packages/app-audit-logs/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json","/packages/cognito/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/self-hosted-auth/package.json","/packages/website-builder-react/package.json","/packages/admin-ui/package.json","/packages/app-aco/package.json","/packages/app-audit-logs/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-scheduler/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-workflows/package.json","/packages/cognito/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/self-hosted-auth/package.json","/packages/website-builder-react/package.json"]},{"name":"@types/react-color","version":"3.0.13","files":["/packages/admin-ui/package.json","/packages/lexical-editor-actions/package.json","/packages/admin-ui/package.json","/packages/lexical-editor-actions/package.json"]},{"name":"@types/react-custom-scrollbars","version":"4.0.13","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@types/react-dom","version":"18.3.7","files":["/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/create-webiny-project/_templates/base/template.package.json"]},{"name":"@types/react-helmet","version":"6.1.11","files":["/packages/app-admin-ui/package.json","/packages/app-admin-ui/package.json"]},{"name":"@types/react-resizable","version":"4.0.0","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/react-transition-group","version":"4.4.12","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/react-virtualized","version":"9.22.3","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"@types/store","version":"2.0.5","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/tinycolor2","version":"1.4.6","files":["/packages/app-admin/package.json","/packages/app-admin/package.json"]},{"name":"@types/uniqid","version":"5.3.4","files":["/packages/feature-flags/package.json","/packages/plugins/package.json","/packages/feature-flags/package.json","/packages/plugins/package.json"]},{"name":"@types/validate-npm-package-name","version":"4.0.2","files":["/packages/create-webiny-project/package.json","/packages/create-webiny-project/package.json"]},{"name":"@types/warning","version":"3.0.4","files":["/packages/app/package.json","/packages/app/package.json"]},{"name":"@types/ws","version":"8.18.1","files":["/packages/api-websockets-server/package.json","/packages/api-websockets-server/package.json"]},{"name":"@types/yargs","version":"17.0.35","files":["/scripts/buildPackages/package.json","/scripts/release/package.json","/scripts/buildPackages/package.json","/scripts/release/package.json"]},{"name":"@vitest/coverage-v8","version":"4.1.10","files":["/package.json"]},{"name":"adio","version":"3.0.1","files":["/package.json"]},{"name":"amazon-cognito-identity-js","version":"6.3.20","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"apollo-graphql","version":"0.9.7","files":["/packages/api-headless-cms/package.json","/packages/api-headless-cms/package.json"]},{"name":"aws-sdk-client-mock","version":"4.1.0","files":["/packages/api-scheduler-aws/package.json","/packages/api-sync-system/package.json","/packages/api-scheduler-aws/package.json","/packages/api-sync-system/package.json"]},{"name":"better-sqlite3","version":"12.11.1","files":["/packages/api-aco-sql/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-core-sql/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-websockets-sql/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-core-sql/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-websockets-sql/package.json"]},{"name":"chalk","version":"5.6.2","files":["/package.json","/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"cross-env","version":"10.1.0","files":["/package.json"]},{"name":"cypress","version":"15.18.0","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"cypress-image-snapshot","version":"4.0.1","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"cypress-mailosaur","version":"5.0.0","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"cypress-wait-until","version":"3.0.2","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"deepmerge","version":"4.3.1","files":["/package.json"]},{"name":"del","version":"8.0.1","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"execa","version":"9.6.1","files":["/package.json","/packages/app-audit-logs/package.json","/packages/app-website-builder/package.json","/packages/common-audit-logs/package.json","/packages/mcp/package.json","/packages/app-audit-logs/package.json","/packages/app-website-builder/package.json","/packages/common-audit-logs/package.json","/packages/mcp/package.json"]},{"name":"fast-glob","version":"3.3.3","files":["/package.json"]},{"name":"fs-extra","version":"11.3.6","files":["/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/package.json"]},{"name":"github-actions-wac","version":"2.0.0","files":["/package.json"]},{"name":"graphql","version":"16.14.2","files":["/package.json","/packages/api-aco/package.json","/packages/api-audit-logs/package.json","/packages/api-file-manager-aco/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-aco/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-mailer/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler-aws/package.json","/packages/api-website-builder/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/testing/package.json","/packages/api-aco/package.json","/packages/api-audit-logs/package.json","/packages/api-file-manager-aco/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-aco/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-mailer/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler-aws/package.json","/packages/api-website-builder/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/testing/package.json"]},{"name":"graphql-request","version":"7.4.0","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"husky","version":"9.1.7","files":["/package.json"]},{"name":"inquirer","version":"14.0.2","files":["/package.json"]},{"name":"jest-dynalite","version":"3.6.1","files":["/packages/api-core-ddb/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-sync-system/package.json","/packages/db-dynamodb/package.json","/packages/project-utils/package.json","/packages/api-core-ddb/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-sync-system/package.json","/packages/db-dynamodb/package.json","/packages/project-utils/package.json"]},{"name":"jest-extended","version":"7.0.0","files":["/package.json"]},{"name":"jsdom","version":"29.1.1","files":["/packages/lexical-converter/package.json","/packages/lexical-converter/package.json"]},{"name":"knex","version":"3.3.0","files":["/packages/api-event-handler-server-sql/package.json","/packages/api-event-handler-server-sql/package.json"]},{"name":"lexical","version":"0.46.0","files":["/package.json"]},{"name":"listr2","version":"10.2.2","files":["/packages/project-utils/package.json","/packages/project-utils/package.json"]},{"name":"load-json-file","version":"7.0.1","files":["/package.json","/packages/project-utils/package.json","/packages/project-utils/package.json"]},{"name":"lodash","version":"4.18.1","files":["/package.json","/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"minimatch","version":"10.2.5","files":["/package.json"]},{"name":"mobx","version":"6.16.1","files":["/packages/form/package.json","/packages/form/package.json"]},{"name":"mobx-react-lite","version":"4.1.1","files":["/packages/form/package.json","/packages/form/package.json"]},{"name":"nanoid","version":"5.1.16","files":["/package.json","/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"next","version":"16.2.10","files":["/package.json"]},{"name":"oxfmt","version":"0.58.0","files":["/package.json","/packages/admin-ui/package.json","/packages/api-headless-cms/package.json","/packages/react-properties/package.json","/packages/admin-ui/package.json","/packages/api-headless-cms/package.json","/packages/react-properties/package.json"]},{"name":"oxlint","version":"1.73.0","files":["/package.json"]},{"name":"pino","version":"10.3.1","files":["/packages/logger/package.json","/packages/project-utils/package.json","/packages/logger/package.json","/packages/project-utils/package.json"]},{"name":"pino-pretty","version":"13.1.3","files":["/packages/project-utils/package.json","/packages/project-utils/package.json"]},{"name":"react","version":"18.3.1","files":["/package.json"]},{"name":"react-dom","version":"18.3.1","files":["/package.json"]},{"name":"rimraf","version":"6.1.3","files":["/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-ddb/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-os/package.json","/packages/api-core/package.json","/packages/api-core-ddb/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-sync-system/package.json","/packages/api-testing/package.json","/packages/api-website-builder/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/aws-sdk/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cli-core/package.json","/packages/common-audit-logs/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/error/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/languages/package.json","/packages/logger/package.json","/packages/okta/package.json","/packages/plugins/package.json","/packages/project/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/tenant-manager/package.json","/packages/testing/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/packages/webiny/package.json","/scripts/cli/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-ddb/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-os/package.json","/packages/api-core/package.json","/packages/api-core-ddb/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-sync-system/package.json","/packages/api-testing/package.json","/packages/api-website-builder/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/aws-sdk/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cli-core/package.json","/packages/common-audit-logs/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/error/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/languages/package.json","/packages/logger/package.json","/packages/okta/package.json","/packages/plugins/package.json","/packages/project/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/tenant-manager/package.json","/packages/testing/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/packages/webiny/package.json","/scripts/cli/package.json"]},{"name":"sass","version":"1.101.0","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"semver","version":"7.8.5","files":["/package.json"]},{"name":"storybook","version":"10.4.6","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"storybook-react-rsbuild","version":"3.3.4","files":["/packages/admin-ui/package.json","/packages/admin-ui/package.json"]},{"name":"ts-expect","version":"1.3.0","files":["/package.json"]},{"name":"tsx","version":"4.23.0","files":["/package.json","/packages/mcp/package.json","/packages/mcp/package.json"]},{"name":"type-fest","version":"5.8.0","files":["/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-record-locking/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/background-tasks/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/scripts/prepublishOnly/package.json","/scripts/release/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-record-locking/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/background-tasks/package.json","/packages/project/package.json","/packages/pulumi-sdk/package.json","/scripts/prepublishOnly/package.json","/scripts/release/package.json"]},{"name":"typescript","version":"7.0.2","files":["/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-ddb/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-os/package.json","/packages/api-core/package.json","/packages/api-core-ddb/package.json","/packages/api-core-sql/package.json","/packages/api-dynamodb-to-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-aco/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-aco/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-es-tasks/package.json","/packages/api-headless-cms-scheduler/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-tasks-ddb-es/package.json","/packages/api-headless-cms-workflows/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-scheduler-aws/package.json","/packages/api-scheduler-server/package.json","/packages/api-sync-system/package.json","/packages/api-testing/package.json","/packages/api-website-builder/package.json","/packages/api-website-builder-scheduler/package.json","/packages/api-website-builder-workflows/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-utils/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/aws-sdk/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/cli-server/package.json","/packages/common-audit-logs/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/db-utils/package.json","/packages/error/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/feature/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/languages/package.json","/packages/logger/package.json","/packages/mcp/package.json","/packages/okta/package.json","/packages/plugins/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-server/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/react-composition/package.json","/packages/sdk/package.json","/packages/shared-aco/package.json","/packages/tenant-manager/package.json","/packages/testing/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/packages/webhooks/package.json","/packages/webiny/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json","/cypress-tests/package.json","/scripts/cli/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-ddb/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs/package.json","/packages/api-audit-logs-ddb/package.json","/packages/api-audit-logs-sql/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-os/package.json","/packages/api-core/package.json","/packages/api-core-ddb/package.json","/packages/api-core-sql/package.json","/packages/api-dynamodb-to-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-aco/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-aco/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-es-tasks/package.json","/packages/api-headless-cms-scheduler/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-tasks-ddb-es/package.json","/packages/api-headless-cms-workflows/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-scheduler-aws/package.json","/packages/api-scheduler-server/package.json","/packages/api-sync-system/package.json","/packages/api-testing/package.json","/packages/api-website-builder/package.json","/packages/api-website-builder-scheduler/package.json","/packages/api-website-builder-workflows/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-ui/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-headless-cms-scheduler/package.json","/packages/app-headless-cms-workflows/package.json","/packages/app-mailer/package.json","/packages/app-record-locking/package.json","/packages/app-scheduler/package.json","/packages/app-sdk-playground/package.json","/packages/app-serverless-cms/package.json","/packages/app-utils/package.json","/packages/app-website-builder/package.json","/packages/app-website-builder-scheduler/package.json","/packages/app-website-builder-workflows/package.json","/packages/app-websockets/package.json","/packages/app-workflows/package.json","/packages/auth0/package.json","/packages/aws-sdk/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cli-aws/package.json","/packages/cli-core/package.json","/packages/cli-server/package.json","/packages/common-audit-logs/package.json","/packages/create-webiny-project/_templates/base/template.package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/db-utils/package.json","/packages/error/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/feature/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/languages/package.json","/packages/logger/package.json","/packages/mcp/package.json","/packages/okta/package.json","/packages/plugins/package.json","/packages/project/package.json","/packages/project-aws/package.json","/packages/project-server/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/react-composition/package.json","/packages/sdk/package.json","/packages/shared-aco/package.json","/packages/tenant-manager/package.json","/packages/testing/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/packages/webhooks/package.json","/packages/webiny/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-nuxt/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/packages/website-builder-vue/package.json","/cypress-tests/package.json","/scripts/cli/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/cypress-tests/package.json","/cypress-tests/package.json"]},{"name":"validator","version":"13.15.35","files":["/package.json"]},{"name":"verdaccio","version":"6.7.4","files":["/package.json"]},{"name":"vite","version":"8.1.3","files":["/packages/website-builder-nuxt/package.json","/packages/website-builder-nuxt/package.json"]},{"name":"vitest","version":"4.1.10","files":["/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs/package.json","/packages/api-core/package.json","/packages/api-core-sql/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager-aco/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-es-tasks/package.json","/packages/api-headless-cms-scheduler/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-workflows/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-scheduler-aws/package.json","/packages/api-scheduler-server/package.json","/packages/api-sync-system/package.json","/packages/api-website-builder/package.json","/packages/api-website-builder-scheduler/package.json","/packages/api-website-builder-workflows/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cognito/package.json","/packages/create-webiny-project/package.json","/packages/db-dynamodb/package.json","/packages/db-utils/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/languages/package.json","/packages/lexical-converter/package.json","/packages/plugins/package.json","/packages/project-aws/package.json","/packages/project-utils/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/sdk/package.json","/packages/self-hosted-auth/package.json","/packages/self-hosted-auth-sql/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/webhooks/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/scripts/release/package.json","/packages/admin-ui/package.json","/packages/ai-powerups/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-aco-sql/package.json","/packages/api-audit-logs/package.json","/packages/api-core/package.json","/packages/api-core-sql/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-event-handler-aws/package.json","/packages/api-event-handler-aws-ddb/package.json","/packages/api-event-handler-aws-ddb-os/package.json","/packages/api-event-handler-core/package.json","/packages/api-event-handler-server/package.json","/packages/api-event-handler-server-sql/package.json","/packages/api-file-manager-aco/package.json","/packages/api-file-manager-s3/package.json","/packages/api-file-manager-server/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-bulk-actions/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-headless-cms-es-tasks/package.json","/packages/api-headless-cms-scheduler/package.json","/packages/api-headless-cms-sql/package.json","/packages/api-headless-cms-storage/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-workflows/package.json","/packages/api-mailer/package.json","/packages/api-opensearch/package.json","/packages/api-record-locking/package.json","/packages/api-scheduler/package.json","/packages/api-scheduler-aws/package.json","/packages/api-scheduler-server/package.json","/packages/api-sync-system/package.json","/packages/api-website-builder/package.json","/packages/api-website-builder-scheduler/package.json","/packages/api-website-builder-workflows/package.json","/packages/api-websockets/package.json","/packages/api-websockets-aws/package.json","/packages/api-websockets-ddb/package.json","/packages/api-websockets-server/package.json","/packages/api-websockets-sql/package.json","/packages/api-workflows/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-website-builder/package.json","/packages/background-tasks/package.json","/packages/background-tasks-aws/package.json","/packages/background-tasks-server/package.json","/packages/cognito/package.json","/packages/create-webiny-project/package.json","/packages/db-dynamodb/package.json","/packages/db-utils/package.json","/packages/event-handler-aws/package.json","/packages/event-handler-core/package.json","/packages/event-handler-server/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-graphql/package.json","/packages/i18n/package.json","/packages/languages/package.json","/packages/lexical-converter/package.json","/packages/plugins/package.json","/packages/project-aws/package.json","/packages/project-utils/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/sdk/package.json","/packages/self-hosted-auth/package.json","/packages/self-hosted-auth-sql/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/webhooks/package.json","/packages/website-builder-nextjs/package.json","/packages/website-builder-react/package.json","/packages/website-builder-sdk/package.json","/scripts/release/package.json"]},{"name":"vue","version":"3.5.39","files":["/packages/website-builder-nuxt/package.json","/packages/website-builder-nuxt/package.json"]},{"name":"webpack","version":"5.108.4","files":["/packages/website-builder-nextjs/package.json","/packages/website-builder-nextjs/package.json"]},{"name":"write-json-file","version":"7.0.0","files":["/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms/package.json"]},{"name":"yargs","version":"18.0.0","files":["/package.json","/packages/project-utils/package.json","/packages/project-utils/package.json"]}],"peerDependencies":[{"name":"aws-lambda","version":"1.0.7","files":["/packages/aws-sdk/package.json","/packages/aws-sdk/package.json"]},{"name":"react","version":"18.3.1","files":["/packages/app-audit-logs/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/app-audit-logs/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json"]}],"resolutions":[{"name":"@graphql-tools/merge","version":"9.1.11","files":["/package.json"]},{"name":"@graphql-tools/schema","version":"10.0.35","files":["/package.json"]},{"name":"@graphql-tools/utils","version":"11.2.0","files":["/package.json"]},{"name":"@types/react","version":"18.3.31","files":["/package.json"]},{"name":"@types/react-dom","version":"18.3.7","files":["/package.json"]},{"name":"react","version":"18.3.1","files":["/package.json"]},{"name":"react-dom","version":"18.3.1","files":["/package.json"]}],"references":[{"name":"@types/hoist-non-react-statics","versions":[{"version":"3.3.7","files":[{"file":"/package.json","types":["dependencies"]}]}]},{"name":"jwt-decode","versions":[{"version":"4.0.0","files":[{"file":"/package.json","types":["dependencies"]}]}]},{"name":"@babel/code-frame","versions":[{"version":"8.0.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@commitlint/cli","versions":[{"version":"21.2.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@commitlint/config-conventional","versions":[{"version":"21.2.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@grpc/grpc-js","versions":[{"version":"1.14.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@lexical/code","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/hashtag","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/headless","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"@lexical/history","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]}]}]},{"name":"@lexical/html","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"@lexical/list","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/mark","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/overflow","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/react","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/rich-text","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/selection","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/text","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]}]}]},{"name":"@lexical/utils","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@octokit/rest","versions":[{"version":"22.0.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"@types/fs-extra","versions":[{"version":"11.0.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@types/node","versions":[{"version":"24.13.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["devDependencies"]}]}]},{"name":"@types/react","versions":[{"version":"18.3.31","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-workflows/package.json","types":["devDependencies"]},{"file":"/packages/cognito/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-react/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-dom","versions":[{"version":"18.3.7","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["devDependencies"]}]}]},{"name":"@vitest/coverage-v8","versions":[{"version":"4.1.10","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"adio","versions":[{"version":"3.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"chalk","versions":[{"version":"5.6.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/aws-layers/package.json","types":["dependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-aws/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/cli-server/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/system-requirements/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"cross-env","versions":[{"version":"10.1.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"deepmerge","versions":[{"version":"4.3.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"execa","versions":[{"version":"9.6.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/common-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/mcp/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/system-requirements/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"fast-glob","versions":[{"version":"3.3.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]}]}]},{"name":"fs-extra","versions":[{"version":"11.3.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"get-yarn-workspaces","versions":[{"version":"1.0.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"github-actions-wac","versions":[{"version":"2.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"graphql","versions":[{"version":"16.14.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/api-headless-cms-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-bulk-actions/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler/package.json","types":["dependencies"]},{"file":"/packages/api-scheduler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-workflows/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]},{"file":"/packages/languages/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["dependencies"]},{"file":"/packages/testing/package.json","types":["devDependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]}]}]},{"name":"husky","versions":[{"version":"9.1.7","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer","versions":[{"version":"14.0.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"jest-extended","versions":[{"version":"7.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"lexical","versions":[{"version":"0.46.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/lexical-converter/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]},{"file":"/packages/lexical-theme/package.json","types":["dependencies"]}]}]},{"name":"load-json-file","versions":[{"version":"7.0.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/telemetry/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]},{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"lodash","versions":[{"version":"4.18.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/api-aco/package.json","types":["dependencies"]},{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-storage/package.json","types":["dependencies"]},{"file":"/packages/api-sync-system/package.json","types":["dependencies"]},{"file":"/packages/api-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["dependencies"]},{"file":"/packages/i18n-react/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["dependencies"]},{"file":"/packages/validation/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"minimatch","versions":[{"version":"10.2.5","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"nanoid","versions":[{"version":"5.1.16","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"next","versions":[{"version":"16.2.10","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"oxfmt","versions":[{"version":"0.58.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/react-properties/package.json","types":["devDependencies"]}]}]},{"name":"oxlint","versions":[{"version":"1.73.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"react","versions":[{"version":"18.3.1","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["peerDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["peerDependencies"]},{"file":"/packages/i18n/package.json","types":["peerDependencies"]},{"file":"/packages/i18n-react/package.json","types":["peerDependencies"]},{"file":"/packages/languages/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/project-aws-template/package.json","types":["dependencies"]},{"file":"/packages/project-server-template/package.json","types":["dependencies"]},{"file":"/packages/react-composition/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["dependencies"]},{"file":"/packages/tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]},{"file":"/packages/webiny/package.json","types":["dependencies"]},{"file":"/packages/website-builder-react/package.json","types":["dependencies"]}]}]},{"name":"react-dom","versions":[{"version":"18.3.1","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["dependencies"]},{"file":"/packages/languages/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/react-composition/package.json","types":["dependencies"]},{"file":"/packages/tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]},{"file":"/packages/website-builder-react/package.json","types":["dependencies"]}]}]},{"name":"semver","versions":[{"version":"7.8.5","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/system-requirements/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"ts-expect","versions":[{"version":"1.3.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"tsx","versions":[{"version":"4.23.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-aws/package.json","types":["dependencies"]},{"file":"/packages/cli-server/package.json","types":["dependencies"]},{"file":"/packages/mcp/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]}]}]},{"name":"type-fest","versions":[{"version":"5.8.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/api-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/db/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["devDependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["devDependencies"]}]}]},{"name":"typescript","versions":[{"version":"7.0.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/ai-powerups/package.json","types":["devDependencies"]},{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-aco-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-aco-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-core/package.json","types":["devDependencies"]},{"file":"/packages/api-core-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-core-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb-os/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-server/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-bulk-actions/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-es-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-storage/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-tasks-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-workflows/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-opensearch/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler-server/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]},{"file":"/packages/api-testing/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder-workflows/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-server/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/app-aco/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-utils/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/app-workflows/package.json","types":["devDependencies"]},{"file":"/packages/auth0/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-aws/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-server/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-aws/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["devDependencies"]},{"file":"/packages/cli-server/package.json","types":["devDependencies"]},{"file":"/packages/common-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/_templates/base/template.package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/db-utils/package.json","types":["devDependencies"]},{"file":"/packages/error/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/feature/package.json","types":["devDependencies"]},{"file":"/packages/feature-flags/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/handler/package.json","types":["devDependencies"]},{"file":"/packages/handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/languages/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/mcp/package.json","types":["devDependencies"]},{"file":"/packages/okta/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["devDependencies"]},{"file":"/packages/project-aws/package.json","types":["devDependencies"]},{"file":"/packages/project-server/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/sdk/package.json","types":["devDependencies"]},{"file":"/packages/shared-aco/package.json","types":["devDependencies"]},{"file":"/packages/tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/testing/package.json","types":["devDependencies"]},{"file":"/packages/utils/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]},{"file":"/packages/wcp/package.json","types":["devDependencies"]},{"file":"/packages/webhooks/package.json","types":["devDependencies"]},{"file":"/packages/webiny/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-nextjs/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-nuxt/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-react/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-vue/package.json","types":["devDependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]},{"file":"/scripts/cli/package.json","types":["devDependencies"]}]}]},{"name":"validator","versions":[{"version":"13.15.35","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"verdaccio","versions":[{"version":"6.7.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"vitest","versions":[{"version":"4.1.10","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/ai-powerups/package.json","types":["devDependencies"]},{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-aco-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-core/package.json","types":["devDependencies"]},{"file":"/packages/api-core-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb-os/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-server/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-aco/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-bulk-actions/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-es-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-storage/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-workflows/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-opensearch/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler-server/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder-workflows/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-server/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/app-aco/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-aws/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-server/package.json","types":["devDependencies"]},{"file":"/packages/cognito/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/db-utils/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/handler/package.json","types":["devDependencies"]},{"file":"/packages/handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/languages/package.json","types":["devDependencies"]},{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-aws/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/react-properties/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]},{"file":"/packages/sdk/package.json","types":["devDependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["devDependencies"]},{"file":"/packages/self-hosted-auth-sql/package.json","types":["devDependencies"]},{"file":"/packages/utils/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]},{"file":"/packages/webhooks/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-nextjs/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-react/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["devDependencies"]},{"file":"/scripts/release/package.json","types":["devDependencies"]}]}]},{"name":"write-json-file","versions":[{"version":"7.0.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"yargs","versions":[{"version":"18.0.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/merge","versions":[{"version":"9.1.11","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-record-locking/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/schema","versions":[{"version":"10.0.35","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/api-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-record-locking/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/utils","versions":[{"version":"11.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-svg-core","versions":[{"version":"7.3.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/react-fontawesome","versions":[{"version":"3.3.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]}]}]},{"name":"@minoru/react-dnd-treeview","versions":[{"version":"3.5.4","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"@monaco-editor/react","versions":[{"version":"4.7.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"@radix-ui/react-scroll-area","versions":[{"version":"1.2.14","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"@tanstack/react-table","versions":[{"version":"8.21.3","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"bytes","versions":[{"version":"3.1.2","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/api-sync-system/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"class-variance-authority","versions":[{"version":"0.7.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"clsx","versions":[{"version":"2.1.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"cmdk","versions":[{"version":"1.1.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"date-fns","versions":[{"version":"4.4.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-storage/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"mobx","versions":[{"version":"6.16.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-utils/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/languages/package.json","types":["dependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]},{"file":"/packages/website-builder-react/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]},{"file":"/packages/website-builder-vue/package.json","types":["dependencies"]}]}]},{"name":"monaco-editor","versions":[{"version":"0.53.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["dependencies"]}]}]},{"name":"radix-ui","versions":[{"version":"1.6.2","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]}]}]},{"name":"react-color","versions":[{"version":"2.19.3","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]}]}]},{"name":"react-custom-scrollbars","versions":[{"version":"4.2.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"react-day-picker","versions":[{"version":"10.0.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"react-dnd","versions":[{"version":"16.0.1","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"react-virtualized","versions":[{"version":"9.22.6","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"sonner","versions":[{"version":"2.0.7","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"tailwind-merge","versions":[{"version":"3.6.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"tailwindcss","versions":[{"version":"4.3.2","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"tw-animate-css","versions":[{"version":"1.4.0","files":[{"file":"/packages/admin-ui/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-solid-svg-icons","versions":[{"version":"7.3.0","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@rsbuild/core","versions":[{"version":"2.1.4","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rsbuild/plugin-svgr","versions":[{"version":"2.0.5","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@storybook/addon-a11y","versions":[{"version":"10.4.6","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"@storybook/addon-docs","versions":[{"version":"10.4.6","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"@storybook/react","versions":[{"version":"10.4.6","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"@tailwindcss/postcss","versions":[{"version":"4.3.2","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@types/react-color","versions":[{"version":"3.0.13","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-custom-scrollbars","versions":[{"version":"4.0.13","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-virtualized","versions":[{"version":"9.22.3","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"rimraf","versions":[{"version":"6.1.3","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/ai-powerups/package.json","types":["devDependencies"]},{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-aco-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-aco-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-core/package.json","types":["devDependencies"]},{"file":"/packages/api-core-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-aws-ddb-os/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/api-event-handler-server-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-server/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-opensearch/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]},{"file":"/packages/api-testing/package.json","types":["devDependencies"]},{"file":"/packages/api-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-server/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-sql/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/app-aco/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-sdk-playground/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder-scheduler/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/app-workflows/package.json","types":["devDependencies"]},{"file":"/packages/auth0/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-aws/package.json","types":["devDependencies"]},{"file":"/packages/background-tasks-server/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["devDependencies"]},{"file":"/packages/common-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/error/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-core/package.json","types":["devDependencies"]},{"file":"/packages/event-handler-server/package.json","types":["devDependencies"]},{"file":"/packages/feature-flags/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/handler/package.json","types":["devDependencies"]},{"file":"/packages/handler-aws/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/languages/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/okta/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/testing/package.json","types":["devDependencies"]},{"file":"/packages/utils/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]},{"file":"/packages/wcp/package.json","types":["devDependencies"]},{"file":"/packages/webiny/package.json","types":["devDependencies"]},{"file":"/scripts/cli/package.json","types":["devDependencies"]}]}]},{"name":"sass","versions":[{"version":"1.101.0","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]},{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"storybook","versions":[{"version":"10.4.6","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"storybook-react-rsbuild","versions":[{"version":"3.3.4","files":[{"file":"/packages/admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"ai","versions":[{"version":"7.0.16","files":[{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/api-core/package.json","types":["dependencies"]}]}]},{"name":"front-matter","versions":[{"version":"4.0.2","files":[{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/mcp/package.json","types":["dependencies"]}]}]},{"name":"mobx-react-lite","versions":[{"version":"4.1.1","files":[{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]},{"file":"/packages/website-builder-react/package.json","types":["dependencies"]}]}]},{"name":"zod","versions":[{"version":"4.4.3","files":[{"file":"/packages/ai-powerups/package.json","types":["dependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/api-audit-logs-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["dependencies"]},{"file":"/packages/api-scheduler-aws/package.json","types":["dependencies"]},{"file":"/packages/api-sync-system/package.json","types":["dependencies"]},{"file":"/packages/api-websockets-aws/package.json","types":["dependencies"]},{"file":"/packages/api-websockets-server/package.json","types":["dependencies"]},{"file":"/packages/api-workflows/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]},{"file":"/packages/mcp/package.json","types":["dependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/sdk/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]}]}]},{"name":"knex","versions":[{"version":"3.3.0","files":[{"file":"/packages/api-aco-sql/package.json","types":["dependencies"]},{"file":"/packages/api-audit-logs-sql/package.json","types":["dependencies"]},{"file":"/packages/api-core-sql/package.json","types":["dependencies"]},{"file":"/packages/api-event-handler-server-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-sql/package.json","types":["dependencies"]},{"file":"/packages/api-websockets-sql/package.json","types":["dependencies"]},{"file":"/packages/project-server-template/package.json","types":["dependencies"]},{"file":"/packages/project-server-template/template/appTemplates/api/graphql/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth-sql/package.json","types":["dependencies"]}]}]},{"name":"better-sqlite3","versions":[{"version":"12.11.1","files":[{"file":"/packages/api-aco-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-core-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-sql/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets-sql/package.json","types":["devDependencies"]},{"file":"/packages/project-server-template/template/appTemplates/api/graphql/package.json","types":["dependencies"]}]}]},{"name":"@ai-sdk/anthropic","versions":[{"version":"4.0.8","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]}]}]},{"name":"@ai-sdk/openai","versions":[{"version":"4.0.8","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]}]}]},{"name":"dataloader","versions":[{"version":"2.2.3","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["dependencies"]}]}]},{"name":"jose","versions":[{"version":"6.2.3","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]}]}]},{"name":"jsonwebtoken","versions":[{"version":"9.0.3","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/auth0/package.json","types":["dependencies"]},{"file":"/packages/cognito/package.json","types":["dependencies"]},{"file":"/packages/okta/package.json","types":["dependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["dependencies"]}]}]},{"name":"pino","versions":[{"version":"10.3.1","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]}]}]},{"name":"pino-lambda","versions":[{"version":"4.4.1","files":[{"file":"/packages/api-core/package.json","types":["dependencies"]}]}]},{"name":"@types/jsonwebtoken","versions":[{"version":"9.0.10","files":[{"file":"/packages/api-core/package.json","types":["devDependencies"]},{"file":"/packages/auth0/package.json","types":["devDependencies"]},{"file":"/packages/okta/package.json","types":["devDependencies"]},{"file":"/packages/self-hosted-auth/package.json","types":["devDependencies"]}]}]},{"name":"jest-dynalite","versions":[{"version":"3.6.1","files":[{"file":"/packages/api-core-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"p-retry","versions":[{"version":"8.0.0","files":[{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/sdk/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/scripts/release/package.json","types":["dependencies"]}]}]},{"name":"cache-control-parser","versions":[{"version":"2.2.0","files":[{"file":"/packages/api-file-manager/package.json","types":["dependencies"]}]}]},{"name":"mime","versions":[{"version":"4.1.0","files":[{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]}]}]},{"name":"object-hash","versions":[{"version":"3.0.0","files":[{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"p-reduce","versions":[{"version":"3.0.0","files":[{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"sanitize-filename","versions":[{"version":"1.6.4","files":[{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"@types/object-hash","versions":[{"version":"3.0.6","files":[{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]}]}]},{"name":"exifreader","versions":[{"version":"4.41.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-server/package.json","types":["dependencies"]}]}]},{"name":"p-map","versions":[{"version":"7.0.5","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/sdk/package.json","types":["dependencies"]}]}]},{"name":"sharp","versions":[{"version":"0.35.3","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-server/package.json","types":["dependencies"]}]}]},{"name":"dot-prop-immutable","versions":[{"version":"2.1.1","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"graphql-tag","versions":[{"version":"2.12.7","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"pluralize","versions":[{"version":"8.0.0","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"slugify","versions":[{"version":"1.6.9","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["dependencies"]}]}]},{"name":"@types/pluralize","versions":[{"version":"0.0.33","files":[{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]}]}]},{"name":"apollo-graphql","versions":[{"version":"0.9.7","files":[{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]}]}]},{"name":"@types/jsonpack","versions":[{"version":"1.1.6","files":[{"file":"/packages/api-headless-cms-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]}]}]},{"name":"dot-prop","versions":[{"version":"10.1.0","files":[{"file":"/packages/api-headless-cms-storage/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"email-addresses","versions":[{"version":"5.0.0","files":[{"file":"/packages/api-mailer/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]}]}]},{"name":"nodemailer","versions":[{"version":"9.0.3","files":[{"file":"/packages/api-mailer/package.json","types":["dependencies"]}]}]},{"name":"@types/nodemailer","versions":[{"version":"8.0.1","files":[{"file":"/packages/api-mailer/package.json","types":["devDependencies"]}]}]},{"name":"@opensearch-project/opensearch","versions":[{"version":"3.6.0","files":[{"file":"/packages/api-opensearch/package.json","types":["dependencies"]}]}]},{"name":"aws-sdk-client-mock","versions":[{"version":"4.1.0","files":[{"file":"/packages/api-scheduler-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]}]}]},{"name":"bree","versions":[{"version":"9.2.9","files":[{"file":"/packages/api-scheduler-server/package.json","types":["dependencies"]}]}]},{"name":"@faker-js/faker","versions":[{"version":"10.5.0","files":[{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]}]}]},{"name":"@types/lodash","versions":[{"version":"4.17.24","files":[{"file":"/packages/api-sync-system/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/cli-core/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/mcp/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["devDependencies"]},{"file":"/packages/project-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]}]}]},{"name":"ws","versions":[{"version":"8.21.0","files":[{"file":"/packages/api-websockets-server/package.json","types":["dependencies"]}]}]},{"name":"@types/ws","versions":[{"version":"8.18.1","files":[{"file":"/packages/api-websockets-server/package.json","types":["devDependencies"]}]}]},{"name":"@emotion/styled","versions":[{"version":"11.14.1","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]}]}]},{"name":"apollo-cache","versions":[{"version":"1.3.5","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]}]}]},{"name":"apollo-cache-inmemory","versions":[{"version":"1.6.6","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"apollo-client","versions":[{"version":"2.6.10","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]}]}]},{"name":"apollo-link","versions":[{"version":"1.2.14","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]}]}]},{"name":"apollo-link-context","versions":[{"version":"1.0.20","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]}]}]},{"name":"apollo-link-error","versions":[{"version":"1.1.13","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"apollo-link-http-common","versions":[{"version":"0.2.16","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"apollo-utilities","versions":[{"version":"1.3.4","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]}]}]},{"name":"history","versions":[{"version":"5.3.0","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"invariant","versions":[{"version":"2.2.4","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]}]}]},{"name":"ts-invariant","versions":[{"version":"0.10.3","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"warning","versions":[{"version":"4.0.3","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"@types/warning","versions":[{"version":"3.0.4","files":[{"file":"/packages/app/package.json","types":["devDependencies"]}]}]},{"name":"@apollo/react-components","versions":[{"version":"3.1.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-hooks","versions":[{"version":"3.1.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@emotion/css","versions":[{"version":"11.13.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]}]}]},{"name":"@emotion/react","versions":[{"version":"11.14.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"@iconify/json","versions":[{"version":"2.2.497","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"classnames","versions":[{"version":"2.5.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"is-hotkey","versions":[{"version":"0.2.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"markdown-to-jsx","versions":[{"version":"9.8.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"react-resizable-panels","versions":[{"version":"4.12.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"react-transition-group","versions":[{"version":"4.4.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"reset-css","versions":[{"version":"5.0.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"tinycolor2","versions":[{"version":"1.6.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"unicode-emoji-json","versions":[{"version":"0.9.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@testing-library/react","versions":[{"version":"16.3.2","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/react-properties/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"@types/bytes","versions":[{"version":"3.1.5","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"@types/graphlib","versions":[{"version":"2.1.12","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"@types/is-hotkey","versions":[{"version":"0.1.10","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-resizable","versions":[{"version":"4.0.0","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-transition-group","versions":[{"version":"4.4.12","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"@types/store","versions":[{"version":"2.0.5","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"@types/tinycolor2","versions":[{"version":"1.4.6","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]}]}]},{"name":"react-helmet","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-admin-ui/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder-workflows/package.json","types":["dependencies"]},{"file":"/packages/app-workflows/package.json","types":["dependencies"]}]}]},{"name":"@types/react-helmet","versions":[{"version":"6.1.11","files":[{"file":"/packages/app-admin-ui/package.json","types":["devDependencies"]}]}]},{"name":"dayjs","versions":[{"version":"1.11.21","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"react-lazy-load","versions":[{"version":"4.0.1","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"load-script","versions":[{"version":"2.0.0","files":[{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-common-types","versions":[{"version":"7.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-brands-svg-icons","versions":[{"version":"7.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-regular-svg-icons","versions":[{"version":"7.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"react-dnd-html5-backend","versions":[{"version":"16.0.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website-builder/package.json","types":["dependencies"]}]}]},{"name":"use-deep-compare-effect","versions":[{"version":"1.8.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"dnd-core","versions":[{"version":"16.0.1","files":[{"file":"/packages/app-headless-cms-common/package.json","types":["dependencies"]}]}]},{"name":"@material-design-icons/svg","versions":[{"version":"0.14.15","files":[{"file":"/packages/app-scheduler/package.json","types":["dependencies"]},{"file":"/packages/icons/package.json","types":["devDependencies"]}]}]},{"name":"apollo-link-batch-http","versions":[{"version":"1.2.14","files":[{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]}]}]},{"name":"deep-equal","versions":[{"version":"2.2.3","files":[{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/background-tasks/package.json","types":["dependencies"]},{"file":"/packages/website-builder-react/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]},{"file":"/packages/website-builder-vue/package.json","types":["dependencies"]}]}]},{"name":"matcher","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-website-builder/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"@types/deep-equal","versions":[{"version":"1.0.4","files":[{"file":"/packages/app-website-builder/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["devDependencies"]}]}]},{"name":"@auth0/auth0-spa-js","versions":[{"version":"2.23.0","files":[{"file":"/packages/auth0/package.json","types":["dependencies"]}]}]},{"name":"@types/jwk-to-pem","versions":[{"version":"2.0.3","files":[{"file":"/packages/auth0/package.json","types":["devDependencies"]},{"file":"/packages/okta/package.json","types":["devDependencies"]}]}]},{"name":"@aws-sdk/client-apigatewaymanagementapi","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudfront","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-events","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-logs","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cognito-identity-provider","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb-streams","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-eventbridge","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iam","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iot","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-lambda","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-s3","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-scheduler","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sfn","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sqs","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sts","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/credential-providers","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-dynamodb","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-storage","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-presigned-post","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-request-presigner","versions":[{"version":"3.1080.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/util-dynamodb","versions":[{"version":"3.996.5","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@types/aws-lambda","versions":[{"version":"8.10.162","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"aws-lambda","versions":[{"version":"1.0.7","files":[{"file":"/packages/aws-sdk/package.json","types":["peerDependencies"]}]}]},{"name":"object-merge-advanced","versions":[{"version":"14.1.3","files":[{"file":"/packages/background-tasks/package.json","types":["dependencies"]}]}]},{"name":"object-sizeof","versions":[{"version":"2.6.5","files":[{"file":"/packages/background-tasks/package.json","types":["dependencies"]}]}]},{"name":"@rsbuild/plugin-react","versions":[{"version":"2.1.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rsbuild/plugin-sass","versions":[{"version":"2.0.1","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rsbuild/plugin-type-check","versions":[{"version":"1.5.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rsdoctor/rspack-plugin","versions":[{"version":"1.5.17","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rslib/core","versions":[{"version":"0.23.2","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@rspack/core","versions":[{"version":"2.1.2","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"@swc/plugin-emotion","versions":[{"version":"14.15.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"css-loader","versions":[{"version":"7.1.4","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"find-up","versions":[{"version":"8.0.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]},{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]}]}]},{"name":"postcss-loader","versions":[{"version":"8.2.1","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"raw-loader","versions":[{"version":"4.0.2","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"react-refresh","versions":[{"version":"0.18.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"sass-loader","versions":[{"version":"17.0.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"strip-json-comments","versions":[{"version":"5.0.3","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"style-loader","versions":[{"version":"4.0.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"ts-morph","versions":[{"version":"28.0.0","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/scripts/cli/package.json","types":["dependencies"]},{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]},{"file":"/scripts/generateSkills/package.json","types":["dependencies"]}]}]},{"name":"url-loader","versions":[{"version":"4.1.1","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"utf-8-validate","versions":[{"version":"6.0.6","files":[{"file":"/packages/build-tools/package.json","types":["dependencies"]}]}]},{"name":"open","versions":[{"version":"11.0.0","files":[{"file":"/packages/cli-aws/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]}]}]},{"name":"ora","versions":[{"version":"9.4.1","files":[{"file":"/packages/cli-aws/package.json","types":["dependencies"]},{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"ci-info","versions":[{"version":"4.4.0","files":[{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"humanize-duration","versions":[{"version":"3.34.0","files":[{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"pino-pretty","versions":[{"version":"13.1.3","files":[{"file":"/packages/cli-core/package.json","types":["dependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"aws-amplify","versions":[{"version":"6.18.0","files":[{"file":"/packages/cognito/package.json","types":["dependencies"]}]}]},{"name":"js-yaml","versions":[{"version":"5.2.1","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"listr2","versions":[{"version":"10.2.2","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"os","versions":[{"version":"0.1.2","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"validate-npm-package-name","versions":[{"version":"8.0.0","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"yesno","versions":[{"version":"0.4.0","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"@types/js-yaml","versions":[{"version":"4.0.9","files":[{"file":"/packages/create-webiny-project/package.json","types":["devDependencies"]}]}]},{"name":"@types/validate-npm-package-name","versions":[{"version":"4.0.2","files":[{"file":"/packages/create-webiny-project/package.json","types":["devDependencies"]}]}]},{"name":"dynamodb-toolbox","versions":[{"version":"0.9.5","files":[{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"@types/is-number","versions":[{"version":"7.0.5","files":[{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]}]}]},{"name":"fuse.js","versions":[{"version":"7.4.2","files":[{"file":"/packages/db-utils/package.json","types":["dependencies"]}]}]},{"name":"@types/uniqid","versions":[{"version":"5.3.4","files":[{"file":"/packages/feature-flags/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/user-event","versions":[{"version":"14.6.1","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@types/invariant","versions":[{"version":"2.2.37","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@graphql-tools/resolvers-composition","versions":[{"version":"7.0.33","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"graphql-scalars","versions":[{"version":"1.25.0","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"accounting","versions":[{"version":"0.4.1","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"fecha","versions":[{"version":"4.2.3","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"ohash","versions":[{"version":"2.0.11","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"@types/accounting","versions":[{"version":"0.4.5","files":[{"file":"/packages/i18n/package.json","types":["devDependencies"]}]}]},{"name":"cheerio","versions":[{"version":"1.2.0","files":[{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"jsdom","versions":[{"version":"29.1.1","files":[{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]},{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"@types/prismjs","versions":[{"version":"1.26.6","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@modelcontextprotocol/sdk","versions":[{"version":"1.29.0","files":[{"file":"/packages/mcp/package.json","types":["dependencies"]}]}]},{"name":"@types/ncp","versions":[{"version":"2.0.8","files":[{"file":"/packages/mcp/package.json","types":["devDependencies"]},{"file":"/packages/project-aws/package.json","types":["devDependencies"]}]}]},{"name":"@okta/okta-auth-js","versions":[{"version":"8.0.1","files":[{"file":"/packages/okta/package.json","types":["dependencies"]}]}]},{"name":"uniqid","versions":[{"version":"5.4.0","files":[{"file":"/packages/plugins/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"chokidar","versions":[{"version":"5.0.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"debounce","versions":[{"version":"3.0.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"dotenv","versions":[{"version":"17.4.2","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"exit-hook","versions":[{"version":"5.1.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/packages/project-aws/package.json","types":["dependencies"]}]}]},{"name":"get-tsconfig","versions":[{"version":"4.14.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"graphql-request","versions":[{"version":"7.4.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"mqtt","versions":[{"version":"5.15.2","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"neverthrow","versions":[{"version":"8.2.0","files":[{"file":"/packages/project/package.json","types":["dependencies"]}]}]},{"name":"serialize-error","versions":[{"version":"13.0.1","files":[{"file":"/packages/project/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"@types/debounce","versions":[{"version":"1.2.4","files":[{"file":"/packages/project/package.json","types":["devDependencies"]}]}]},{"name":"@types/humanize-duration","versions":[{"version":"3.27.4","files":[{"file":"/packages/project/package.json","types":["devDependencies"]}]}]},{"name":"@types/jsdom","versions":[{"version":"28.0.3","files":[{"file":"/packages/project/package.json","types":["devDependencies"]}]}]},{"name":"@pulumi/aws","versions":[{"version":"7.35.0","files":[{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/pulumi","versions":[{"version":"3.250.0","files":[{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/random","versions":[{"version":"4.21.0","files":[{"file":"/packages/project-aws/package.json","types":["dependencies"]}]}]},{"name":"replace-in-path","versions":[{"version":"1.1.0","files":[{"file":"/packages/project-aws/package.json","types":["dependencies"]},{"file":"/packages/project-server/package.json","types":["dependencies"]}]}]},{"name":"decompress","versions":[{"version":"4.2.1","files":[{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"tar","versions":[{"version":"7.5.19","files":[{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"standardwebhooks","versions":[{"version":"1.0.0","files":[{"file":"/packages/sdk/package.json","types":["dependencies"]},{"file":"/packages/webhooks/package.json","types":["dependencies"]}]}]},{"name":"cli-table3","versions":[{"version":"0.6.5","files":[{"file":"/packages/system-requirements/package.json","types":["dependencies"]}]}]},{"name":"jsesc","versions":[{"version":"3.1.0","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"strip-ansi","versions":[{"version":"7.2.0","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"@noble/hashes","versions":[{"version":"2.2.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"bson-objectid","versions":[{"version":"2.0.4","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"jsonpack","versions":[{"version":"1.1.5","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"nanoid-dictionary","versions":[{"version":"5.0.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"postcss","versions":[{"version":"8.5.16","files":[{"file":"/packages/website-builder-nextjs/package.json","types":["dependencies"]},{"file":"/packages/website-builder-nuxt/package.json","types":["dependencies"]}]}]},{"name":"postcss-import","versions":[{"version":"16.1.1","files":[{"file":"/packages/website-builder-nextjs/package.json","types":["dependencies"]},{"file":"/packages/website-builder-nuxt/package.json","types":["dependencies"]}]}]},{"name":"@types/postcss-import","versions":[{"version":"14.0.3","files":[{"file":"/packages/website-builder-nextjs/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-nuxt/package.json","types":["devDependencies"]}]}]},{"name":"webpack","versions":[{"version":"5.108.4","files":[{"file":"/packages/website-builder-nextjs/package.json","types":["devDependencies"]}]}]},{"name":"vite","versions":[{"version":"8.1.3","files":[{"file":"/packages/website-builder-nuxt/package.json","types":["devDependencies"]}]}]},{"name":"vue","versions":[{"version":"3.5.39","files":[{"file":"/packages/website-builder-nuxt/package.json","types":["devDependencies"]},{"file":"/packages/website-builder-vue/package.json","types":["dependencies"]}]}]},{"name":"csstype","versions":[{"version":"3.2.3","files":[{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"fast-json-patch","versions":[{"version":"3.1.1","files":[{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"fast-json-stable-stringify","versions":[{"version":"2.1.0","files":[{"file":"/packages/website-builder-sdk/package.json","types":["dependencies"]}]}]},{"name":"@4tw/cypress-drag-drop","versions":[{"version":"2.3.1","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/cypress","versions":[{"version":"10.1.3","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"amazon-cognito-identity-js","versions":[{"version":"6.3.20","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress","versions":[{"version":"15.18.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress-image-snapshot","versions":[{"version":"4.0.1","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress-mailosaur","versions":[{"version":"5.0.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress-wait-until","versions":[{"version":"3.0.2","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"del","versions":[{"version":"8.0.1","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"node-notifier","versions":[{"version":"10.0.1","files":[{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"@types/yargs","versions":[{"version":"17.0.35","files":[{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]},{"file":"/scripts/release/package.json","types":["devDependencies"]}]}]},{"name":"cli-progress","versions":[{"version":"3.12.0","files":[{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]}]}]},{"name":"p-limit","versions":[{"version":"7.3.0","files":[{"file":"/scripts/cjsToEsm/package.json","types":["dependencies"]}]}]},{"name":"@types/cli-progress","versions":[{"version":"3.11.6","files":[{"file":"/scripts/cjsToEsm/package.json","types":["devDependencies"]}]}]}]} +{ + "dependencies": [ + { + "name": "@ai-sdk/anthropic", + "version": "4.0.8", + "files": ["/packages/api-core/package.json", "/packages/api-core/package.json"] + }, + { + "name": "@ai-sdk/openai", + "version": "4.0.8", + "files": ["/packages/api-core/package.json", "/packages/api-core/package.json"] + }, + { + "name": "@apollo/react-components", + "version": "3.1.5", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@apollo/react-hooks", + "version": "3.1.5", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@auth0/auth0-spa-js", + "version": "2.23.0", + "files": ["/packages/auth0/package.json", "/packages/auth0/package.json"] + }, + { + "name": "@aws-sdk/client-apigatewaymanagementapi", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-cloudfront", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-cloudwatch-events", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-cloudwatch-logs", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-cognito-identity-provider", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-dynamodb", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-dynamodb-streams", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-eventbridge", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-iam", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-iot", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-lambda", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-s3", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-scheduler", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-sfn", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-sqs", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/client-sts", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/credential-providers", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/lib-dynamodb", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/lib-storage", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/s3-presigned-post", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/s3-request-presigner", + "version": "3.1080.0", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@aws-sdk/util-dynamodb", + "version": "3.996.5", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "@babel/code-frame", + "version": "8.0.0", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms/package.json" + ] + }, + { + "name": "@emotion/css", + "version": "11.13.5", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor-actions/package.json" + ] + }, + { + "name": "@emotion/react", + "version": "11.14.0", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "@emotion/styled", + "version": "11.14.1", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor-actions/package.json" + ] + }, + { + "name": "@fortawesome/fontawesome-common-types", + "version": "7.3.0", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "@fortawesome/fontawesome-svg-core", + "version": "7.3.0", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json" + ] + }, + { + "name": "@fortawesome/free-brands-svg-icons", + "version": "7.3.0", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "@fortawesome/free-regular-svg-icons", + "version": "7.3.0", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "@fortawesome/free-solid-svg-icons", + "version": "7.3.0", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "@fortawesome/react-fontawesome", + "version": "3.3.1", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json" + ] + }, + { + "name": "@graphql-tools/merge", + "version": "9.1.11", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", + "/packages/handler-graphql/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", + "/packages/handler-graphql/package.json" + ] + }, + { + "name": "@graphql-tools/resolvers-composition", + "version": "7.0.33", + "files": ["/packages/handler-graphql/package.json", "/packages/handler-graphql/package.json"] + }, + { + "name": "@graphql-tools/schema", + "version": "10.0.35", + "files": [ + "/packages/api-audit-logs/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", + "/packages/handler-graphql/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-record-locking/package.json", + "/packages/background-tasks/package.json", + "/packages/handler-graphql/package.json" + ] + }, + { + "name": "@graphql-tools/utils", + "version": "11.2.0", + "files": ["/packages/handler-graphql/package.json", "/packages/handler-graphql/package.json"] + }, + { + "name": "@iconify/json", + "version": "2.2.497", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@lexical/code", + "version": "0.46.0", + "files": [ + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json" + ] + }, + { + "name": "@lexical/hashtag", + "version": "0.46.0", + "files": ["/packages/lexical-nodes/package.json", "/packages/lexical-nodes/package.json"] + }, + { + "name": "@lexical/headless", + "version": "0.46.0", + "files": [ + "/packages/lexical-converter/package.json", + "/packages/lexical-converter/package.json" + ] + }, + { + "name": "@lexical/history", + "version": "0.46.0", + "files": ["/packages/lexical-editor/package.json", "/packages/lexical-editor/package.json"] + }, + { + "name": "@lexical/html", + "version": "0.46.0", + "files": [ + "/packages/lexical-converter/package.json", + "/packages/lexical-converter/package.json" + ] + }, + { + "name": "@lexical/list", + "version": "0.46.0", + "files": ["/packages/lexical-nodes/package.json", "/packages/lexical-nodes/package.json"] + }, + { + "name": "@lexical/mark", + "version": "0.46.0", + "files": ["/packages/lexical-nodes/package.json", "/packages/lexical-nodes/package.json"] + }, + { + "name": "@lexical/overflow", + "version": "0.46.0", + "files": ["/packages/lexical-nodes/package.json", "/packages/lexical-nodes/package.json"] + }, + { + "name": "@lexical/react", + "version": "0.46.0", + "files": [ + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json" + ] + }, + { + "name": "@lexical/rich-text", + "version": "0.46.0", + "files": [ + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json" + ] + }, + { + "name": "@lexical/selection", + "version": "0.46.0", + "files": [ + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/lexical-nodes/package.json" + ] + }, + { + "name": "@lexical/text", + "version": "0.46.0", + "files": ["/packages/lexical-editor/package.json", "/packages/lexical-editor/package.json"] + }, + { + "name": "@lexical/utils", + "version": "0.46.0", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json" + ] + }, + { + "name": "@material-design-icons/svg", + "version": "0.14.15", + "files": ["/packages/app-scheduler/package.json", "/packages/app-scheduler/package.json"] + }, + { + "name": "@minoru/react-dnd-treeview", + "version": "3.5.4", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@modelcontextprotocol/sdk", + "version": "1.29.0", + "files": ["/packages/mcp/package.json", "/packages/mcp/package.json"] + }, + { + "name": "@monaco-editor/react", + "version": "4.7.0", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-website-builder/package.json", + "/packages/admin-ui/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "@noble/hashes", + "version": "2.2.0", + "files": ["/packages/utils/package.json", "/packages/utils/package.json"] + }, + { + "name": "@octokit/rest", + "version": "22.0.1", + "files": ["/scripts/release/package.json", "/scripts/release/package.json"] + }, + { + "name": "@okta/okta-auth-js", + "version": "8.0.1", + "files": ["/packages/okta/package.json", "/packages/okta/package.json"] + }, + { + "name": "@opensearch-project/opensearch", + "version": "3.6.0", + "files": ["/packages/api-opensearch/package.json", "/packages/api-opensearch/package.json"] + }, + { + "name": "@pulumi/aws", + "version": "7.35.0", + "files": [ + "/packages/project-aws/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi-sdk/package.json" + ] + }, + { + "name": "@pulumi/pulumi", + "version": "3.250.0", + "files": [ + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json" + ] + }, + { + "name": "@pulumi/random", + "version": "4.21.0", + "files": ["/packages/project-aws/package.json", "/packages/project-aws/package.json"] + }, + { + "name": "@radix-ui/react-scroll-area", + "version": "1.2.14", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@rsbuild/core", + "version": "2.1.4", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rsbuild/plugin-react", + "version": "2.1.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rsbuild/plugin-sass", + "version": "2.0.1", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rsbuild/plugin-svgr", + "version": "2.0.5", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rsbuild/plugin-type-check", + "version": "1.5.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rsdoctor/rspack-plugin", + "version": "1.5.17", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rslib/core", + "version": "0.23.2", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@rspack/core", + "version": "2.1.2", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@swc/plugin-emotion", + "version": "14.15.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@tailwindcss/postcss", + "version": "4.3.2", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "@tanstack/react-table", + "version": "8.21.3", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@types/aws-lambda", + "version": "8.10.162", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { "name": "@types/hoist-non-react-statics", "version": "3.3.7", "files": ["/package.json"] }, + { + "name": "@types/prismjs", + "version": "1.26.6", + "files": ["/packages/lexical-nodes/package.json", "/packages/lexical-nodes/package.json"] + }, + { + "name": "@types/react", + "version": "18.3.31", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json" + ] + }, + { + "name": "accounting", + "version": "0.4.1", + "files": ["/packages/i18n/package.json", "/packages/i18n/package.json"] + }, + { + "name": "ai", + "version": "7.0.16", + "files": [ + "/packages/ai-powerups/package.json", + "/packages/api-core/package.json", + "/packages/ai-powerups/package.json", + "/packages/api-core/package.json" + ] + }, + { + "name": "apollo-cache", + "version": "1.3.5", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json" + ] + }, + { + "name": "apollo-cache-inmemory", + "version": "1.6.6", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "apollo-client", + "version": "2.6.10", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json" + ] + }, + { + "name": "apollo-link", + "version": "1.2.14", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json" + ] + }, + { + "name": "apollo-link-batch-http", + "version": "1.2.14", + "files": [ + "/packages/app-serverless-cms/package.json", + "/packages/app-serverless-cms/package.json" + ] + }, + { + "name": "apollo-link-context", + "version": "1.0.20", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json" + ] + }, + { + "name": "apollo-link-error", + "version": "1.1.13", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "apollo-link-http-common", + "version": "0.2.16", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "apollo-utilities", + "version": "1.3.4", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-serverless-cms/package.json" + ] + }, + { + "name": "aws-amplify", + "version": "6.18.0", + "files": ["/packages/cognito/package.json", "/packages/cognito/package.json"] + }, + { + "name": "better-sqlite3", + "version": "12.11.1", + "files": [ + "/packages/project-server-template/template/appTemplates/api/graphql/package.json", + "/packages/project-server-template/template/appTemplates/api/graphql/package.json" + ] + }, + { + "name": "bree", + "version": "9.2.9", + "files": [ + "/packages/api-scheduler-server/package.json", + "/packages/api-scheduler-server/package.json" + ] + }, + { + "name": "bson-objectid", + "version": "2.0.4", + "files": ["/packages/utils/package.json", "/packages/utils/package.json"] + }, + { + "name": "bytes", + "version": "3.1.2", + "files": [ + "/packages/admin-ui/package.json", + "/packages/api-sync-system/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/admin-ui/package.json", + "/packages/api-sync-system/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json" + ] + }, + { + "name": "cache-control-parser", + "version": "2.2.0", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager/package.json" + ] + }, + { + "name": "chalk", + "version": "5.6.2", + "files": [ + "/packages/aws-layers/package.json", + "/packages/build-tools/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/cli-server/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/system-requirements/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cli/package.json", + "/scripts/release/package.json", + "/packages/aws-layers/package.json", + "/packages/build-tools/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/cli-server/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/system-requirements/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cli/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "cheerio", + "version": "1.2.0", + "files": [ + "/packages/lexical-converter/package.json", + "/packages/lexical-converter/package.json" + ] + }, + { + "name": "chokidar", + "version": "5.0.0", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "ci-info", + "version": "4.4.0", + "files": [ + "/packages/cli-core/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/packages/telemetry/package.json", + "/packages/cli-core/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/packages/telemetry/package.json" + ] + }, + { + "name": "class-variance-authority", + "version": "0.7.1", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "classnames", + "version": "2.5.1", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "cli-progress", + "version": "3.12.0", + "files": ["/scripts/cjsToEsm/package.json", "/scripts/cjsToEsm/package.json"] + }, + { + "name": "cli-table3", + "version": "0.6.5", + "files": [ + "/packages/system-requirements/package.json", + "/packages/system-requirements/package.json" + ] + }, + { + "name": "clsx", + "version": "2.1.1", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "cmdk", + "version": "1.1.1", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "css-loader", + "version": "7.1.4", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "csstype", + "version": "3.2.3", + "files": [ + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "dataloader", + "version": "2.2.3", + "files": [ + "/packages/api-core/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-core/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json" + ] + }, + { + "name": "date-fns", + "version": "4.4.0", + "files": [ + "/packages/admin-ui/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/app-audit-logs/package.json", + "/packages/db-dynamodb/package.json", + "/packages/admin-ui/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/app-audit-logs/package.json", + "/packages/db-dynamodb/package.json" + ] + }, + { + "name": "dayjs", + "version": "1.11.21", + "files": [ + "/packages/app-file-manager/package.json", + "/packages/app-file-manager/package.json" + ] + }, + { + "name": "debounce", + "version": "3.0.0", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "decompress", + "version": "4.2.1", + "files": ["/packages/pulumi-sdk/package.json", "/packages/pulumi-sdk/package.json"] + }, + { + "name": "deep-equal", + "version": "2.2.3", + "files": [ + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json", + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json" + ] + }, + { + "name": "deepmerge", + "version": "4.3.1", + "files": [ + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "dnd-core", + "version": "16.0.1", + "files": [ + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-common/package.json" + ] + }, + { + "name": "dot-prop", + "version": "10.1.0", + "files": [ + "/packages/api-headless-cms-storage/package.json", + "/packages/db-dynamodb/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/db-dynamodb/package.json" + ] + }, + { + "name": "dot-prop-immutable", + "version": "2.1.1", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/app-headless-cms/package.json", + "/packages/api-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "dotenv", + "version": "17.4.2", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "dynamodb-toolbox", + "version": "0.9.5", + "files": ["/packages/db-dynamodb/package.json", "/packages/db-dynamodb/package.json"] + }, + { + "name": "email-addresses", + "version": "5.0.0", + "files": [ + "/packages/api-mailer/package.json", + "/packages/project-aws/package.json", + "/packages/api-mailer/package.json", + "/packages/project-aws/package.json" + ] + }, + { + "name": "execa", + "version": "9.6.1", + "files": [ + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/system-requirements/package.json", + "/scripts/buildPackages/package.json", + "/scripts/release/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/system-requirements/package.json", + "/scripts/buildPackages/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "exifreader", + "version": "4.41.0", + "files": [ + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json" + ] + }, + { + "name": "exit-hook", + "version": "5.1.0", + "files": [ + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json" + ] + }, + { + "name": "fast-glob", + "version": "3.3.3", + "files": [ + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/i18n/package.json", + "/packages/project/package.json", + "/scripts/cjsToEsm/package.json", + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/i18n/package.json", + "/packages/project/package.json", + "/scripts/cjsToEsm/package.json" + ] + }, + { + "name": "fast-json-patch", + "version": "3.1.1", + "files": [ + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "fast-json-stable-stringify", + "version": "2.1.0", + "files": [ + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "fecha", + "version": "4.2.3", + "files": ["/packages/i18n/package.json", "/packages/i18n/package.json"] + }, + { + "name": "find-up", + "version": "8.0.0", + "files": [ + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cli/package.json", + "/scripts/cjsToEsm/package.json", + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cli/package.json", + "/scripts/cjsToEsm/package.json" + ] + }, + { + "name": "front-matter", + "version": "4.0.2", + "files": [ + "/packages/ai-powerups/package.json", + "/packages/mcp/package.json", + "/packages/ai-powerups/package.json", + "/packages/mcp/package.json" + ] + }, + { + "name": "fs-extra", + "version": "11.3.6", + "files": [ + "/packages/build-tools/package.json", + "/packages/create-webiny-project/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/packages/build-tools/package.json", + "/packages/create-webiny-project/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json" + ] + }, + { + "name": "fuse.js", + "version": "7.4.2", + "files": ["/packages/db-utils/package.json", "/packages/db-utils/package.json"] + }, + { + "name": "get-tsconfig", + "version": "4.14.0", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "get-yarn-workspaces", + "version": "1.0.2", + "files": [ + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/project-utils/package.json", + "/scripts/prepublishOnly/package.json", + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/project-utils/package.json", + "/scripts/prepublishOnly/package.json" + ] + }, + { + "name": "graphql", + "version": "16.14.2", + "files": [ + "/packages/api-core/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/handler-graphql/package.json", + "/packages/languages/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/webhooks/package.json", + "/packages/api-core/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/handler-graphql/package.json", + "/packages/languages/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/webhooks/package.json" + ] + }, + { + "name": "graphql-request", + "version": "7.4.0", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "graphql-scalars", + "version": "1.25.0", + "files": ["/packages/handler-graphql/package.json", "/packages/handler-graphql/package.json"] + }, + { + "name": "graphql-tag", + "version": "2.12.7", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/api-headless-cms/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "history", + "version": "5.3.0", + "files": [ + "/packages/app/package.json", + "/packages/app-admin/package.json", + "/packages/app/package.json", + "/packages/app-admin/package.json" + ] + }, + { + "name": "humanize-duration", + "version": "3.34.0", + "files": [ + "/packages/cli-core/package.json", + "/packages/project/package.json", + "/packages/cli-core/package.json", + "/packages/project/package.json" + ] + }, + { + "name": "inquirer", + "version": "14.0.2", + "files": [ + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "invariant", + "version": "2.2.4", + "files": [ + "/packages/app/package.json", + "/packages/project-aws/package.json", + "/packages/app/package.json", + "/packages/project-aws/package.json" + ] + }, + { + "name": "is-hotkey", + "version": "0.2.0", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "jose", + "version": "6.2.3", + "files": ["/packages/api-core/package.json", "/packages/api-core/package.json"] + }, + { + "name": "js-yaml", + "version": "5.2.1", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "jsdom", + "version": "29.1.1", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "jsesc", + "version": "3.1.0", + "files": ["/packages/telemetry/package.json", "/packages/telemetry/package.json"] + }, + { + "name": "jsonpack", + "version": "1.1.5", + "files": ["/packages/utils/package.json", "/packages/utils/package.json"] + }, + { + "name": "jsonwebtoken", + "version": "9.0.3", + "files": [ + "/packages/api-core/package.json", + "/packages/auth0/package.json", + "/packages/cognito/package.json", + "/packages/okta/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/api-core/package.json", + "/packages/auth0/package.json", + "/packages/cognito/package.json", + "/packages/okta/package.json", + "/packages/self-hosted-auth/package.json" + ] + }, + { "name": "jwt-decode", "version": "4.0.0", "files": ["/package.json"] }, + { + "name": "knex", + "version": "3.3.0", + "files": [ + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/project-server-template/package.json", + "/packages/project-server-template/template/appTemplates/api/graphql/package.json", + "/packages/self-hosted-auth-sql/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/project-server-template/package.json", + "/packages/project-server-template/template/appTemplates/api/graphql/package.json", + "/packages/self-hosted-auth-sql/package.json" + ] + }, + { + "name": "lexical", + "version": "0.46.0", + "files": [ + "/packages/app-admin/package.json", + "/packages/lexical-converter/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-theme/package.json", + "/packages/app-admin/package.json", + "/packages/lexical-converter/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-nodes/package.json", + "/packages/lexical-theme/package.json" + ] + }, + { + "name": "listr2", + "version": "10.2.2", + "files": [ + "/packages/create-webiny-project/package.json", + "/scripts/buildPackages/package.json", + "/packages/create-webiny-project/package.json", + "/scripts/buildPackages/package.json" + ] + }, + { + "name": "load-json-file", + "version": "7.0.1", + "files": [ + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/telemetry/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cjsToEsm/package.json", + "/scripts/release/package.json", + "/packages/build-tools/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/telemetry/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/cjsToEsm/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "load-script", + "version": "2.0.0", + "files": [ + "/packages/app-graphql-playground/package.json", + "/packages/app-graphql-playground/package.json" + ] + }, + { + "name": "lodash", + "version": "4.18.1", + "files": [ + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api-aco/package.json", + "/packages/api-core/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-website-builder/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-workflows/package.json", + "/packages/background-tasks/package.json", + "/packages/build-tools/package.json", + "/packages/cognito/package.json", + "/packages/db-dynamodb/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/lexical-editor/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-utils/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/react-properties/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/validation/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api-aco/package.json", + "/packages/api-core/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-website-builder/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-workflows/package.json", + "/packages/background-tasks/package.json", + "/packages/build-tools/package.json", + "/packages/cognito/package.json", + "/packages/db-dynamodb/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/lexical-editor/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-utils/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/react-properties/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/validation/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "markdown-to-jsx", + "version": "9.8.2", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "matcher", + "version": "6.0.0", + "files": [ + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "mime", + "version": "4.1.0", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/project-aws/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/project-aws/package.json" + ] + }, + { + "name": "minimatch", + "version": "10.2.5", + "files": [ + "/packages/admin-ui/package.json", + "/packages/api-core/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/project/package.json", + "/packages/admin-ui/package.json", + "/packages/api-core/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/project/package.json" + ] + }, + { + "name": "mobx", + "version": "6.16.1", + "files": [ + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-utils/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/languages/package.json", + "/packages/okta/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-utils/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/languages/package.json", + "/packages/okta/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json" + ] + }, + { + "name": "mobx-react-lite", + "version": "4.1.1", + "files": [ + "/packages/ai-powerups/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/okta/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json", + "/packages/ai-powerups/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/okta/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json" + ] + }, + { + "name": "monaco-editor", + "version": "0.53.0", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/app-sdk-playground/package.json" + ] + }, + { + "name": "mqtt", + "version": "5.15.2", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "nanoid", + "version": "5.1.16", + "files": [ + "/packages/app/package.json", + "/packages/react-properties/package.json", + "/packages/utils/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/app/package.json", + "/packages/react-properties/package.json", + "/packages/utils/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "nanoid-dictionary", + "version": "5.0.0", + "files": [ + "/packages/utils/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/utils/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "neverthrow", + "version": "8.2.0", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "node-notifier", + "version": "10.0.1", + "files": ["/scripts/buildPackages/package.json", "/scripts/buildPackages/package.json"] + }, + { + "name": "nodemailer", + "version": "9.0.3", + "files": ["/packages/api-mailer/package.json", "/packages/api-mailer/package.json"] + }, + { + "name": "object-hash", + "version": "3.0.0", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json" + ] + }, + { + "name": "object-merge-advanced", + "version": "14.1.3", + "files": [ + "/packages/background-tasks/package.json", + "/packages/background-tasks/package.json" + ] + }, + { + "name": "object-sizeof", + "version": "2.6.5", + "files": [ + "/packages/background-tasks/package.json", + "/packages/background-tasks/package.json" + ] + }, + { + "name": "ohash", + "version": "2.0.11", + "files": ["/packages/i18n/package.json", "/packages/i18n/package.json"] + }, + { + "name": "open", + "version": "11.0.0", + "files": [ + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json" + ] + }, + { + "name": "ora", + "version": "9.4.1", + "files": [ + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "os", + "version": "0.1.2", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "p-limit", + "version": "7.3.0", + "files": ["/scripts/cjsToEsm/package.json", "/scripts/cjsToEsm/package.json"] + }, + { + "name": "p-map", + "version": "7.0.5", + "files": [ + "/packages/api-file-manager-s3/package.json", + "/packages/api-headless-cms/package.json", + "/packages/sdk/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-headless-cms/package.json", + "/packages/sdk/package.json" + ] + }, + { + "name": "p-reduce", + "version": "3.0.0", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-headless-cms/package.json" + ] + }, + { + "name": "p-retry", + "version": "8.0.0", + "files": [ + "/packages/api-dynamodb-to-elasticsearch/package.json", + "/packages/project-aws/package.json", + "/packages/sdk/package.json", + "/packages/utils/package.json", + "/scripts/release/package.json", + "/packages/api-dynamodb-to-elasticsearch/package.json", + "/packages/project-aws/package.json", + "/packages/sdk/package.json", + "/packages/utils/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "pino", + "version": "10.3.1", + "files": [ + "/packages/api-core/package.json", + "/packages/cli-core/package.json", + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json", + "/scripts/cli/package.json", + "/packages/api-core/package.json", + "/packages/cli-core/package.json", + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json", + "/scripts/cli/package.json" + ] + }, + { + "name": "pino-lambda", + "version": "4.4.1", + "files": ["/packages/api-core/package.json", "/packages/api-core/package.json"] + }, + { + "name": "pino-pretty", + "version": "13.1.3", + "files": [ + "/packages/cli-core/package.json", + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/cli-core/package.json", + "/packages/project/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "pluralize", + "version": "8.0.0", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/api-headless-cms/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "postcss", + "version": "8.5.16", + "files": [ + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json" + ] + }, + { + "name": "postcss-import", + "version": "16.1.1", + "files": [ + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json" + ] + }, + { + "name": "postcss-loader", + "version": "8.2.1", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "radix-ui", + "version": "1.6.2", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor/package.json", + "/packages/admin-ui/package.json", + "/packages/app-website-builder/package.json", + "/packages/lexical-editor/package.json" + ] + }, + { + "name": "raw-loader", + "version": "4.0.2", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "react", + "version": "18.3.1", + "files": [ + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/languages/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/lexical-nodes/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-aws-template/package.json", + "/packages/project-server-template/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/webiny/package.json", + "/packages/website-builder-react/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/languages/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/lexical-nodes/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-aws-template/package.json", + "/packages/project-server-template/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/webiny/package.json", + "/packages/website-builder-react/package.json" + ] + }, + { + "name": "react-color", + "version": "2.19.3", + "files": [ + "/packages/admin-ui/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/admin-ui/package.json", + "/packages/lexical-editor-actions/package.json" + ] + }, + { + "name": "react-custom-scrollbars", + "version": "4.2.1", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "react-day-picker", + "version": "10.0.1", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "react-dnd", + "version": "16.0.1", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/admin-ui/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "react-dnd-html5-backend", + "version": "16.0.1", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json" + ] + }, + { + "name": "react-dom", + "version": "18.3.1", + "files": [ + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/build-tools/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/languages/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/react-composition/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json", + "/packages/ai-powerups/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/build-tools/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/languages/package.json", + "/packages/lexical-editor/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/react-composition/package.json", + "/packages/tenant-manager/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-react/package.json" + ] + }, + { + "name": "react-helmet", + "version": "6.1.0", + "files": [ + "/packages/app-admin-ui/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json" + ] + }, + { + "name": "react-lazy-load", + "version": "4.0.1", + "files": [ + "/packages/app-file-manager/package.json", + "/packages/app-file-manager/package.json" + ] + }, + { + "name": "react-refresh", + "version": "0.18.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "react-resizable-panels", + "version": "4.12.1", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "react-transition-group", + "version": "4.4.5", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "react-virtualized", + "version": "9.22.6", + "files": [ + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json", + "/packages/admin-ui/package.json", + "/packages/app-admin/package.json" + ] + }, + { + "name": "replace-in-path", + "version": "1.1.0", + "files": [ + "/packages/project-aws/package.json", + "/packages/project-server/package.json", + "/packages/project-aws/package.json", + "/packages/project-server/package.json" + ] + }, + { + "name": "reset-css", + "version": "5.0.2", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "rimraf", + "version": "6.1.3", + "files": [ + "/packages/build-tools/package.json", + "/packages/create-webiny-project/package.json", + "/packages/build-tools/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "sanitize-filename", + "version": "1.6.4", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json" + ] + }, + { + "name": "sass", + "version": "1.101.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "sass-loader", + "version": "17.0.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "semver", + "version": "7.8.5", + "files": [ + "/packages/api-sync-system/package.json", + "/packages/cli-core/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/system-requirements/package.json", + "/scripts/release/package.json", + "/packages/api-sync-system/package.json", + "/packages/cli-core/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/system-requirements/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "serialize-error", + "version": "13.0.1", + "files": [ + "/packages/project/package.json", + "/scripts/buildPackages/package.json", + "/packages/project/package.json", + "/scripts/buildPackages/package.json" + ] + }, + { + "name": "sharp", + "version": "0.35.3", + "files": [ + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json" + ] + }, + { + "name": "slugify", + "version": "1.6.9", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/form/package.json", + "/packages/api-headless-cms/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/form/package.json" + ] + }, + { + "name": "sonner", + "version": "2.0.7", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "standardwebhooks", + "version": "1.0.0", + "files": [ + "/packages/sdk/package.json", + "/packages/webhooks/package.json", + "/packages/sdk/package.json", + "/packages/webhooks/package.json" + ] + }, + { + "name": "strip-ansi", + "version": "7.2.0", + "files": ["/packages/telemetry/package.json", "/packages/telemetry/package.json"] + }, + { + "name": "strip-json-comments", + "version": "5.0.3", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "style-loader", + "version": "4.0.0", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "tailwind-merge", + "version": "3.6.0", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "tailwindcss", + "version": "4.3.2", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "tar", + "version": "7.5.19", + "files": ["/packages/pulumi-sdk/package.json", "/packages/pulumi-sdk/package.json"] + }, + { + "name": "tinycolor2", + "version": "1.6.0", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "ts-invariant", + "version": "0.10.3", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "ts-morph", + "version": "28.0.0", + "files": [ + "/packages/build-tools/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/scripts/cli/package.json", + "/scripts/cjsToEsm/package.json", + "/scripts/generateSkills/package.json", + "/packages/build-tools/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/scripts/cli/package.json", + "/scripts/cjsToEsm/package.json", + "/scripts/generateSkills/package.json" + ] + }, + { + "name": "tsx", + "version": "4.23.0", + "files": [ + "/packages/build-tools/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-server/package.json", + "/packages/project/package.json", + "/scripts/buildPackages/package.json", + "/scripts/cjsToEsm/package.json", + "/packages/build-tools/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-server/package.json", + "/packages/project/package.json", + "/scripts/buildPackages/package.json", + "/scripts/cjsToEsm/package.json" + ] + }, + { + "name": "tw-animate-css", + "version": "1.4.0", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "type-fest", + "version": "5.8.0", + "files": [ + "/packages/admin-ui/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/db/package.json", + "/scripts/cli/package.json", + "/packages/admin-ui/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/db/package.json", + "/scripts/cli/package.json" + ] + }, + { + "name": "typescript", + "version": "7.0.2", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "unicode-emoji-json", + "version": "0.9.0", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "uniqid", + "version": "5.4.0", + "files": ["/packages/plugins/package.json", "/packages/plugins/package.json"] + }, + { + "name": "url-loader", + "version": "4.1.1", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "use-deep-compare-effect", + "version": "1.8.1", + "files": [ + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms/package.json" + ] + }, + { + "name": "utf-8-validate", + "version": "6.0.6", + "files": ["/packages/build-tools/package.json", "/packages/build-tools/package.json"] + }, + { + "name": "validate-npm-package-name", + "version": "8.0.0", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "vitest", + "version": "4.1.10", + "files": [ + "/packages/api-headless-cms-aco/package.json", + "/packages/api-headless-cms-aco/package.json" + ] + }, + { + "name": "vue", + "version": "3.5.39", + "files": [ + "/packages/website-builder-vue/package.json", + "/packages/website-builder-vue/package.json" + ] + }, + { + "name": "warning", + "version": "4.0.3", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "write-json-file", + "version": "7.0.0", + "files": [ + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/release/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/global-config/package.json", + "/packages/project/package.json", + "/scripts/buildPackages/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "ws", + "version": "8.21.0", + "files": [ + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-server/package.json" + ] + }, + { + "name": "yargs", + "version": "18.0.0", + "files": [ + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/i18n/package.json", + "/scripts/buildPackages/package.json", + "/scripts/cli/package.json", + "/scripts/release/package.json", + "/packages/cli-core/package.json", + "/packages/create-webiny-project/package.json", + "/packages/i18n/package.json", + "/scripts/buildPackages/package.json", + "/scripts/cli/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "yesno", + "version": "0.4.0", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "zod", + "version": "4.4.3", + "files": [ + "/packages/ai-powerups/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-core/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-mailer/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cli-core/package.json", + "/packages/cognito/package.json", + "/packages/handler-graphql/package.json", + "/packages/mcp/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/sdk/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/utils/package.json", + "/packages/webhooks/package.json", + "/packages/ai-powerups/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-core/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-mailer/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder/package.json", + "/packages/auth0/package.json", + "/packages/background-tasks/package.json", + "/packages/cli-core/package.json", + "/packages/cognito/package.json", + "/packages/handler-graphql/package.json", + "/packages/mcp/package.json", + "/packages/okta/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/sdk/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/utils/package.json", + "/packages/webhooks/package.json" + ] + } + ], + "devDependencies": [ + { + "name": "@4tw/cypress-drag-drop", + "version": "2.3.1", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "@babel/code-frame", "version": "8.0.0", "files": ["/package.json"] }, + { "name": "@commitlint/cli", "version": "21.2.0", "files": ["/package.json"] }, + { "name": "@commitlint/config-conventional", "version": "21.2.0", "files": ["/package.json"] }, + { + "name": "@emotion/react", + "version": "11.14.0", + "files": [ + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/react-rich-text-lexical-renderer/package.json" + ] + }, + { + "name": "@faker-js/faker", + "version": "10.5.0", + "files": ["/packages/api-sync-system/package.json", "/packages/api-sync-system/package.json"] + }, + { + "name": "@fortawesome/free-solid-svg-icons", + "version": "7.3.0", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { "name": "@grpc/grpc-js", "version": "1.14.4", "files": ["/package.json"] }, + { "name": "@lexical/code", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/hashtag", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/headless", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/history", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/html", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/list", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/mark", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/overflow", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/react", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/rich-text", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/selection", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/text", "version": "0.46.0", "files": ["/package.json"] }, + { "name": "@lexical/utils", "version": "0.46.0", "files": ["/package.json"] }, + { + "name": "@material-design-icons/svg", + "version": "0.14.15", + "files": ["/packages/icons/package.json", "/packages/icons/package.json"] + }, + { "name": "@octokit/rest", "version": "22.0.1", "files": ["/package.json"] }, + { + "name": "@rsbuild/core", + "version": "2.1.4", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@rsbuild/plugin-svgr", + "version": "2.0.5", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@storybook/addon-a11y", + "version": "10.4.6", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@storybook/addon-docs", + "version": "10.4.6", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@storybook/react", + "version": "10.4.6", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@tailwindcss/postcss", + "version": "4.3.2", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@testing-library/cypress", + "version": "10.1.3", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "@testing-library/react", + "version": "16.3.2", + "files": [ + "/packages/app-admin/package.json", + "/packages/form/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/app-admin/package.json", + "/packages/form/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json" + ] + }, + { + "name": "@testing-library/user-event", + "version": "14.6.1", + "files": ["/packages/form/package.json", "/packages/form/package.json"] + }, + { + "name": "@types/accounting", + "version": "0.4.5", + "files": ["/packages/i18n/package.json", "/packages/i18n/package.json"] + }, + { + "name": "@types/bytes", + "version": "3.1.5", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/cli-progress", + "version": "3.11.6", + "files": ["/scripts/cjsToEsm/package.json", "/scripts/cjsToEsm/package.json"] + }, + { + "name": "@types/debounce", + "version": "1.2.4", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "@types/deep-equal", + "version": "1.0.4", + "files": [ + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { "name": "@types/fs-extra", "version": "11.0.4", "files": ["/package.json"] }, + { + "name": "@types/graphlib", + "version": "2.1.12", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/humanize-duration", + "version": "3.27.4", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "@types/invariant", + "version": "2.2.37", + "files": ["/packages/form/package.json", "/packages/form/package.json"] + }, + { + "name": "@types/is-hotkey", + "version": "0.1.10", + "files": [ + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/app-admin/package.json", + "/packages/app-website-builder/package.json", + "/packages/website-builder-sdk/package.json" + ] + }, + { + "name": "@types/is-number", + "version": "7.0.5", + "files": ["/packages/db-dynamodb/package.json", "/packages/db-dynamodb/package.json"] + }, + { + "name": "@types/js-yaml", + "version": "4.0.9", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "@types/jsdom", + "version": "28.0.3", + "files": ["/packages/project/package.json", "/packages/project/package.json"] + }, + { + "name": "@types/jsonpack", + "version": "1.1.6", + "files": [ + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json" + ] + }, + { + "name": "@types/jsonwebtoken", + "version": "9.0.10", + "files": [ + "/packages/api-core/package.json", + "/packages/auth0/package.json", + "/packages/okta/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/api-core/package.json", + "/packages/auth0/package.json", + "/packages/okta/package.json", + "/packages/self-hosted-auth/package.json" + ] + }, + { + "name": "@types/jwk-to-pem", + "version": "2.0.3", + "files": [ + "/packages/auth0/package.json", + "/packages/okta/package.json", + "/packages/auth0/package.json", + "/packages/okta/package.json" + ] + }, + { + "name": "@types/lodash", + "version": "4.17.24", + "files": [ + "/packages/api-sync-system/package.json", + "/packages/app/package.json", + "/packages/cli-core/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/mcp/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/validation/package.json", + "/packages/api-sync-system/package.json", + "/packages/app/package.json", + "/packages/cli-core/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/mcp/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/validation/package.json" + ] + }, + { + "name": "@types/ncp", + "version": "2.0.8", + "files": [ + "/packages/mcp/package.json", + "/packages/project-aws/package.json", + "/packages/mcp/package.json", + "/packages/project-aws/package.json" + ] + }, + { + "name": "@types/node", + "version": "24.13.2", + "files": [ + "/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/create-webiny-project/_templates/base/template.package.json" + ] + }, + { + "name": "@types/nodemailer", + "version": "8.0.1", + "files": ["/packages/api-mailer/package.json", "/packages/api-mailer/package.json"] + }, + { + "name": "@types/object-hash", + "version": "3.0.6", + "files": [ + "/packages/api-file-manager/package.json", + "/packages/api-file-manager/package.json" + ] + }, + { + "name": "@types/pluralize", + "version": "0.0.33", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms/package.json" + ] + }, + { + "name": "@types/postcss-import", + "version": "14.0.3", + "files": [ + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json" + ] + }, + { + "name": "@types/react", + "version": "18.3.31", + "files": [ + "/package.json", + "/packages/admin-ui/package.json", + "/packages/app-aco/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/self-hosted-auth/package.json", + "/packages/website-builder-react/package.json", + "/packages/admin-ui/package.json", + "/packages/app-aco/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-workflows/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/self-hosted-auth/package.json", + "/packages/website-builder-react/package.json" + ] + }, + { + "name": "@types/react-color", + "version": "3.0.13", + "files": [ + "/packages/admin-ui/package.json", + "/packages/lexical-editor-actions/package.json", + "/packages/admin-ui/package.json", + "/packages/lexical-editor-actions/package.json" + ] + }, + { + "name": "@types/react-custom-scrollbars", + "version": "4.0.13", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@types/react-dom", + "version": "18.3.7", + "files": [ + "/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/create-webiny-project/_templates/base/template.package.json" + ] + }, + { + "name": "@types/react-helmet", + "version": "6.1.11", + "files": ["/packages/app-admin-ui/package.json", "/packages/app-admin-ui/package.json"] + }, + { + "name": "@types/react-resizable", + "version": "4.0.0", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/react-transition-group", + "version": "4.4.12", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/react-virtualized", + "version": "9.22.3", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "@types/store", + "version": "2.0.5", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/tinycolor2", + "version": "1.4.6", + "files": ["/packages/app-admin/package.json", "/packages/app-admin/package.json"] + }, + { + "name": "@types/uniqid", + "version": "5.3.4", + "files": [ + "/packages/feature-flags/package.json", + "/packages/plugins/package.json", + "/packages/feature-flags/package.json", + "/packages/plugins/package.json" + ] + }, + { + "name": "@types/validate-npm-package-name", + "version": "4.0.2", + "files": [ + "/packages/create-webiny-project/package.json", + "/packages/create-webiny-project/package.json" + ] + }, + { + "name": "@types/warning", + "version": "3.0.4", + "files": ["/packages/app/package.json", "/packages/app/package.json"] + }, + { + "name": "@types/ws", + "version": "8.18.1", + "files": [ + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-server/package.json" + ] + }, + { + "name": "@types/yargs", + "version": "17.0.35", + "files": [ + "/scripts/buildPackages/package.json", + "/scripts/release/package.json", + "/scripts/buildPackages/package.json", + "/scripts/release/package.json" + ] + }, + { "name": "@vitest/coverage-v8", "version": "4.1.10", "files": ["/package.json"] }, + { "name": "adio", "version": "3.0.1", "files": ["/package.json"] }, + { + "name": "amazon-cognito-identity-js", + "version": "6.3.20", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "apollo-graphql", + "version": "0.9.7", + "files": [ + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms/package.json" + ] + }, + { + "name": "aws-sdk-client-mock", + "version": "4.1.0", + "files": [ + "/packages/api-scheduler-aws/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-sync-system/package.json" + ] + }, + { + "name": "better-sqlite3", + "version": "12.11.1", + "files": [ + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-websockets-sql/package.json" + ] + }, + { + "name": "chalk", + "version": "5.6.2", + "files": [ + "/package.json", + "/packages/admin-ui/package.json", + "/packages/admin-ui/package.json" + ] + }, + { "name": "cross-env", "version": "10.1.0", "files": ["/package.json"] }, + { + "name": "cypress", + "version": "15.18.0", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "cypress-image-snapshot", + "version": "4.0.1", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "cypress-mailosaur", + "version": "5.0.0", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "cypress-wait-until", + "version": "3.0.2", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "deepmerge", "version": "4.3.1", "files": ["/package.json"] }, + { + "name": "del", + "version": "8.0.1", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { + "name": "execa", + "version": "9.6.1", + "files": [ + "/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-website-builder/package.json", + "/packages/common-audit-logs/package.json", + "/packages/mcp/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-website-builder/package.json", + "/packages/common-audit-logs/package.json", + "/packages/mcp/package.json" + ] + }, + { "name": "fast-glob", "version": "3.3.3", "files": ["/package.json"] }, + { "name": "fs-extra", "version": "11.3.6", "files": ["/package.json"] }, + { "name": "get-yarn-workspaces", "version": "1.0.2", "files": ["/package.json"] }, + { "name": "github-actions-wac", "version": "2.0.0", "files": ["/package.json"] }, + { + "name": "graphql", + "version": "16.14.2", + "files": [ + "/package.json", + "/packages/api-aco/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-aco/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-mailer/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/testing/package.json", + "/packages/api-aco/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-aco/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-mailer/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/testing/package.json" + ] + }, + { + "name": "graphql-request", + "version": "7.4.0", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "husky", "version": "9.1.7", "files": ["/package.json"] }, + { "name": "inquirer", "version": "14.0.2", "files": ["/package.json"] }, + { + "name": "jest-dynalite", + "version": "3.6.1", + "files": [ + "/packages/api-core-ddb/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-sync-system/package.json", + "/packages/db-dynamodb/package.json", + "/packages/project-utils/package.json", + "/packages/api-core-ddb/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-sync-system/package.json", + "/packages/db-dynamodb/package.json", + "/packages/project-utils/package.json" + ] + }, + { "name": "jest-extended", "version": "7.0.0", "files": ["/package.json"] }, + { + "name": "jsdom", + "version": "29.1.1", + "files": [ + "/packages/lexical-converter/package.json", + "/packages/lexical-converter/package.json" + ] + }, + { + "name": "knex", + "version": "3.3.0", + "files": [ + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-event-handler-server-sql/package.json" + ] + }, + { "name": "lexical", "version": "0.46.0", "files": ["/package.json"] }, + { + "name": "listr2", + "version": "10.2.2", + "files": ["/packages/project-utils/package.json", "/packages/project-utils/package.json"] + }, + { + "name": "load-json-file", + "version": "7.0.1", + "files": [ + "/package.json", + "/packages/project-utils/package.json", + "/packages/project-utils/package.json" + ] + }, + { + "name": "lodash", + "version": "4.18.1", + "files": ["/package.json", "/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "minimatch", "version": "10.2.5", "files": ["/package.json"] }, + { + "name": "mobx", + "version": "6.16.1", + "files": ["/packages/form/package.json", "/packages/form/package.json"] + }, + { + "name": "mobx-react-lite", + "version": "4.1.1", + "files": ["/packages/form/package.json", "/packages/form/package.json"] + }, + { + "name": "nanoid", + "version": "5.1.16", + "files": ["/package.json", "/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "next", "version": "16.2.10", "files": ["/package.json"] }, + { + "name": "oxfmt", + "version": "0.58.0", + "files": [ + "/package.json", + "/packages/admin-ui/package.json", + "/packages/api-headless-cms/package.json", + "/packages/react-properties/package.json", + "/packages/admin-ui/package.json", + "/packages/api-headless-cms/package.json", + "/packages/react-properties/package.json" + ] + }, + { "name": "oxlint", "version": "1.73.0", "files": ["/package.json"] }, + { + "name": "pino", + "version": "10.3.1", + "files": [ + "/packages/logger/package.json", + "/packages/project-utils/package.json", + "/packages/logger/package.json", + "/packages/project-utils/package.json" + ] + }, + { + "name": "pino-pretty", + "version": "13.1.3", + "files": ["/packages/project-utils/package.json", "/packages/project-utils/package.json"] + }, + { "name": "react", "version": "18.3.1", "files": ["/package.json"] }, + { "name": "react-dom", "version": "18.3.1", "files": ["/package.json"] }, + { + "name": "rimraf", + "version": "6.1.3", + "files": [ + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-ddb/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-background-tasks-ddb/package.json", + "/packages/api-background-tasks-os/package.json", + "/packages/api-core/package.json", + "/packages/api-core-ddb/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/aws-sdk/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cli-core/package.json", + "/packages/common-audit-logs/package.json", + "/packages/db/package.json", + "/packages/db-dynamodb/package.json", + "/packages/error/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/feature-flags/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-db/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/languages/package.json", + "/packages/logger/package.json", + "/packages/okta/package.json", + "/packages/plugins/package.json", + "/packages/project/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/tenant-manager/package.json", + "/packages/testing/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/wcp/package.json", + "/packages/webiny/package.json", + "/scripts/cli/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-ddb/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-background-tasks-ddb/package.json", + "/packages/api-background-tasks-os/package.json", + "/packages/api-core/package.json", + "/packages/api-core-ddb/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/aws-sdk/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cli-core/package.json", + "/packages/common-audit-logs/package.json", + "/packages/db/package.json", + "/packages/db-dynamodb/package.json", + "/packages/error/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/feature-flags/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-db/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/languages/package.json", + "/packages/logger/package.json", + "/packages/okta/package.json", + "/packages/plugins/package.json", + "/packages/project/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/tenant-manager/package.json", + "/packages/testing/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/wcp/package.json", + "/packages/webiny/package.json", + "/scripts/cli/package.json" + ] + }, + { + "name": "sass", + "version": "1.101.0", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { "name": "semver", "version": "7.8.5", "files": ["/package.json"] }, + { + "name": "storybook", + "version": "10.4.6", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { + "name": "storybook-react-rsbuild", + "version": "3.3.4", + "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] + }, + { "name": "ts-expect", "version": "1.3.0", "files": ["/package.json"] }, + { + "name": "tsx", + "version": "4.23.0", + "files": ["/package.json", "/packages/mcp/package.json", "/packages/mcp/package.json"] + }, + { + "name": "type-fest", + "version": "5.8.0", + "files": [ + "/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/background-tasks/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/release/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/background-tasks/package.json", + "/packages/project/package.json", + "/packages/pulumi-sdk/package.json", + "/scripts/prepublishOnly/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "typescript", + "version": "7.0.2", + "files": [ + "/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-ddb/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-background-tasks-ddb/package.json", + "/packages/api-background-tasks-os/package.json", + "/packages/api-core/package.json", + "/packages/api-core-ddb/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-dynamodb-to-elasticsearch/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-aco/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-es-tasks/package.json", + "/packages/api-headless-cms-scheduler/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-tasks-ddb-es/package.json", + "/packages/api-headless-cms-workflows/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-scheduler-server/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-website-builder-scheduler/package.json", + "/packages/api-website-builder-workflows/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-utils/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/aws-sdk/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/cli-server/package.json", + "/packages/common-audit-logs/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/db/package.json", + "/packages/db-dynamodb/package.json", + "/packages/db-utils/package.json", + "/packages/error/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/feature/package.json", + "/packages/feature-flags/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-db/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/languages/package.json", + "/packages/logger/package.json", + "/packages/mcp/package.json", + "/packages/okta/package.json", + "/packages/plugins/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-server/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/react-composition/package.json", + "/packages/sdk/package.json", + "/packages/shared-aco/package.json", + "/packages/tenant-manager/package.json", + "/packages/testing/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/wcp/package.json", + "/packages/webhooks/package.json", + "/packages/webiny/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json", + "/cypress-tests/package.json", + "/scripts/cli/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-ddb/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-audit-logs-ddb/package.json", + "/packages/api-audit-logs-sql/package.json", + "/packages/api-background-tasks-ddb/package.json", + "/packages/api-background-tasks-os/package.json", + "/packages/api-core/package.json", + "/packages/api-core-ddb/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-dynamodb-to-elasticsearch/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-aco/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-es-tasks/package.json", + "/packages/api-headless-cms-scheduler/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-tasks-ddb-es/package.json", + "/packages/api-headless-cms-workflows/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-scheduler-server/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-testing/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-website-builder-scheduler/package.json", + "/packages/api-website-builder-workflows/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-admin-ui/package.json", + "/packages/app-audit-logs/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-graphql-playground/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-headless-cms-common/package.json", + "/packages/app-headless-cms-scheduler/package.json", + "/packages/app-headless-cms-workflows/package.json", + "/packages/app-mailer/package.json", + "/packages/app-record-locking/package.json", + "/packages/app-scheduler/package.json", + "/packages/app-sdk-playground/package.json", + "/packages/app-serverless-cms/package.json", + "/packages/app-utils/package.json", + "/packages/app-website-builder/package.json", + "/packages/app-website-builder-scheduler/package.json", + "/packages/app-website-builder-workflows/package.json", + "/packages/app-websockets/package.json", + "/packages/app-workflows/package.json", + "/packages/auth0/package.json", + "/packages/aws-sdk/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cli-aws/package.json", + "/packages/cli-core/package.json", + "/packages/cli-server/package.json", + "/packages/common-audit-logs/package.json", + "/packages/create-webiny-project/_templates/base/template.package.json", + "/packages/db/package.json", + "/packages/db-dynamodb/package.json", + "/packages/db-utils/package.json", + "/packages/error/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/feature/package.json", + "/packages/feature-flags/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-db/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/languages/package.json", + "/packages/logger/package.json", + "/packages/mcp/package.json", + "/packages/okta/package.json", + "/packages/plugins/package.json", + "/packages/project/package.json", + "/packages/project-aws/package.json", + "/packages/project-server/package.json", + "/packages/pulumi/package.json", + "/packages/pulumi-sdk/package.json", + "/packages/react-composition/package.json", + "/packages/sdk/package.json", + "/packages/shared-aco/package.json", + "/packages/tenant-manager/package.json", + "/packages/testing/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/wcp/package.json", + "/packages/webhooks/package.json", + "/packages/webiny/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/packages/website-builder-vue/package.json", + "/cypress-tests/package.json", + "/scripts/cli/package.json" + ] + }, + { + "name": "uniqid", + "version": "5.4.0", + "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] + }, + { "name": "validator", "version": "13.15.35", "files": ["/package.json"] }, + { "name": "verdaccio", "version": "6.7.4", "files": ["/package.json"] }, + { + "name": "vite", + "version": "8.1.3", + "files": [ + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-nuxt/package.json" + ] + }, + { + "name": "vitest", + "version": "4.1.10", + "files": [ + "/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-core/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-es-tasks/package.json", + "/packages/api-headless-cms-scheduler/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-workflows/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-scheduler-server/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-website-builder-scheduler/package.json", + "/packages/api-website-builder-workflows/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/package.json", + "/packages/db-dynamodb/package.json", + "/packages/db-utils/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/languages/package.json", + "/packages/lexical-converter/package.json", + "/packages/plugins/package.json", + "/packages/project-aws/package.json", + "/packages/project-utils/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/sdk/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/self-hosted-auth-sql/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/scripts/release/package.json", + "/packages/admin-ui/package.json", + "/packages/ai-powerups/package.json", + "/packages/api/package.json", + "/packages/api-aco/package.json", + "/packages/api-aco-sql/package.json", + "/packages/api-audit-logs/package.json", + "/packages/api-core/package.json", + "/packages/api-core-sql/package.json", + "/packages/api-elasticsearch-tasks/package.json", + "/packages/api-event-handler-aws/package.json", + "/packages/api-event-handler-aws-ddb/package.json", + "/packages/api-event-handler-aws-ddb-os/package.json", + "/packages/api-event-handler-core/package.json", + "/packages/api-event-handler-server/package.json", + "/packages/api-event-handler-server-sql/package.json", + "/packages/api-file-manager-aco/package.json", + "/packages/api-file-manager-s3/package.json", + "/packages/api-file-manager-server/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms-bulk-actions/package.json", + "/packages/api-headless-cms-ddb/package.json", + "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-es-tasks/package.json", + "/packages/api-headless-cms-scheduler/package.json", + "/packages/api-headless-cms-sql/package.json", + "/packages/api-headless-cms-storage/package.json", + "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-workflows/package.json", + "/packages/api-mailer/package.json", + "/packages/api-opensearch/package.json", + "/packages/api-record-locking/package.json", + "/packages/api-scheduler/package.json", + "/packages/api-scheduler-aws/package.json", + "/packages/api-scheduler-server/package.json", + "/packages/api-sync-system/package.json", + "/packages/api-website-builder/package.json", + "/packages/api-website-builder-scheduler/package.json", + "/packages/api-website-builder-workflows/package.json", + "/packages/api-websockets/package.json", + "/packages/api-websockets-aws/package.json", + "/packages/api-websockets-ddb/package.json", + "/packages/api-websockets-server/package.json", + "/packages/api-websockets-sql/package.json", + "/packages/api-workflows/package.json", + "/packages/app/package.json", + "/packages/app-aco/package.json", + "/packages/app-admin/package.json", + "/packages/app-file-manager/package.json", + "/packages/app-headless-cms/package.json", + "/packages/app-website-builder/package.json", + "/packages/background-tasks/package.json", + "/packages/background-tasks-aws/package.json", + "/packages/background-tasks-server/package.json", + "/packages/cognito/package.json", + "/packages/create-webiny-project/package.json", + "/packages/db-dynamodb/package.json", + "/packages/db-utils/package.json", + "/packages/event-handler-aws/package.json", + "/packages/event-handler-core/package.json", + "/packages/event-handler-server/package.json", + "/packages/form/package.json", + "/packages/handler/package.json", + "/packages/handler-aws/package.json", + "/packages/handler-graphql/package.json", + "/packages/i18n/package.json", + "/packages/languages/package.json", + "/packages/lexical-converter/package.json", + "/packages/plugins/package.json", + "/packages/project-aws/package.json", + "/packages/project-utils/package.json", + "/packages/react-composition/package.json", + "/packages/react-properties/package.json", + "/packages/react-rich-text-lexical-renderer/package.json", + "/packages/sdk/package.json", + "/packages/self-hosted-auth/package.json", + "/packages/self-hosted-auth-sql/package.json", + "/packages/utils/package.json", + "/packages/validation/package.json", + "/packages/webhooks/package.json", + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-react/package.json", + "/packages/website-builder-sdk/package.json", + "/scripts/release/package.json" + ] + }, + { + "name": "vue", + "version": "3.5.39", + "files": [ + "/packages/website-builder-nuxt/package.json", + "/packages/website-builder-nuxt/package.json" + ] + }, + { + "name": "webpack", + "version": "5.108.4", + "files": [ + "/packages/website-builder-nextjs/package.json", + "/packages/website-builder-nextjs/package.json" + ] + }, + { + "name": "write-json-file", + "version": "7.0.0", + "files": [ + "/package.json", + "/packages/api-headless-cms/package.json", + "/packages/api-headless-cms/package.json" + ] + }, + { + "name": "yargs", + "version": "18.0.0", + "files": [ + "/package.json", + "/packages/project-utils/package.json", + "/packages/project-utils/package.json" + ] + } + ], + "peerDependencies": [ + { + "name": "aws-lambda", + "version": "1.0.7", + "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] + }, + { + "name": "react", + "version": "18.3.1", + "files": [ + "/packages/app-audit-logs/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json", + "/packages/app-audit-logs/package.json", + "/packages/form/package.json", + "/packages/i18n/package.json", + "/packages/i18n-react/package.json" + ] + } + ], + "resolutions": [ + { "name": "@graphql-tools/merge", "version": "9.1.11", "files": ["/package.json"] }, + { "name": "@graphql-tools/schema", "version": "10.0.35", "files": ["/package.json"] }, + { "name": "@graphql-tools/utils", "version": "11.2.0", "files": ["/package.json"] }, + { "name": "@types/react", "version": "18.3.31", "files": ["/package.json"] }, + { "name": "@types/react-dom", "version": "18.3.7", "files": ["/package.json"] }, + { "name": "react", "version": "18.3.1", "files": ["/package.json"] }, + { "name": "react-dom", "version": "18.3.1", "files": ["/package.json"] } + ], + "references": [ + { + "name": "@types/hoist-non-react-statics", + "versions": [ + { "version": "3.3.7", "files": [{ "file": "/package.json", "types": ["dependencies"] }] } + ] + }, + { + "name": "jwt-decode", + "versions": [ + { "version": "4.0.0", "files": [{ "file": "/package.json", "types": ["dependencies"] }] } + ] + }, + { + "name": "@babel/code-frame", + "versions": [ + { + "version": "8.0.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@commitlint/cli", + "versions": [ + { + "version": "21.2.0", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@commitlint/config-conventional", + "versions": [ + { + "version": "21.2.0", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@grpc/grpc-js", + "versions": [ + { + "version": "1.14.4", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@lexical/code", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/hashtag", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/headless", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/history", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/html", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/list", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/mark", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/overflow", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/react", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/rich-text", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/selection", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/text", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@lexical/utils", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@octokit/rest", + "versions": [ + { + "version": "22.0.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/fs-extra", + "versions": [ + { + "version": "11.0.4", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/node", + "versions": [ + { + "version": "24.13.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "@types/react", + "versions": [ + { + "version": "18.3.31", + "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-common/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@types/react-dom", + "versions": [ + { + "version": "18.3.7", + "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "@vitest/coverage-v8", + "versions": [ + { + "version": "4.1.10", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "adio", + "versions": [ + { "version": "3.0.1", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "chalk", + "versions": [ + { + "version": "5.6.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-layers/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "cross-env", + "versions": [ + { + "version": "10.1.0", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "deepmerge", + "versions": [ + { + "version": "4.3.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "execa", + "versions": [ + { + "version": "9.6.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "fast-glob", + "versions": [ + { + "version": "3.3.3", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "fs-extra", + "versions": [ + { + "version": "11.3.6", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "get-yarn-workspaces", + "versions": [ + { + "version": "1.0.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "github-actions-wac", + "versions": [ + { "version": "2.0.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "graphql", + "versions": [ + { + "version": "16.14.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms/package.json", + "types": ["dependencies", "devDependencies"] + }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-bulk-actions/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "husky", + "versions": [ + { "version": "9.1.7", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "inquirer", + "versions": [ + { + "version": "14.0.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "jest-extended", + "versions": [ + { "version": "7.0.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "lexical", + "versions": [ + { + "version": "0.46.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-theme/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "load-json-file", + "versions": [ + { + "version": "7.0.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/telemetry/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "lodash", + "versions": [ + { + "version": "4.18.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["dependencies"] }, + { + "file": "/packages/api-headless-cms-storage/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/validation/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "minimatch", + "versions": [ + { + "version": "10.2.5", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "nanoid", + "versions": [ + { + "version": "5.1.16", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "next", + "versions": [ + { + "version": "16.2.10", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "oxfmt", + "versions": [ + { + "version": "0.58.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "oxlint", + "versions": [ + { + "version": "1.73.0", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "react", + "versions": [ + { + "version": "18.3.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-websockets/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["dependencies"] + }, + { "file": "/packages/form/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws-template/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server-template/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-dom", + "versions": [ + { + "version": "18.3.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-websockets/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["dependencies"] + }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "semver", + "versions": [ + { + "version": "7.8.5", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "ts-expect", + "versions": [ + { "version": "1.3.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "tsx", + "versions": [ + { + "version": "4.23.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "type-fest", + "versions": [ + { + "version": "5.8.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-websockets/package.json", + "types": ["dependencies", "devDependencies"] + }, + { + "file": "/packages/api-websockets-aws/package.json", + "types": ["dependencies", "devDependencies"] + }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/db/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "typescript", + "versions": [ + { + "version": "7.0.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-background-tasks-ddb/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-background-tasks-os/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-dynamodb-to-elasticsearch/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-core/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-file-manager-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-bulk-actions/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-es-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-scheduler/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-storage/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-tasks-ddb-es/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-website-builder-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-website-builder-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-graphql-playground/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-headless-cms-common/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/create-webiny-project/_templates/base/template.package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/error/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/shared-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/wcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/website-builder-react/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["devDependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "validator", + "versions": [ + { + "version": "13.15.35", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "verdaccio", + "versions": [ + { "version": "6.7.4", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "vitest", + "versions": [ + { + "version": "4.1.10", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-core/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-file-manager-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["dependencies"] }, + { + "file": "/packages/api-headless-cms-bulk-actions/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-es-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-scheduler/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-storage/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-headless-cms-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-website-builder-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-website-builder-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/cognito/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/create-webiny-project/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/website-builder-react/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "write-json-file", + "versions": [ + { + "version": "7.0.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "yargs", + "versions": [ + { + "version": "18.0.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/merge", + "versions": [ + { + "version": "9.1.11", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/schema", + "versions": [ + { + "version": "10.0.35", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/utils", + "versions": [ + { + "version": "11.2.0", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/fontawesome-svg-core", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/react-fontawesome", + "versions": [ + { + "version": "3.3.1", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + } + ] + } + ] + }, + { + "name": "@minoru/react-dnd-treeview", + "versions": [ + { + "version": "3.5.4", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@monaco-editor/react", + "versions": [ + { + "version": "4.7.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@radix-ui/react-scroll-area", + "versions": [ + { + "version": "1.2.14", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@tanstack/react-table", + "versions": [ + { + "version": "8.21.3", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "bytes", + "versions": [ + { + "version": "3.1.2", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "class-variance-authority", + "versions": [ + { + "version": "0.7.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "clsx", + "versions": [ + { + "version": "2.1.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "cmdk", + "versions": [ + { + "version": "1.1.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "date-fns", + "versions": [ + { + "version": "4.4.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { + "file": "/packages/api-headless-cms-storage/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "mobx", + "versions": [ + { + "version": "6.16.1", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "monaco-editor", + "versions": [ + { + "version": "0.53.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "radix-ui", + "versions": [ + { + "version": "1.6.2", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-color", + "versions": [ + { + "version": "2.19.3", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-custom-scrollbars", + "versions": [ + { + "version": "4.2.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-day-picker", + "versions": [ + { + "version": "10.0.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-dnd", + "versions": [ + { + "version": "16.0.1", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-virtualized", + "versions": [ + { + "version": "9.22.6", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "sonner", + "versions": [ + { + "version": "2.0.7", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "tailwind-merge", + "versions": [ + { + "version": "3.6.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "tailwindcss", + "versions": [ + { + "version": "4.3.2", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "tw-animate-css", + "versions": [ + { + "version": "1.4.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@fortawesome/free-solid-svg-icons", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@rsbuild/core", + "versions": [ + { + "version": "2.1.4", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@rsbuild/plugin-svgr", + "versions": [ + { + "version": "2.0.5", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@storybook/addon-a11y", + "versions": [ + { + "version": "10.4.6", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@storybook/addon-docs", + "versions": [ + { + "version": "10.4.6", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@storybook/react", + "versions": [ + { + "version": "10.4.6", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@tailwindcss/postcss", + "versions": [ + { + "version": "4.3.2", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/react-color", + "versions": [ + { + "version": "3.0.13", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/lexical-editor-actions/package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "@types/react-custom-scrollbars", + "versions": [ + { + "version": "4.0.13", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/react-virtualized", + "versions": [ + { + "version": "9.22.3", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "rimraf", + "versions": [ + { + "version": "6.1.3", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-background-tasks-ddb/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-background-tasks-os/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-core/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-file-manager-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-graphql-playground/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-headless-cms-common/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["devDependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/app-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/error/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/wcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "sass", + "versions": [ + { + "version": "1.101.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "storybook", + "versions": [ + { + "version": "10.4.6", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "storybook-react-rsbuild", + "versions": [ + { + "version": "3.3.4", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "ai", + "versions": [ + { + "version": "7.0.16", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "front-matter", + "versions": [ + { + "version": "4.0.2", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "mobx-react-lite", + "versions": [ + { + "version": "4.1.1", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "zod", + "versions": [ + { + "version": "4.4.3", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "knex", + "versions": [ + { + "version": "3.3.0", + "files": [ + { "file": "/packages/api-aco-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["dependencies"] }, + { + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server-template/package.json", "types": ["dependencies"] }, + { + "file": "/packages/project-server-template/template/appTemplates/api/graphql/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/self-hosted-auth-sql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "better-sqlite3", + "versions": [ + { + "version": "12.11.1", + "files": [ + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/project-server-template/template/appTemplates/api/graphql/package.json", + "types": ["dependencies"] + } + ] + } + ] + }, + { + "name": "@ai-sdk/anthropic", + "versions": [ + { + "version": "4.0.8", + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@ai-sdk/openai", + "versions": [ + { + "version": "4.0.8", + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "dataloader", + "versions": [ + { + "version": "2.2.3", + "files": [ + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "jose", + "versions": [ + { + "version": "6.2.3", + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "jsonwebtoken", + "versions": [ + { + "version": "9.0.3", + "files": [ + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "pino", + "versions": [ + { + "version": "10.3.1", + "files": [ + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "pino-lambda", + "versions": [ + { + "version": "4.4.1", + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/jsonwebtoken", + "versions": [ + { + "version": "9.0.10", + "files": [ + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "jest-dynalite", + "versions": [ + { + "version": "3.6.1", + "files": [ + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "p-retry", + "versions": [ + { + "version": "8.0.0", + "files": [ + { + "file": "/packages/api-dynamodb-to-elasticsearch/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "cache-control-parser", + "versions": [ + { + "version": "2.2.0", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "mime", + "versions": [ + { + "version": "4.1.0", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "object-hash", + "versions": [ + { + "version": "3.0.0", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "p-reduce", + "versions": [ + { + "version": "3.0.0", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "sanitize-filename", + "versions": [ + { + "version": "1.6.4", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/object-hash", + "versions": [ + { + "version": "3.0.6", + "files": [ + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "exifreader", + "versions": [ + { + "version": "4.41.0", + "files": [ + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-server/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "p-map", + "versions": [ + { + "version": "7.0.5", + "files": [ + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "sharp", + "versions": [ + { + "version": "0.35.3", + "files": [ + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-server/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "dot-prop-immutable", + "versions": [ + { + "version": "2.1.1", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "graphql-tag", + "versions": [ + { + "version": "2.12.7", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "pluralize", + "versions": [ + { + "version": "8.0.0", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "slugify", + "versions": [ + { + "version": "1.6.9", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/pluralize", + "versions": [ + { + "version": "0.0.33", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "apollo-graphql", + "versions": [ + { + "version": "0.9.7", + "files": [ + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@types/jsonpack", + "versions": [ + { + "version": "1.1.6", + "files": [ + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "dot-prop", + "versions": [ + { + "version": "10.1.0", + "files": [ + { + "file": "/packages/api-headless-cms-storage/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "email-addresses", + "versions": [ + { + "version": "5.0.0", + "files": [ + { "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "nodemailer", + "versions": [ + { + "version": "9.0.3", + "files": [{ "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/nodemailer", + "versions": [ + { + "version": "8.0.1", + "files": [{ "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@opensearch-project/opensearch", + "versions": [ + { + "version": "3.6.0", + "files": [{ "file": "/packages/api-opensearch/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "aws-sdk-client-mock", + "versions": [ + { + "version": "4.1.0", + "files": [ + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "bree", + "versions": [ + { + "version": "9.2.9", + "files": [ + { "file": "/packages/api-scheduler-server/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@faker-js/faker", + "versions": [ + { + "version": "10.5.0", + "files": [ + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@types/lodash", + "versions": [ + { + "version": "4.17.24", + "files": [ + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "ws", + "versions": [ + { + "version": "8.21.0", + "files": [ + { "file": "/packages/api-websockets-server/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/ws", + "versions": [ + { + "version": "8.18.1", + "files": [ + { "file": "/packages/api-websockets-server/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@emotion/styled", + "versions": [ + { + "version": "11.14.1", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "apollo-cache", + "versions": [ + { + "version": "1.3.5", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "apollo-cache-inmemory", + "versions": [ + { + "version": "1.6.6", + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "apollo-client", + "versions": [ + { + "version": "2.6.10", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "apollo-link", + "versions": [ + { + "version": "1.2.14", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "apollo-link-context", + "versions": [ + { + "version": "1.0.20", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "apollo-link-error", + "versions": [ + { + "version": "1.1.13", + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "apollo-link-http-common", + "versions": [ + { + "version": "0.2.16", + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "apollo-utilities", + "versions": [ + { + "version": "1.3.4", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "history", + "versions": [ + { + "version": "5.3.0", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "invariant", + "versions": [ + { + "version": "2.2.4", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "ts-invariant", + "versions": [ + { + "version": "0.10.3", + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "warning", + "versions": [ + { + "version": "4.0.3", + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/warning", + "versions": [ + { + "version": "3.0.4", + "files": [{ "file": "/packages/app/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@apollo/react-components", + "versions": [ + { + "version": "3.1.5", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@apollo/react-hooks", + "versions": [ + { + "version": "3.1.5", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@emotion/css", + "versions": [ + { + "version": "11.13.5", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@emotion/react", + "versions": [ + { + "version": "11.14.0", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "@iconify/json", + "versions": [ + { + "version": "2.2.497", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "classnames", + "versions": [ + { + "version": "2.5.1", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "is-hotkey", + "versions": [ + { + "version": "0.2.0", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "markdown-to-jsx", + "versions": [ + { + "version": "9.8.2", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-resizable-panels", + "versions": [ + { + "version": "4.12.1", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-transition-group", + "versions": [ + { + "version": "4.4.5", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "reset-css", + "versions": [ + { + "version": "5.0.2", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "tinycolor2", + "versions": [ + { + "version": "1.6.0", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "unicode-emoji-json", + "versions": [ + { + "version": "0.9.0", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@testing-library/react", + "versions": [ + { + "version": "16.3.2", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "@types/bytes", + "versions": [ + { + "version": "3.1.5", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/graphlib", + "versions": [ + { + "version": "2.1.12", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/is-hotkey", + "versions": [ + { + "version": "0.1.10", + "files": [ + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@types/react-resizable", + "versions": [ + { + "version": "4.0.0", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/react-transition-group", + "versions": [ + { + "version": "4.4.12", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/store", + "versions": [ + { + "version": "2.0.5", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/tinycolor2", + "versions": [ + { + "version": "1.4.6", + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "react-helmet", + "versions": [ + { + "version": "6.1.0", + "files": [ + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["dependencies"] + }, + { + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["dependencies"] + }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/react-helmet", + "versions": [ + { + "version": "6.1.11", + "files": [{ "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "dayjs", + "versions": [ + { + "version": "1.11.21", + "files": [ + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-lazy-load", + "versions": [ + { + "version": "4.0.1", + "files": [ + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "load-script", + "versions": [ + { + "version": "2.0.0", + "files": [ + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/fontawesome-common-types", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/free-brands-svg-icons", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/free-regular-svg-icons", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "react-dnd-html5-backend", + "versions": [ + { + "version": "16.0.1", + "files": [ + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "use-deep-compare-effect", + "versions": [ + { + "version": "1.8.1", + "files": [ + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "dnd-core", + "versions": [ + { + "version": "16.0.1", + "files": [ + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@material-design-icons/svg", + "versions": [ + { + "version": "0.14.15", + "files": [ + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/icons/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "apollo-link-batch-http", + "versions": [ + { + "version": "1.2.14", + "files": [ + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "deep-equal", + "versions": [ + { + "version": "2.2.3", + "files": [ + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "matcher", + "versions": [ + { + "version": "6.0.0", + "files": [ + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/deep-equal", + "versions": [ + { + "version": "1.0.4", + "files": [ + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@auth0/auth0-spa-js", + "versions": [ + { + "version": "2.23.0", + "files": [{ "file": "/packages/auth0/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/jwk-to-pem", + "versions": [ + { + "version": "2.0.3", + "files": [ + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@aws-sdk/client-apigatewaymanagementapi", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-cloudfront", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-cloudwatch-events", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-cloudwatch-logs", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-cognito-identity-provider", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-dynamodb", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-dynamodb-streams", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-eventbridge", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-iam", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-iot", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-lambda", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-s3", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-scheduler", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-sfn", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-sqs", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/client-sts", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/credential-providers", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/lib-dynamodb", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/lib-storage", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/s3-presigned-post", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/s3-request-presigner", + "versions": [ + { + "version": "3.1080.0", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@aws-sdk/util-dynamodb", + "versions": [ + { + "version": "3.996.5", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/aws-lambda", + "versions": [ + { + "version": "8.10.162", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "aws-lambda", + "versions": [ + { + "version": "1.0.7", + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["peerDependencies"] }] + } + ] + }, + { + "name": "object-merge-advanced", + "versions": [ + { + "version": "14.1.3", + "files": [ + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "object-sizeof", + "versions": [ + { + "version": "2.6.5", + "files": [ + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@rsbuild/plugin-react", + "versions": [ + { + "version": "2.1.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@rsbuild/plugin-sass", + "versions": [ + { + "version": "2.0.1", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@rsbuild/plugin-type-check", + "versions": [ + { + "version": "1.5.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@rsdoctor/rspack-plugin", + "versions": [ + { + "version": "1.5.17", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@rslib/core", + "versions": [ + { + "version": "0.23.2", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@rspack/core", + "versions": [ + { + "version": "2.1.2", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@swc/plugin-emotion", + "versions": [ + { + "version": "14.15.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "css-loader", + "versions": [ + { + "version": "7.1.4", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "find-up", + "versions": [ + { + "version": "8.0.0", + "files": [ + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "postcss-loader", + "versions": [ + { + "version": "8.2.1", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "raw-loader", + "versions": [ + { + "version": "4.0.2", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-refresh", + "versions": [ + { + "version": "0.18.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "sass-loader", + "versions": [ + { + "version": "17.0.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "strip-json-comments", + "versions": [ + { + "version": "5.0.3", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "style-loader", + "versions": [ + { + "version": "4.0.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "ts-morph", + "versions": [ + { + "version": "28.0.0", + "files": [ + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }, + { "file": "/scripts/generateSkills/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "url-loader", + "versions": [ + { + "version": "4.1.1", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "utf-8-validate", + "versions": [ + { + "version": "6.0.6", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "open", + "versions": [ + { + "version": "11.0.0", + "files": [ + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "ora", + "versions": [ + { + "version": "9.4.1", + "files": [ + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "ci-info", + "versions": [ + { + "version": "4.4.0", + "files": [ + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/telemetry/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "humanize-duration", + "versions": [ + { + "version": "3.34.0", + "files": [ + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "pino-pretty", + "versions": [ + { + "version": "13.1.3", + "files": [ + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "aws-amplify", + "versions": [ + { + "version": "6.18.0", + "files": [{ "file": "/packages/cognito/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "js-yaml", + "versions": [ + { + "version": "5.2.1", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "listr2", + "versions": [ + { + "version": "10.2.2", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "os", + "versions": [ + { + "version": "0.1.2", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "validate-npm-package-name", + "versions": [ + { + "version": "8.0.0", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "yesno", + "versions": [ + { + "version": "0.4.0", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/js-yaml", + "versions": [ + { + "version": "4.0.9", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@types/validate-npm-package-name", + "versions": [ + { + "version": "4.0.2", + "files": [ + { "file": "/packages/create-webiny-project/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "dynamodb-toolbox", + "versions": [ + { + "version": "0.9.5", + "files": [{ "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/is-number", + "versions": [ + { + "version": "7.0.5", + "files": [{ "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "fuse.js", + "versions": [ + { + "version": "7.4.2", + "files": [{ "file": "/packages/db-utils/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/uniqid", + "versions": [ + { + "version": "5.3.4", + "files": [ + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@testing-library/user-event", + "versions": [ + { + "version": "14.6.1", + "files": [{ "file": "/packages/form/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/invariant", + "versions": [ + { + "version": "2.2.37", + "files": [{ "file": "/packages/form/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@graphql-tools/resolvers-composition", + "versions": [ + { + "version": "7.0.33", + "files": [{ "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "graphql-scalars", + "versions": [ + { + "version": "1.25.0", + "files": [{ "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "accounting", + "versions": [ + { + "version": "0.4.1", + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "fecha", + "versions": [ + { + "version": "4.2.3", + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "ohash", + "versions": [ + { + "version": "2.0.11", + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/accounting", + "versions": [ + { + "version": "0.4.5", + "files": [{ "file": "/packages/i18n/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "cheerio", + "versions": [ + { + "version": "1.2.0", + "files": [ + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "jsdom", + "versions": [ + { + "version": "29.1.1", + "files": [ + { "file": "/packages/lexical-converter/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/prismjs", + "versions": [ + { + "version": "1.26.6", + "files": [{ "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@modelcontextprotocol/sdk", + "versions": [ + { + "version": "1.29.0", + "files": [{ "file": "/packages/mcp/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/ncp", + "versions": [ + { + "version": "2.0.8", + "files": [ + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "@okta/okta-auth-js", + "versions": [ + { + "version": "8.0.1", + "files": [{ "file": "/packages/okta/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "uniqid", + "versions": [ + { + "version": "5.4.0", + "files": [ + { "file": "/packages/plugins/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "chokidar", + "versions": [ + { + "version": "5.0.0", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "debounce", + "versions": [ + { + "version": "3.0.0", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "dotenv", + "versions": [ + { + "version": "17.4.2", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "exit-hook", + "versions": [ + { + "version": "5.1.0", + "files": [ + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "get-tsconfig", + "versions": [ + { + "version": "4.14.0", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "graphql-request", + "versions": [ + { + "version": "7.4.0", + "files": [ + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "mqtt", + "versions": [ + { + "version": "5.15.2", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "neverthrow", + "versions": [ + { + "version": "8.2.0", + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "serialize-error", + "versions": [ + { + "version": "13.0.1", + "files": [ + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/debounce", + "versions": [ + { + "version": "1.2.4", + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/humanize-duration", + "versions": [ + { + "version": "3.27.4", + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/jsdom", + "versions": [ + { + "version": "28.0.3", + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@pulumi/aws", + "versions": [ + { + "version": "7.35.0", + "files": [ + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@pulumi/pulumi", + "versions": [ + { + "version": "3.250.0", + "files": [ + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@pulumi/random", + "versions": [ + { + "version": "4.21.0", + "files": [{ "file": "/packages/project-aws/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "replace-in-path", + "versions": [ + { + "version": "1.1.0", + "files": [ + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "decompress", + "versions": [ + { + "version": "4.2.1", + "files": [{ "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "tar", + "versions": [ + { + "version": "7.5.19", + "files": [{ "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "standardwebhooks", + "versions": [ + { + "version": "1.0.0", + "files": [ + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "cli-table3", + "versions": [ + { + "version": "0.6.5", + "files": [ + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "jsesc", + "versions": [ + { + "version": "3.1.0", + "files": [{ "file": "/packages/telemetry/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "strip-ansi", + "versions": [ + { + "version": "7.2.0", + "files": [{ "file": "/packages/telemetry/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@noble/hashes", + "versions": [ + { + "version": "2.2.0", + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "bson-objectid", + "versions": [ + { + "version": "2.0.4", + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "jsonpack", + "versions": [ + { + "version": "1.1.5", + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "nanoid-dictionary", + "versions": [ + { + "version": "5.0.0", + "files": [ + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "postcss", + "versions": [ + { + "version": "8.5.16", + "files": [ + { "file": "/packages/website-builder-nextjs/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "postcss-import", + "versions": [ + { + "version": "16.1.1", + "files": [ + { "file": "/packages/website-builder-nextjs/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@types/postcss-import", + "versions": [ + { + "version": "14.0.3", + "files": [ + { + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "webpack", + "versions": [ + { + "version": "5.108.4", + "files": [ + { + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] + } + ] + } + ] + }, + { + "name": "vite", + "versions": [ + { + "version": "8.1.3", + "files": [ + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "vue", + "versions": [ + { + "version": "3.5.39", + "files": [ + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "csstype", + "versions": [ + { + "version": "3.2.3", + "files": [ + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "fast-json-patch", + "versions": [ + { + "version": "3.1.1", + "files": [ + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "fast-json-stable-stringify", + "versions": [ + { + "version": "2.1.0", + "files": [ + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@4tw/cypress-drag-drop", + "versions": [ + { + "version": "2.3.1", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@testing-library/cypress", + "versions": [ + { + "version": "10.1.3", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "amazon-cognito-identity-js", + "versions": [ + { + "version": "6.3.20", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "cypress", + "versions": [ + { + "version": "15.18.0", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "cypress-image-snapshot", + "versions": [ + { + "version": "4.0.1", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "cypress-mailosaur", + "versions": [ + { + "version": "5.0.0", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "cypress-wait-until", + "versions": [ + { + "version": "3.0.2", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "del", + "versions": [ + { + "version": "8.0.1", + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "node-notifier", + "versions": [ + { + "version": "10.0.1", + "files": [{ "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/yargs", + "versions": [ + { + "version": "17.0.35", + "files": [ + { "file": "/scripts/buildPackages/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "cli-progress", + "versions": [ + { + "version": "3.12.0", + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "p-limit", + "versions": [ + { + "version": "7.3.0", + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@types/cli-progress", + "versions": [ + { + "version": "3.11.6", + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["devDependencies"] }] + } + ] + } + ] +} From 81dd07a343100f136d9c1c4ef422aa3b39e8baa9 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Sat, 11 Jul 2026 10:06:03 +0200 Subject: [PATCH 19/31] refactor: convert website-builder off ContextPlugin to DI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebsiteBuilderFeature now registers all page/redirect/nextjs/nuxt features, the static WB GraphQL (CoreGraphQLSchemaFactory), and a RequestContextInitializer for per-request Page/Redirect model resolution — dropping the legacy createWebsiteBuilder/createContext ContextPlugins + the bridge. setupWebsite- BuilderModels kept for the REST route (all-transport, pre-routing) path. Migrated the wb / wb-scheduler / wb-workflows test harnesses. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/__mocks/context/useHandler.ts | 9 +- .../__tests__/wbPageSystem.test.ts | 10 +- .../__tests__/utils/useGraphQlHandler.ts | 12 +- .../__tests__/utils/useHandler.ts | 13 +- .../src/WebsiteBuilderFeature.ts | 134 +++++++++++++++--- .../src/graphql/createGraphQL.ts | 61 ++++---- packages/api-website-builder/src/index.ts | 118 --------------- 7 files changed, 154 insertions(+), 203 deletions(-) diff --git a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts index 570f4663a11..4c0ac0bee9a 100644 --- a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts +++ b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts @@ -5,9 +5,7 @@ import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import { WebsiteBuilderSchedulerFeature } from "~/WebsiteBuilderSchedulerFeature.js"; import { SchedulerFeature, SchedulerService } from "@webiny/api-scheduler"; import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js"; -import { PageModelPlugin } from "@webiny/api-website-builder/domain/page/page.model.js"; -import { RedirectModelPlugin } from "@webiny/api-website-builder/domain/redirect/redirect.model.js"; -import { createWebsiteBuilder } from "@webiny/api-website-builder"; +import { WebsiteBuilderFeature } from "@webiny/api-website-builder"; import { registerMockBackgroundTasks } from "../mockBackgroundTasks.js"; type Params = Omit; @@ -15,11 +13,10 @@ type Params = Omit; export const useHandler = (params: Params = {}) => { const { getContext } = createCmsTestHandler({ ...params, - plugins: [createWebsiteBuilder(), ...[params.plugins].flat(Infinity as 1).filter(Boolean)], + plugins: [...[params.plugins].flat(Infinity as 1).filter(Boolean)], features: container => { registerMockBackgroundTasks(container); - container.register(PageModelPlugin); - container.register(RedirectModelPlugin); + WebsiteBuilderFeature.register(container); SchedulerFeature.register(container); WebsiteBuilderSchedulerFeature.register(container); container.registerInstance(SchedulerService, new VoidSchedulerService()); diff --git a/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts b/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts index 84051885421..0f2d3f51722 100644 --- a/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts +++ b/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts @@ -1,8 +1,6 @@ import { describe, expect, it } from "vitest"; import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import { createWebsiteBuilder } from "@webiny/api-website-builder"; -import { PageModelPlugin } from "@webiny/api-website-builder/domain/page/page.model.js"; -import { RedirectModelPlugin } from "@webiny/api-website-builder/domain/redirect/redirect.model.js"; +import { WebsiteBuilderFeature } from "@webiny/api-website-builder"; import { WebsiteBuilderWorkflowsFeature } from "~/index.js"; const WB_PAGE_FIELDS = /* GraphQL */ ` @@ -18,11 +16,9 @@ const WB_PAGE_FIELDS = /* GraphQL */ ` describe("WbPage.system workflow extension", () => { it("exposes `system` on WbPage when the workflows license is active", async () => { const { invoke } = createCmsTestHandler({ - // createWebsiteBuilder defines WbPage + CmsEntrySystem on the base /graphql schema. - plugins: [createWebsiteBuilder()], + // WebsiteBuilderFeature defines WbPage + CmsEntrySystem on the base /graphql schema. features: container => { - container.register(PageModelPlugin); - container.register(RedirectModelPlugin); + WebsiteBuilderFeature.register(container); WebsiteBuilderWorkflowsFeature.register(container); } }); diff --git a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts index 1501a68765c..53c046347a4 100644 --- a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts @@ -6,10 +6,8 @@ import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; import { createContextPlugin } from "@webiny/api"; import { InvalidateCloudfrontCacheTaskDefinition } from "@webiny/api-file-manager-s3/features/FlushCache/InvalidateCacheTask.js"; -import { createWebsiteBuilder } from "~/index.js"; +import { WebsiteBuilderFeature } from "~/index.js"; import { Extension as LanguagesExtension } from "@webiny/languages/api/Extension.js"; -import { PageModelPlugin } from "~/domain/page/page.model.js"; -import { RedirectModelPlugin } from "~/domain/redirect/redirect.model.js"; import { createWbSdk } from "~tests/utils/createWbSdk.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; @@ -27,15 +25,13 @@ export const useGraphQlHandler = (params: UseGQLHandlerParams = {}) => { createContextPlugin(ctx => { ctx.container.register(InvalidateCloudfrontCacheTaskDefinition); }), - createWebsiteBuilder(), ...[params.plugins].flat(Infinity as 1).filter(Boolean) ], features: container => { - // Background tasks are DI-native — the feature registers the "wbyTask" model at - // register() time (before WB/Languages cache the per-request model set). Mock override after. + // All DI-native now: background tasks (wbyTask model + TasksCrud + GraphQL) and website + // builder (models + features + schema). The mock TaskService override must come after. BackgroundTasksFeature.register(container); - container.register(PageModelPlugin); - container.register(RedirectModelPlugin); + WebsiteBuilderFeature.register(container); LanguagesExtension.register(container); container.registerInstance(TaskService, createMockTaskService()); } diff --git a/packages/api-website-builder/__tests__/utils/useHandler.ts b/packages/api-website-builder/__tests__/utils/useHandler.ts index fa67da735b0..d148aee8e61 100644 --- a/packages/api-website-builder/__tests__/utils/useHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useHandler.ts @@ -6,10 +6,8 @@ import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import { createContextPlugin } from "@webiny/api"; import { InvalidateCloudfrontCacheTaskDefinition } from "@webiny/api-file-manager-s3/features/FlushCache/InvalidateCacheTask.js"; -import { createWebsiteBuilder } from "~/index.js"; +import { WebsiteBuilderFeature } from "~/index.js"; import { Extension as LanguagesExtension } from "@webiny/languages/api/Extension.js"; -import { PageModelPlugin } from "~/domain/page/page.model.js"; -import { RedirectModelPlugin } from "~/domain/redirect/redirect.model.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; const DEFAULT_IDENTITY: IdentityData = { @@ -30,16 +28,13 @@ export const useHandler = (params: Params = {}) => { createContextPlugin(ctx => { ctx.container.register(InvalidateCloudfrontCacheTaskDefinition); }), - createWebsiteBuilder(), ...[params.plugins].flat(Infinity as 1).filter(Boolean) ], features: container => { - // Background tasks are DI-native — the feature registers the "wbyTask" CMS model at - // register() time (before WB/Languages cache the per-request model set) plus TasksCrud and - // the GraphQL contextual schema. The mock TaskService override must come after. + // All DI-native now: background tasks (wbyTask model + TasksCrud + GraphQL) and website + // builder (models + features + schema). The mock TaskService override must come after. BackgroundTasksFeature.register(container); - container.register(PageModelPlugin); - container.register(RedirectModelPlugin); + WebsiteBuilderFeature.register(container); LanguagesExtension.register(container); container.registerInstance(TaskService, createMockTaskService()); } diff --git a/packages/api-website-builder/src/WebsiteBuilderFeature.ts b/packages/api-website-builder/src/WebsiteBuilderFeature.ts index 1bb7bd79d07..5fc9c40bce9 100644 --- a/packages/api-website-builder/src/WebsiteBuilderFeature.ts +++ b/packages/api-website-builder/src/WebsiteBuilderFeature.ts @@ -1,5 +1,5 @@ import { type Container, createFeature } from "@webiny/feature/api"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; import { ModelBuilderFeature, ModelsProvider @@ -11,29 +11,59 @@ import { CmsWhereMapperFeature } from "@webiny/api-headless-cms/features/whereMa import { CmsSortMapperFeature } from "@webiny/api-headless-cms/features/sortMapper/feature.js"; import { CompressionFeature } from "@webiny/utils/features/compression/feature.js"; import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { createWebsiteBuilder } from "./index.js"; +import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; +import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; import { WebsiteBuilderRedirectsRoute } from "./rest/WebsiteBuilderRedirectsRoute.js"; -import { GetActiveRedirectsFeature } from "./features/redirects/GetActiveRedirects/feature.js"; +import { registerWebsiteBuilderGraphQL } from "./graphql/createGraphQL.js"; +// Redirects +import { GetRedirectByIdFeature } from "./features/redirects/GetRedirectById/feature.js"; import { ListRedirectsFeature } from "./features/redirects/ListRedirects/feature.js"; +import { GetActiveRedirectsFeature } from "./features/redirects/GetActiveRedirects/feature.js"; +import { CreateRedirectFeature } from "./features/redirects/CreateRedirect/feature.js"; +import { UpdateRedirectFeature } from "./features/redirects/UpdateRedirect/feature.js"; +import { DeleteRedirectFeature } from "./features/redirects/DeleteRedirect/feature.js"; +import { MoveRedirectFeature } from "./features/redirects/MoveRedirect/feature.js"; +import { InvalidateRedirectsCacheFeature } from "./features/redirects/InvalidateRedirectsCache/feature.js"; +// Pages +import { GetPageByIdFeature } from "./features/pages/GetPageById/feature.js"; +import { GetPageByPathFeature } from "./features/pages/GetPageByPath/feature.js"; +import { GetPageRevisionsFeature } from "./features/pages/GetPageRevisions/feature.js"; +import { GetDeletedPageByIdFeature } from "./features/pages/GetDeletedPageById/feature.js"; +import { GetPageLanguagePathsFeature } from "./features/pages/GetPageLanguagePaths/feature.js"; +import { ListPagesFeature } from "./features/pages/ListPages/feature.js"; +import { ListDeletedPagesFeature } from "./features/pages/ListDeletedPages/feature.js"; +import { CreatePageFeature } from "./features/pages/CreatePage/feature.js"; +import { CreatePageRevisionFromFeature } from "./features/pages/CreatePageRevisionFrom/feature.js"; +import { DeletePageFeature } from "./features/pages/DeletePage/feature.js"; +import { TrashPageFeature } from "./features/pages/TrashPage/feature.js"; +import { RestorePageFeature } from "./features/pages/RestorePage/feature.js"; +import { UpdatePageFeature } from "./features/pages/UpdatePage/feature.js"; +import { UpdatePageRevisionDescriptionFeature } from "./features/pages/UpdatePageRevisionDescription/feature.js"; +import { PublishPageFeature } from "./features/pages/PublishPage/feature.js"; +import { UnpublishPageFeature } from "./features/pages/UnpublishPage/feature.js"; +import { DuplicatePageFeature } from "./features/pages/DuplicatePage/feature.js"; +import { TranslatePageFeature } from "./features/pages/TranslatePage/feature.js"; +import { MovePageFeature } from "./features/pages/MovePage/feature.js"; +// Misc import { WbPermissionsFeature } from "./features/permissions/feature.js"; -import { PAGE_MODEL_ID } from "~/domain/page/page.model.js"; -import { REDIRECT_MODEL_ID } from "~/domain/redirect/redirect.model.js"; +import { ApiKeyInstallerFeature } from "./features/installer/feature.js"; +import { NextjsFeature } from "./features/nextjs/feature.js"; +import { NuxtFeature } from "./features/nuxt/feature.js"; +import { WbWebhooksFeature } from "./features/webhooks/feature.js"; +import { NextjsGraphQLSchema } from "./graphql/nextjs/NextjsGraphQLSchema.js"; +import { NuxtGraphQLSchema } from "./graphql/nuxt/NuxtGraphQLSchema.js"; +// Models +import { PAGE_MODEL_ID, PageModelPlugin } from "~/domain/page/page.model.js"; +import { REDIRECT_MODEL_ID, RedirectModelPlugin } from "~/domain/redirect/redirect.model.js"; import { PageModel } from "~/domain/page/abstractions.js"; import { RedirectModel } from "~/domain/redirect/abstractions.js"; -import { PageModelPlugin } from "~/domain/page/page.model.js"; -import { RedirectModelPlugin } from "~/domain/redirect/redirect.model.js"; export const WebsiteBuilderFeature = createFeature({ name: "WebsiteBuilder", register(container: Container) { - WbPermissionsFeature.register(container); - ListRedirectsFeature.register(container); - GetActiveRedirectsFeature.register(container); - container.register(WebsiteBuilderRedirectsRoute); - - // Register CMS features needed by the redirect REST route (before the CMS schema builds). - // When the CMS contextual schema (HeadlessCmsInitializer.build()) runs for GraphQL requests, - // it will overwrite StorageOperations/AccessControl with full-context versions (last-wins). + // CMS features needed by the redirect REST route (before the CMS schema builds). When the CMS + // contextual schema runs for GraphQL requests it overwrites StorageOperations/AccessControl + // with full-context versions (last-wins). CompressionFeature.register(container); StorageFeature.register(container); ModelBuilderFeature.register(container); @@ -42,11 +72,75 @@ export const WebsiteBuilderFeature = createFeature({ CmsWhereMapperFeature.register(container); CmsSortMapperFeature.register(container); - // Register WB model factories so ModelsProvider can build CmsModel instances. + // WB model factories so ModelsProvider can build CmsModel instances. container.register(PageModelPlugin); container.register(RedirectModelPlugin); - registerLegacyPluginsViaGqlContextualSchema(container, createWebsiteBuilder()); + // Permissions. + WbPermissionsFeature.register(container); + + // Redirect features + REST route. + GetRedirectByIdFeature.register(container); + ListRedirectsFeature.register(container); + GetActiveRedirectsFeature.register(container); + CreateRedirectFeature.register(container); + UpdateRedirectFeature.register(container); + DeleteRedirectFeature.register(container); + MoveRedirectFeature.register(container); + InvalidateRedirectsCacheFeature.register(container); + container.register(WebsiteBuilderRedirectsRoute); + + // Page features. + GetPageByIdFeature.register(container); + GetPageByPathFeature.register(container); + GetPageRevisionsFeature.register(container); + GetDeletedPageByIdFeature.register(container); + GetPageLanguagePathsFeature.register(container); + ListPagesFeature.register(container); + ListDeletedPagesFeature.register(container); + CreatePageFeature.register(container); + CreatePageRevisionFromFeature.register(container); + DeletePageFeature.register(container); + TrashPageFeature.register(container); + RestorePageFeature.register(container); + UpdatePageFeature.register(container); + UpdatePageRevisionDescriptionFeature.register(container); + PublishPageFeature.register(container); + UnpublishPageFeature.register(container); + DuplicatePageFeature.register(container); + TranslatePageFeature.register(container); + MovePageFeature.register(container); + + // Misc features + framework GraphQL (Next.js / Nuxt). + ApiKeyInstallerFeature.register(container); + NextjsFeature.register(container); + NuxtFeature.register(container); + WbWebhooksFeature.register(container); + container.register(NextjsGraphQLSchema); + container.register(NuxtGraphQLSchema); + + // Static WB GraphQL schema (base + pages + redirects). + registerWebsiteBuilderGraphQL(container); + + // Per-request resolution of the WB CmsModel instances (Page/Redirect) for the GraphQL path. + // The REST route path uses setupWebsiteBuilderModels() (runs for all transports, pre-routing). + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const requestContainer = ctx.container as Container; + const identityContext = requestContainer.resolve(IdentityContext); + const getModel = requestContainer.resolve(GetModelUseCase); + + await identityContext.withoutAuthorization(async () => { + const [pageModel, redirectModel] = await Promise.all([ + getModel.execute(PAGE_MODEL_ID), + getModel.execute(REDIRECT_MODEL_ID) + ]); + + requestContainer.registerInstance(PageModel, pageModel.value); + requestContainer.registerInstance(RedirectModel, redirectModel.value); + }); + } + }); } }); @@ -55,12 +149,10 @@ export const WebsiteBuilderFeature = createFeature({ * exposes them by token for the redirect REST route + page features. Must run in the `request` * callback after WebsiteBuilderFeature.register() and HeadlessCmsFeature.register(). * - * Storage operations, AccessControl, the entry transforms and SearchableFieldsProvider are now - * provided by HeadlessCmsFeature.register() for every event, so WB no longer builds its own - * (which previously meant a permissive AccessControl stub that shadowed the real one). + * Storage operations, AccessControl, the entry transforms and SearchableFieldsProvider are provided + * by HeadlessCmsFeature.register() for every event, so WB no longer builds its own. */ export async function setupWebsiteBuilderModels(container: Container): Promise { - // Build the WB CmsModel instances from the registered ModelFactory plugins. const modelsProvider = container.resolve(ModelsProvider); const tenantCtx = container.resolve(TenantContext); // getTenant() is typed non-null but returns null before the tenant is set during routing; diff --git a/packages/api-website-builder/src/graphql/createGraphQL.ts b/packages/api-website-builder/src/graphql/createGraphQL.ts index 6a9f8ab8ba3..6080af6cee0 100644 --- a/packages/api-website-builder/src/graphql/createGraphQL.ts +++ b/packages/api-website-builder/src/graphql/createGraphQL.ts @@ -1,6 +1,6 @@ +import type { Container } from "@webiny/di"; import { GraphQLSchemaPlugin } from "@webiny/handler-graphql"; import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.js"; -import { createContextPlugin } from "@webiny/api"; import { createPagesSchema } from "~/graphql/pages/pages.gql.js"; import { createRedirectsSchema } from "./redirects/redirects.gql.js"; @@ -106,40 +106,33 @@ const baseSchema = new GraphQLSchemaPlugin({ } }); -export const createGraphQL = () => { - // The WB schema is authored as legacy GraphQLSchemaPlugins, but the DI engine's - // GraphQLSchemaComposer builds the schema from CoreGraphQLSchemaFactory registrations — it does - // NOT read ctx.plugins. registerLegacyPluginsViaGqlContextualSchema only routes plain schema - // plugins into ctx.plugins, so without this bridge they never reach the schema (manifesting as - // "Unknown type: WbError" or a missing `websiteBuilder` query field). Register each WB schema - // plugin as a CoreGraphQLSchemaFactory at request time via a ContextPlugin (apply runs in the - // initializer phase, before the composer builds). - const plugin = createContextPlugin(async (ctx: Record) => { - const schemaPlugins = [baseSchema, createPagesSchema(), createRedirectsSchema()]; - for (const schemaPlugin of schemaPlugins) { - ctx.container.registerInstance(CoreGraphQLSchemaFactory, { - async execute(builder: CoreGraphQLSchemaFactory.SchemaBuilder) { - const { schema } = schemaPlugin; - if (schema.typeDefs) { - builder.addTypeDefs(schema.typeDefs as string); - } - if (schema.resolvers) { - builder.addLegacyResolvers(schema.resolvers as Record); - } - if (schema.resolverDecorators) { - for (const [path, decorators] of Object.entries( - schema.resolverDecorators - )) { - for (const decorator of decorators as any[]) { - builder.addResolverDecorator(path, decorator); - } +/** + * Registers the WB GraphQL schema (base + pages + redirects) as CoreGraphQLSchemaFactory instances. + * The DI engine's GraphQLSchemaComposer builds from CoreGraphQLSchemaFactory registrations (it does + * NOT read ctx.plugins), so each legacy WB GraphQLSchemaPlugin is bridged here. The schema is static + * (no per-request/model data), so this runs at feature-register time — before the composer builds. + */ +export const registerWebsiteBuilderGraphQL = (container: Container) => { + const schemaPlugins = [baseSchema, createPagesSchema(), createRedirectsSchema()]; + for (const schemaPlugin of schemaPlugins) { + container.registerInstance(CoreGraphQLSchemaFactory, { + async execute(builder: CoreGraphQLSchemaFactory.SchemaBuilder) { + const { schema } = schemaPlugin; + if (schema.typeDefs) { + builder.addTypeDefs(schema.typeDefs as string); + } + if (schema.resolvers) { + builder.addLegacyResolvers(schema.resolvers as Record); + } + if (schema.resolverDecorators) { + for (const [path, decorators] of Object.entries(schema.resolverDecorators)) { + for (const decorator of decorators as any[]) { + builder.addResolverDecorator(path, decorator); } } - return builder; } - }); - } - }); - plugin.name = "websiteBuilder.graphql"; - return [plugin]; + return builder; + } + }); + } }; diff --git a/packages/api-website-builder/src/index.ts b/packages/api-website-builder/src/index.ts index b757e1f8a55..6ad945bfb4c 100644 --- a/packages/api-website-builder/src/index.ts +++ b/packages/api-website-builder/src/index.ts @@ -1,119 +1 @@ -import { createContextPlugin } from "@webiny/api"; -import { createRegisterExtensionPlugin } from "@webiny/handler"; -import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; -import { createGraphQL } from "./graphql/createGraphQL.js"; -import { GetRedirectByIdFeature } from "./features/redirects/GetRedirectById/feature.js"; -import { ListRedirectsFeature } from "./features/redirects/ListRedirects/feature.js"; -import { GetActiveRedirectsFeature } from "./features/redirects/GetActiveRedirects/feature.js"; -import { CreateRedirectFeature } from "./features/redirects/CreateRedirect/feature.js"; -import { UpdateRedirectFeature } from "./features/redirects/UpdateRedirect/feature.js"; -import { DeleteRedirectFeature } from "./features/redirects/DeleteRedirect/feature.js"; -import { MoveRedirectFeature } from "./features/redirects/MoveRedirect/feature.js"; -import { InvalidateRedirectsCacheFeature } from "./features/redirects/InvalidateRedirectsCache/feature.js"; -import { GetPageByIdFeature } from "./features/pages/GetPageById/feature.js"; -import { GetPageByPathFeature } from "./features/pages/GetPageByPath/feature.js"; -import { GetPageRevisionsFeature } from "./features/pages/GetPageRevisions/feature.js"; -import { ListPagesFeature } from "./features/pages/ListPages/feature.js"; -import { CreatePageFeature } from "./features/pages/CreatePage/feature.js"; -import { CreatePageRevisionFromFeature } from "./features/pages/CreatePageRevisionFrom/feature.js"; -import { DeletePageFeature } from "./features/pages/DeletePage/feature.js"; -import { UpdatePageFeature } from "./features/pages/UpdatePage/feature.js"; -import { PublishPageFeature } from "./features/pages/PublishPage/feature.js"; -import { UnpublishPageFeature } from "./features/pages/UnpublishPage/feature.js"; -import { DuplicatePageFeature } from "./features/pages/DuplicatePage/feature.js"; -import { TranslatePageFeature } from "./features/pages/TranslatePage/feature.js"; -import { MovePageFeature } from "./features/pages/MovePage/feature.js"; -import { PageModelPlugin, PAGE_MODEL_ID } from "~/domain/page/page.model.js"; -import { RedirectModelPlugin, REDIRECT_MODEL_ID } from "~/domain/redirect/redirect.model.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { PageModel } from "~/domain/page/abstractions.js"; -import { RedirectModel } from "~/domain/redirect/abstractions.js"; -import { WbPermissionsFeature } from "~/features/permissions/feature.js"; -import { ApiKeyInstallerFeature } from "~/features/installer/feature.js"; -import { NextjsGraphQLSchema } from "~/graphql/nextjs/NextjsGraphQLSchema.js"; -import { NextjsFeature } from "~/features/nextjs/feature.js"; -import { NuxtGraphQLSchema } from "~/graphql/nuxt/NuxtGraphQLSchema.js"; -import { NuxtFeature } from "~/features/nuxt/feature.js"; -import { ListDeletedPagesFeature } from "~/features/pages/ListDeletedPages/feature.js"; -import { TrashPageFeature } from "~/features/pages/TrashPage/feature.js"; -import { RestorePageFeature } from "~/features/pages/RestorePage/feature.js"; -import { GetDeletedPageByIdFeature } from "~/features/pages/GetDeletedPageById/feature.js"; -import { GetPageLanguagePathsFeature } from "~/features/pages/GetPageLanguagePaths/feature.js"; -import { UpdatePageRevisionDescriptionFeature } from "./features/pages/UpdatePageRevisionDescription/feature.js"; -import { WbWebhooksFeature } from "./features/webhooks/feature.js"; -// import { TenantModelExtensionFeature } from "~/features/tenantManager/feature.js"; - -const createContext = () => { - const modelsPlugin = createRegisterExtensionPlugin(context => { - context.container.register(PageModelPlugin); - context.container.register(RedirectModelPlugin); - }); - - const contextPlugin = createContextPlugin( - async context => { - const container = context.container; - - const identityContext = container.resolve(IdentityContext); - const getModel = container.resolve(GetModelUseCase); - - await identityContext.withoutAuthorization(async () => { - const [pageModel, redirectModel] = await Promise.all([ - getModel.execute(PAGE_MODEL_ID), - getModel.execute(REDIRECT_MODEL_ID) - ]); - - container.registerInstance(PageModel, pageModel.value); - container.registerInstance(RedirectModel, redirectModel.value); - }); - - // Register permissions - WbPermissionsFeature.register(container); - - // Register features - GetRedirectByIdFeature.register(container); - ListRedirectsFeature.register(container); - GetActiveRedirectsFeature.register(container); - CreateRedirectFeature.register(container); - UpdateRedirectFeature.register(container); - DeleteRedirectFeature.register(container); - MoveRedirectFeature.register(container); - InvalidateRedirectsCacheFeature.register(container); - GetPageByIdFeature.register(container); - GetPageByPathFeature.register(container); - GetPageRevisionsFeature.register(container); - GetDeletedPageByIdFeature.register(container); - GetPageLanguagePathsFeature.register(container); - ListPagesFeature.register(container); - ListDeletedPagesFeature.register(container); - CreatePageFeature.register(container); - CreatePageRevisionFromFeature.register(container); - DeletePageFeature.register(container); - TrashPageFeature.register(container); - RestorePageFeature.register(container); - UpdatePageFeature.register(container); - UpdatePageRevisionDescriptionFeature.register(container); - PublishPageFeature.register(container); - UnpublishPageFeature.register(container); - DuplicatePageFeature.register(container); - TranslatePageFeature.register(container); - MovePageFeature.register(container); - ApiKeyInstallerFeature.register(container); - NextjsFeature.register(container); - NuxtFeature.register(container); - WbWebhooksFeature.register(container); - // TenantModelExtensionFeature.register(container); - - // Register GraphQL - container.register(NextjsGraphQLSchema); - container.register(NuxtGraphQLSchema); - }, - { name: "wb.createContext" } - ); - - return [contextPlugin, modelsPlugin]; -}; - -export const createWebsiteBuilder = () => { - return [...createContext(), ...createGraphQL()]; -}; export { WebsiteBuilderFeature, setupWebsiteBuilderModels } from "./WebsiteBuilderFeature.js"; From c8dd3f14cfbb2ea5308b87fd9c0d3cbf42e3966c Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 08:55:03 +0200 Subject: [PATCH 20/31] refactor(audit-logs): remove dead createAuditLogs ContextPlugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit createAuditLogs() + createAuditLogsContext() (the two legacy ContextPlugins) were never called — the live wiring is AuditLogsFeature (registerApiRequestStack). Deleted both, completing the #40 ContextPlugin removal for production packages. The AuditLogsContext service-locator bag + handler DI cleanup is a separate follow-up (facade dissection), not a ContextPlugin. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-audit-logs/src/context/index.ts | 40 -------------------- packages/api-audit-logs/src/index.ts | 31 --------------- 2 files changed, 71 deletions(-) delete mode 100644 packages/api-audit-logs/src/context/index.ts diff --git a/packages/api-audit-logs/src/context/index.ts b/packages/api-audit-logs/src/context/index.ts deleted file mode 100644 index dcecc9cde41..00000000000 --- a/packages/api-audit-logs/src/context/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ContextPlugin } from "@webiny/api"; -import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js"; -import type { AuditLogsContext } from "~/types.js"; -import { createAuditLogsContextValue } from "./AuditLogsContextValue.js"; -import { AuditLogsStorage } from "~/abstractions.js"; - -export interface ISetupContextOptions { - deleteLogsAfterDays: number | undefined; -} - -const getDeleteLogsAfterDays = (days?: number): number => { - if (days && days > 0) { - return days; - } - /** - * Default days to delete logs after. - */ - return 60; -}; - -export const createAuditLogsContext = (params?: ISetupContextOptions) => { - const plugin = new ContextPlugin(async context => { - const storage = context.container.resolve(AuditLogsStorage); - - const eventPublisher = context.container.resolve(EventPublisher); - - context.auditLogs = createAuditLogsContextValue({ - getContext: () => { - return context; - }, - deleteLogsAfterDays: getDeleteLogsAfterDays(params?.deleteLogsAfterDays), - storage, - eventPublisher - }); - }); - - plugin.name = "audit-logs.createContext"; - - return plugin; -}; diff --git a/packages/api-audit-logs/src/index.ts b/packages/api-audit-logs/src/index.ts index 2b2ad024224..68a0556ac52 100644 --- a/packages/api-audit-logs/src/index.ts +++ b/packages/api-audit-logs/src/index.ts @@ -1,34 +1,3 @@ -import { ContextPlugin } from "@webiny/api"; -import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/abstractions.js"; -import { createSubscriptionHooks } from "~/subscriptions/index.js"; -import { createAuditLogsContext } from "~/context/index.js"; -import { createGraphQLSchema } from "~/graphql/schema.js"; -import { AuditLogsContext } from "./abstractions.js"; - -export interface ICreateAuditLogsParams { - deleteLogsAfterDays?: number | undefined; -} - -export const createAuditLogs = (params?: ICreateAuditLogsParams) => { - const subscriptionsPlugin = new ContextPlugin(context => { - if (!context.container.resolve(WcpContext).canUseFeature("auditLogs")) { - return; - } - - context.container.registerInstance(AuditLogsContext, context); - - createSubscriptionHooks(context); - }); - - subscriptionsPlugin.name = "auditLogs.context.subscriptions"; - return [ - subscriptionsPlugin, - createGraphQLSchema(), - createAuditLogsContext({ - deleteLogsAfterDays: params?.deleteLogsAfterDays - }) - ]; -}; export * from "~/config.js"; export { AuditLogsFeature } from "./AuditLogsFeature.js"; export type { AuditLogsFeatureConfig } from "./AuditLogsFeature.js"; From a6bb0ced04185926d57f996b385544de990c77da Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 10:50:29 +0200 Subject: [PATCH 21/31] refactor(es-tasks): convert api-elasticsearch-tasks off ContextPlugin to DI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit createElasticsearchBackgroundTasks() (a task-registration ContextPlugin) → ElasticsearchTasksFeature. Migrated the es-tasks + ddb-es test harnesses and the dead api-background-tasks-os bundle (now re-exports the feature). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-background-tasks-os/package.json | 3 +- packages/api-background-tasks-os/src/index.ts | 13 ++---- .../tsconfig.build.json | 9 +--- .../api-background-tasks-os/tsconfig.json | 6 +-- .../__tests__/helpers/useHandler.ts | 13 ++---- packages/api-elasticsearch-tasks/package.json | 1 - .../src/ElasticsearchTasksFeature.ts | 41 +++++++++++++++++ packages/api-elasticsearch-tasks/src/index.ts | 46 +------------------ .../tsconfig.build.json | 3 -- .../api-elasticsearch-tasks/tsconfig.json | 3 -- .../__tests__/context/useHandler.ts | 5 +- .../__tests__/tasks/createIndexTask.test.ts | 3 +- yarn.lock | 2 - 13 files changed, 61 insertions(+), 87 deletions(-) create mode 100644 packages/api-elasticsearch-tasks/src/ElasticsearchTasksFeature.ts diff --git a/packages/api-background-tasks-os/package.json b/packages/api-background-tasks-os/package.json index a5e8af3af10..4343e5c313d 100644 --- a/packages/api-background-tasks-os/package.json +++ b/packages/api-background-tasks-os/package.json @@ -14,8 +14,7 @@ "author": "Webiny LTD", "license": "MIT", "dependencies": { - "@webiny/api-elasticsearch-tasks": "0.0.0", - "@webiny/plugins": "0.0.0" + "@webiny/api-elasticsearch-tasks": "0.0.0" }, "devDependencies": { "@webiny/build-tools": "0.0.0", diff --git a/packages/api-background-tasks-os/src/index.ts b/packages/api-background-tasks-os/src/index.ts index 64b41a7259b..efb172773fa 100644 --- a/packages/api-background-tasks-os/src/index.ts +++ b/packages/api-background-tasks-os/src/index.ts @@ -1,9 +1,4 @@ -import type { PluginCollection } from "@webiny/plugins/types.js"; -import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks"; - -// NOTE: background-tasks + hcms-es-tasks are now registered DI-natively (BackgroundTasksFeature / -// HeadlessCmsEsTasksFeature), so they are no longer bundled here. This factory only carries the -// OpenSearch-specific Elasticsearch task plugins (still legacy). -export const createBackgroundTasks = (): PluginCollection => { - return [...createElasticsearchBackgroundTasks()]; -}; +// The OpenSearch background-tasks are DI-native now. background-tasks itself is registered via +// BackgroundTasksFeature (registerApiRequestStack, all flavours); the OS-specific Elasticsearch +// tasks are exposed here as a Feature for the OS flavour to register. +export { ElasticsearchTasksFeature } from "@webiny/api-elasticsearch-tasks"; diff --git a/packages/api-background-tasks-os/tsconfig.build.json b/packages/api-background-tasks-os/tsconfig.build.json index 1da6532a4f7..2c8db3632c5 100644 --- a/packages/api-background-tasks-os/tsconfig.build.json +++ b/packages/api-background-tasks-os/tsconfig.build.json @@ -1,10 +1,7 @@ { "extends": "../../tsconfig.build.json", "include": ["src"], - "references": [ - { "path": "../api-elasticsearch-tasks/tsconfig.build.json" }, - { "path": "../plugins/tsconfig.build.json" } - ], + "references": [{ "path": "../api-elasticsearch-tasks/tsconfig.build.json" }], "compilerOptions": { "rootDir": "./src", "outDir": "./dist", @@ -13,9 +10,7 @@ "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], "@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"], - "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"] + "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"] } } } diff --git a/packages/api-background-tasks-os/tsconfig.json b/packages/api-background-tasks-os/tsconfig.json index 12122508fed..3aa6cdbaa95 100644 --- a/packages/api-background-tasks-os/tsconfig.json +++ b/packages/api-background-tasks-os/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "include": ["src", "__tests__"], - "references": [{ "path": "../api-elasticsearch-tasks" }, { "path": "../plugins" }], + "references": [{ "path": "../api-elasticsearch-tasks" }], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], "outDir": "./dist", @@ -10,9 +10,7 @@ "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"], "@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"], - "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"] + "@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"] } } } diff --git a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts index 1c082c56d14..414ebb0344b 100644 --- a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts +++ b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts @@ -2,20 +2,17 @@ import { useContextHandler } from "@webiny/testing"; import type { UseContextHandlerParams } from "@webiny/testing"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { TasksCrud } from "@webiny/background-tasks/api"; -import { createElasticsearchBackgroundTasks } from "~/index"; +import { ElasticsearchTasksFeature } from "~/index"; import type { Context } from "~/types"; -type Params = Omit; +type Params = Omit; export const useHandler = (params: Params = {}) => { const inner = useContextHandler({ ...params, - // OpenSearch core is already registered by useContextHandler's cmsStorage (DDB-OS preset); - // registering it again here throws "OpenSearch core must not be loaded more than once". - plugins: [ - createElasticsearchBackgroundTasks(), - ...[params.plugins].flat(Infinity as 1).filter(Boolean) - ] + features: container => { + ElasticsearchTasksFeature.register(container); + } }); return { diff --git a/packages/api-elasticsearch-tasks/package.json b/packages/api-elasticsearch-tasks/package.json index 23df16b9a50..50e66b78bef 100644 --- a/packages/api-elasticsearch-tasks/package.json +++ b/packages/api-elasticsearch-tasks/package.json @@ -26,7 +26,6 @@ "@webiny/db-dynamodb": "0.0.0", "@webiny/error": "0.0.0", "@webiny/feature": "0.0.0", - "@webiny/plugins": "0.0.0", "@webiny/utils": "0.0.0" }, "devDependencies": { diff --git a/packages/api-elasticsearch-tasks/src/ElasticsearchTasksFeature.ts b/packages/api-elasticsearch-tasks/src/ElasticsearchTasksFeature.ts new file mode 100644 index 00000000000..101df9961d9 --- /dev/null +++ b/packages/api-elasticsearch-tasks/src/ElasticsearchTasksFeature.ts @@ -0,0 +1,41 @@ +import { type Container, createFeature } from "@webiny/feature/api"; +import { + CreateIndexesTask, + CreateIndexesTaskRunner, + OnBeforeTrigger, + DataSynchronizationTask, + ElasticsearchEnableIndexingTask, + EnableIndexingTaskRunner, + ElasticsearchReindexingTask, + ReindexingTaskRunner, + ElasticsearchSynchronize, + ElasticsearchFetcher, + ElasticsearchToDynamoDbSynchronization, + Manager +} from "~/tasks/index.js"; +import { IndexSettingsManager } from "~/settings/IndexSettingsManager.js"; +import { DisableIndexing } from "~/settings/DisableIndexing.js"; +import { EnableIndexing } from "~/settings/EnableIndexing.js"; +import { IndexManagerFactory } from "~/settings/IndexManagerFactory.js"; + +export const ElasticsearchTasksFeature = createFeature({ + name: "ElasticsearchTasks", + register(container: Container) { + container.register(Manager); + container.register(IndexSettingsManager); + container.register(DisableIndexing); + container.register(EnableIndexing); + container.register(IndexManagerFactory); + container.register(ReindexingTaskRunner); + container.register(ElasticsearchReindexingTask); + container.register(EnableIndexingTaskRunner); + container.register(ElasticsearchEnableIndexingTask); + container.register(ElasticsearchSynchronize); + container.register(ElasticsearchFetcher); + container.register(ElasticsearchToDynamoDbSynchronization); + container.register(DataSynchronizationTask); + container.register(CreateIndexesTaskRunner); + container.register(OnBeforeTrigger); + container.register(CreateIndexesTask); + } +}); diff --git a/packages/api-elasticsearch-tasks/src/index.ts b/packages/api-elasticsearch-tasks/src/index.ts index 41894d5dc02..d361e3f248d 100644 --- a/packages/api-elasticsearch-tasks/src/index.ts +++ b/packages/api-elasticsearch-tasks/src/index.ts @@ -1,46 +1,2 @@ -import { createContextPlugin } from "@webiny/api"; -import { - CreateIndexesTask, - CreateIndexesTaskRunner, - OnBeforeTrigger, - DataSynchronizationTask, - ElasticsearchEnableIndexingTask, - EnableIndexingTaskRunner, - ElasticsearchReindexingTask, - ReindexingTaskRunner, - ElasticsearchSynchronize, - ElasticsearchFetcher, - ElasticsearchToDynamoDbSynchronization, - Manager -} from "~/tasks/index.js"; -import { IndexSettingsManager } from "~/settings/IndexSettingsManager.js"; -import { DisableIndexing } from "~/settings/DisableIndexing.js"; -import { EnableIndexing } from "~/settings/EnableIndexing.js"; -import { IndexManagerFactory } from "~/settings/IndexManagerFactory.js"; -import type { PluginCollection } from "@webiny/plugins/types.js"; -import type { Context } from "~/types.js"; - -export const createElasticsearchBackgroundTasks = (): PluginCollection => { - return [ - createContextPlugin(context => { - context.container.register(Manager); - context.container.register(IndexSettingsManager); - context.container.register(DisableIndexing); - context.container.register(EnableIndexing); - context.container.register(IndexManagerFactory); - context.container.register(ReindexingTaskRunner); - context.container.register(ElasticsearchReindexingTask); - context.container.register(EnableIndexingTaskRunner); - context.container.register(ElasticsearchEnableIndexingTask); - context.container.register(ElasticsearchSynchronize); - context.container.register(ElasticsearchFetcher); - context.container.register(ElasticsearchToDynamoDbSynchronization); - context.container.register(DataSynchronizationTask); - context.container.register(CreateIndexesTaskRunner); - context.container.register(OnBeforeTrigger); - context.container.register(CreateIndexesTask); - }) - ]; -}; - +export { ElasticsearchTasksFeature } from "./ElasticsearchTasksFeature.js"; export { OpenSearchTenantIndexFactory } from "./abstractions/OpenSearchTenantIndexFactory.js"; diff --git a/packages/api-elasticsearch-tasks/tsconfig.build.json b/packages/api-elasticsearch-tasks/tsconfig.build.json index d484ee4f73f..3183f66ec47 100644 --- a/packages/api-elasticsearch-tasks/tsconfig.build.json +++ b/packages/api-elasticsearch-tasks/tsconfig.build.json @@ -12,7 +12,6 @@ { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, - { "path": "../plugins/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" } @@ -44,8 +43,6 @@ "@webiny/error": ["../error/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-elasticsearch-tasks/tsconfig.json b/packages/api-elasticsearch-tasks/tsconfig.json index cfb61888ead..81e0d497c5b 100644 --- a/packages/api-elasticsearch-tasks/tsconfig.json +++ b/packages/api-elasticsearch-tasks/tsconfig.json @@ -12,7 +12,6 @@ { "path": "../db-dynamodb" }, { "path": "../error" }, { "path": "../feature" }, - { "path": "../plugins" }, { "path": "../utils" }, { "path": "../handler" }, { "path": "../handler-aws" }, @@ -45,8 +44,6 @@ "@webiny/error": ["../error/src"], "@webiny/feature/*": ["../feature/src/*"], "@webiny/feature": ["../feature/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts index a144a58eb7d..b382f30eb18 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts @@ -11,6 +11,7 @@ import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js" import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; import { RegisterExtensionPlugin } from "@webiny/handler"; import { BackgroundTasksFeature, TasksCrud } from "@webiny/background-tasks/api"; +import { ElasticsearchTasksFeature } from "@webiny/api-elasticsearch-tasks"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; @@ -93,8 +94,10 @@ export const useHandler = (params: CreateHand } // Background tasks are DI-native — the feature registers models, TasksCrud, and the GraphQL - // contextual schema (built below alongside the other contextual schemas). + // contextual schema (built below alongside the other contextual schemas). The OpenSearch + // Elasticsearch task definitions come from ElasticsearchTasksFeature. BackgroundTasksFeature.register(container); + ElasticsearchTasksFeature.register(container); const tenantCtx = container.resolve(TenantContext); tenantCtx.setTenant({ diff --git a/packages/api-headless-cms-ddb-es/__tests__/tasks/createIndexTask.test.ts b/packages/api-headless-cms-ddb-es/__tests__/tasks/createIndexTask.test.ts index b46f0e402e6..b6d260c77f6 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/tasks/createIndexTask.test.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/tasks/createIndexTask.test.ts @@ -1,7 +1,6 @@ import { describe, expect, it } from "vitest"; import { useHandler } from "~tests/context/useHandler"; import { createMockModels } from "./mocks/models"; -import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks"; import type { Context as TasksContext } from "@webiny/background-tasks/api/types"; import type { CmsContext } from "~/types"; import { createRunner } from "@webiny/project-utils/testing/tasks/index.js"; @@ -112,7 +111,7 @@ describe("Create index task", () => { it("should create an index for each of the models defined", async () => { const { handler, elasticsearch } = useHandler({ - plugins: [createElasticsearchBackgroundTasks(), ...createMockModels()] + plugins: createMockModels() }); const context = await handler({ diff --git a/yarn.lock b/yarn.lock index edeb4e24393..bf65d01ad1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10857,7 +10857,6 @@ __metadata: dependencies: "@webiny/api-elasticsearch-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" - "@webiny/plugins": "npm:0.0.0" rimraf: "npm:^6.1.3" typescript: "npm:^7.0.2" languageName: unknown @@ -10971,7 +10970,6 @@ __metadata: "@webiny/feature": "npm:0.0.0" "@webiny/handler": "npm:0.0.0" "@webiny/handler-aws": "npm:0.0.0" - "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" From f1d5f2e0649f2d45338b22ec8b36157558da7a73 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 12:45:16 +0200 Subject: [PATCH 22/31] refactor(testing): remove dead createTenancyAndSecurity ContextPlugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit createTenancyAndSecurity (4 ContextPlugins) was unused — TenancyAndSecurity- Feature (a DI RequestContextInitializer) is the live test-harness setup. Reduced tenancySecurity.ts to the still-used constants (defaultIdentity, FULL_ACCESS_*/UNKNOWN_TEAM_ID). No production ContextPlugin remains; only the class definition + bridge + test-file usages are left toward grep-zero. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../testing/src/context/tenancySecurity.ts | 102 +----------------- 1 file changed, 5 insertions(+), 97 deletions(-) diff --git a/packages/testing/src/context/tenancySecurity.ts b/packages/testing/src/context/tenancySecurity.ts index b92b812e7bf..e1e8d2d4b42 100644 --- a/packages/testing/src/context/tenancySecurity.ts +++ b/packages/testing/src/context/tenancySecurity.ts @@ -1,24 +1,10 @@ -import type { Plugin } from "@webiny/plugins"; -import { ContextPlugin } from "@webiny/api"; -import { RoleFactory } from "@webiny/api-core/features/security/roles/shared/abstractions.js"; -import { TeamFactory } from "@webiny/api-core/features/security/teams/shared/abstractions.js"; import { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import type { Tenant } from "@webiny/api-core/types/tenancy.js"; -import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/index.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/index.js"; -import { CreateTenantUseCase } from "@webiny/api-core/features/tenancy/CreateTenant/index.js"; - -interface Config { - setupGraphQL?: boolean; - permissions: SecurityPermission[]; - identity?: IdentityData | null; -} +/** + * Shared test tenancy/security constants. The runtime setup (tenants, role/team factories, + * authenticator/authorizer, identity) is DI-native via `TenancyAndSecurityFeature` — the legacy + * `createTenancyAndSecurity` plugins were removed. + */ export const defaultIdentity: IdentityData = { id: "id-12345678", type: "admin", @@ -28,81 +14,3 @@ export const defaultIdentity: IdentityData = { export const FULL_ACCESS_ROLE_ID = "full-access-role"; export const FULL_ACCESS_TEAM_ID = "full-access-team"; export const UNKNOWN_TEAM_ID = "unknown-team"; - -class FullAccessRoleFactory implements RoleFactory.Interface { - async execute(): RoleFactory.Return { - return [ - { - name: "Full Access", - slug: FULL_ACCESS_ROLE_ID, - description: "Full access", - permissions: [{ name: "*" }] - } - ]; - } -} - -class FullAccessTeamFactory implements TeamFactory.Interface { - async execute(): TeamFactory.Return { - return [ - { - name: "Full access", - slug: FULL_ACCESS_TEAM_ID, - description: "Full access", - roles: ["full-access"] - } - ]; - } -} - -export const createTenancyAndSecurity = ({ permissions, identity }: Config): Plugin[] => { - return [ - new ContextPlugin(async context => { - context.container.registerInstance(RoleFactory, new FullAccessRoleFactory()); - context.container.registerInstance(TeamFactory, new FullAccessTeamFactory()); - }), - new ContextPlugin(async context => { - const createTenant = context.container.resolve(CreateTenantUseCase); - - for (const data of [ - { id: "root", name: "Root", parent: "", description: "Root tenant", tags: [] }, - { - id: "webiny", - name: "Webiny", - parent: "", - description: "Webiny tenant", - tags: [] - }, - { id: "dev", name: "Dev", parent: "", description: "Dev tenant", tags: [] }, - { id: "sales", name: "Sales", parent: "", description: "Sales tenant", tags: [] } - ]) { - const result = await createTenant.execute(data); - if (result.isFail()) { - throw result.error; - } - } - }), - new ContextPlugin(async context => { - context.container.resolve(TenantContext).setTenant({ - id: "root", - name: "Root" - } as unknown as Tenant); - - context.container.registerFactory(Authenticator, () => ({ - authenticate: async () => ({ - ...(identity || defaultIdentity), - teams: ["full-access-team"] - }) - })); - - context.container.registerFactory(Authorizer, () => ({ - authorize: async () => permissions || [{ name: "*" }] - })); - }), - new ContextPlugin(async context => { - const authCtx = context.container.resolve(AuthenticationContext); - const resolvedIdentity = await authCtx.authenticate(""); - context.container.resolve(IdentityContext).setIdentity(resolvedIdentity); - }) - ].filter(Boolean) as Plugin[]; -}; From a532f5a4e87e58994ab7204fb380969d60468126 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 12:54:39 +0200 Subject: [PATCH 23/31] refactor(testing): move test tenancy/security constants to @webiny/api-testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit defaultIdentity + FULL_ACCESS_*/UNKNOWN_TEAM_ID now live in the base @webiny/api-testing package; @webiny/testing re-exports them (zero consumer churn — the 10 barrel importers + internals keep working). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-testing/src/index.ts | 6 +++++ packages/api-testing/src/tenancySecurity.ts | 16 ++++++++++++++ packages/testing/package.json | 1 + .../testing/src/context/tenancySecurity.ts | 22 +++++++------------ packages/testing/tsconfig.build.json | 3 +++ packages/testing/tsconfig.json | 3 +++ yarn.lock | 1 + 7 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 packages/api-testing/src/tenancySecurity.ts diff --git a/packages/api-testing/src/index.ts b/packages/api-testing/src/index.ts index d87552314e0..8c7d238c1e2 100644 --- a/packages/api-testing/src/index.ts +++ b/packages/api-testing/src/index.ts @@ -4,3 +4,9 @@ export type { TestPermissionsHolder } from "./mocks/TestAuthorizer.js"; export { AuthTriggerHandler } from "./handlers/AuthTriggerHandler.js"; export { RootTenantInitializer } from "./handlers/RootTenantInitializer.js"; export { createIdentity } from "./identity.js"; +export { + defaultIdentity, + FULL_ACCESS_ROLE_ID, + FULL_ACCESS_TEAM_ID, + UNKNOWN_TEAM_ID +} from "./tenancySecurity.js"; diff --git a/packages/api-testing/src/tenancySecurity.ts b/packages/api-testing/src/tenancySecurity.ts new file mode 100644 index 00000000000..a508169ab7a --- /dev/null +++ b/packages/api-testing/src/tenancySecurity.ts @@ -0,0 +1,16 @@ +import { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; + +/** + * Shared test tenancy/security constants (the default admin identity + full-access role/team ids). + * Runtime tenancy/security setup lives in the heavier @webiny/testing harness (TenancyAndSecurity- + * Feature); these plain constants live here in the base test-utils package. + */ +export const defaultIdentity: IdentityData = { + id: "id-12345678", + type: "admin", + displayName: "John Doe" +}; + +export const FULL_ACCESS_ROLE_ID = "full-access-role"; +export const FULL_ACCESS_TEAM_ID = "full-access-team"; +export const UNKNOWN_TEAM_ID = "unknown-team"; diff --git a/packages/testing/package.json b/packages/testing/package.json index 5eb22b80721..92fa7251582 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -23,6 +23,7 @@ "@webiny/api-mailer": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/api-record-locking": "0.0.0", + "@webiny/api-testing": "0.0.0", "@webiny/api-websockets": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/background-tasks": "0.0.0", diff --git a/packages/testing/src/context/tenancySecurity.ts b/packages/testing/src/context/tenancySecurity.ts index e1e8d2d4b42..8c91eeccdca 100644 --- a/packages/testing/src/context/tenancySecurity.ts +++ b/packages/testing/src/context/tenancySecurity.ts @@ -1,16 +1,10 @@ -import { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; - /** - * Shared test tenancy/security constants. The runtime setup (tenants, role/team factories, - * authenticator/authorizer, identity) is DI-native via `TenancyAndSecurityFeature` — the legacy - * `createTenancyAndSecurity` plugins were removed. + * Shared test tenancy/security constants now live in the base @webiny/api-testing package; re-exported + * here for existing consumers. Runtime setup is DI-native via `TenancyAndSecurityFeature`. */ -export const defaultIdentity: IdentityData = { - id: "id-12345678", - type: "admin", - displayName: "John Doe" -}; - -export const FULL_ACCESS_ROLE_ID = "full-access-role"; -export const FULL_ACCESS_TEAM_ID = "full-access-team"; -export const UNKNOWN_TEAM_ID = "unknown-team"; +export { + defaultIdentity, + FULL_ACCESS_ROLE_ID, + FULL_ACCESS_TEAM_ID, + UNKNOWN_TEAM_ID +} from "@webiny/api-testing"; diff --git a/packages/testing/tsconfig.build.json b/packages/testing/tsconfig.build.json index 176368cc32b..9471988df94 100644 --- a/packages/testing/tsconfig.build.json +++ b/packages/testing/tsconfig.build.json @@ -11,6 +11,7 @@ { "path": "../api-mailer/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../api-record-locking/tsconfig.build.json" }, + { "path": "../api-testing/tsconfig.build.json" }, { "path": "../api-websockets/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, @@ -46,6 +47,8 @@ "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], "@webiny/api-record-locking": ["../api-record-locking/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/api-websockets/*": ["../api-websockets/src/*"], "@webiny/api-websockets": ["../api-websockets/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], diff --git a/packages/testing/tsconfig.json b/packages/testing/tsconfig.json index d0a91a90ebe..8a93f12af2d 100644 --- a/packages/testing/tsconfig.json +++ b/packages/testing/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../api-mailer" }, { "path": "../api-opensearch" }, { "path": "../api-record-locking" }, + { "path": "../api-testing" }, { "path": "../api-websockets" }, { "path": "../aws-sdk" }, { "path": "../background-tasks" }, @@ -46,6 +47,8 @@ "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], "@webiny/api-record-locking": ["../api-record-locking/src"], + "@webiny/api-testing/*": ["../api-testing/src/*"], + "@webiny/api-testing": ["../api-testing/src"], "@webiny/api-websockets/*": ["../api-websockets/src/*"], "@webiny/api-websockets": ["../api-websockets/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], diff --git a/yarn.lock b/yarn.lock index bf65d01ad1c..f5e82d24cc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13869,6 +13869,7 @@ __metadata: "@webiny/api-mailer": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/api-record-locking": "npm:0.0.0" + "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" From 4d5fdbc169821e6235958a9fc2dbedebac0349fb Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 14:24:08 +0200 Subject: [PATCH 24/31] refactor(testing): rename @webiny/api-testing to @webiny/api-core-testing The base test-utils package mocks api-core abstractions (Authenticator/ Authorizer/TenantContext/IdentityContext), so the name should say so. First step of standardizing on sibling -testing packages. Repointed all ~14 importers; @webiny/testing re-exports unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../defaultPermissionsMerger.test.ts | 2 +- .../__tests__/utils/useGraphQlHandler.ts | 2 +- .../api-aco/__tests__/utils/useHandler.ts | 6 +-- packages/api-aco/package.json | 2 +- packages/api-aco/tsconfig.build.json | 6 +-- packages/api-aco/tsconfig.json | 6 +-- .../package.json | 2 +- .../src/handlers/AuthTriggerHandler.ts | 0 .../src/handlers/RootTenantInitializer.ts | 0 .../src/identity.ts | 0 .../src/index.ts | 0 .../src/mocks/TestAuthenticator.ts | 0 .../src/mocks/TestAuthorizer.ts | 0 .../src/tenancySecurity.ts | 0 .../tsconfig.build.json | 0 .../tsconfig.json | 0 .../webiny.config.js | 0 .../__tests__/utils/useGraphQlHandler.ts | 8 +-- packages/api-file-manager-aco/package.json | 2 +- .../api-file-manager-aco/tsconfig.build.json | 6 +-- packages/api-file-manager-aco/tsconfig.json | 6 +-- .../__tests__/utils/useGqlHandler.ts | 8 +-- packages/api-file-manager/package.json | 2 +- packages/api-file-manager/tsconfig.build.json | 6 +-- packages/api-file-manager/tsconfig.json | 6 +-- .../__tests__/utils/useGraphQlHandler.ts | 8 +-- packages/api-headless-cms-aco/package.json | 2 +- .../api-headless-cms-aco/tsconfig.build.json | 6 +-- packages/api-headless-cms-aco/tsconfig.json | 6 +-- .../__tests__/context/useHandler.ts | 4 +- .../__tests__/graphql/handler.ts | 4 +- packages/api-headless-cms-ddb-es/package.json | 2 +- .../tsconfig.build.json | 6 +-- .../api-headless-cms-ddb-es/tsconfig.json | 6 +-- .../__tests__/contentAPI/aco/setup/plugins.ts | 8 +-- .../testHelpers/useGraphQLHandler.ts | 8 +-- .../__tests__/testHelpers/useHandler.ts | 8 +-- packages/api-headless-cms/package.json | 2 +- .../src/testing/createCmsTestHandler.ts | 8 +-- .../api-headless-cms/src/testing/index.ts | 8 +-- packages/api-headless-cms/tsconfig.build.json | 6 +-- packages/api-headless-cms/tsconfig.json | 6 +-- .../__tests__/helpers/useGraphQLHandler.ts | 8 +-- packages/api-record-locking/package.json | 2 +- .../api-record-locking/tsconfig.build.json | 6 +-- packages/api-record-locking/tsconfig.json | 6 +-- .../__mocks/handler/useGraphQLHandler.ts | 8 +-- .../__tests__/__mocks/handler/useHandler.ts | 8 +-- packages/api-scheduler-aws/package.json | 2 +- .../api-scheduler-aws/tsconfig.build.json | 6 +-- packages/api-scheduler-aws/tsconfig.json | 6 +-- .../__tests__/helpers/useHandler.ts | 8 +-- packages/api-websockets-aws/package.json | 2 +- .../api-websockets-aws/tsconfig.build.json | 6 +-- packages/api-websockets-aws/tsconfig.json | 6 +-- .../__tests__/helpers/useGraphQLHandler.ts | 8 +-- .../__tests__/helpers/useHandler.ts | 8 +-- packages/api-websockets/package.json | 2 +- packages/api-websockets/tsconfig.build.json | 6 +-- packages/api-websockets/tsconfig.json | 6 +-- .../__tests__/helpers/useGraphQLHandler.ts | 6 +-- .../__tests__/helpers/useRawHandler.ts | 6 +-- .../__tests__/helpers/useTaskHandler.ts | 6 +-- packages/background-tasks/package.json | 2 +- packages/background-tasks/tsconfig.build.json | 6 +-- packages/background-tasks/tsconfig.json | 6 +-- packages/cli-core/files/references.json | 12 ++--- .../__tests__/cmsManageRoute.test.ts | 8 +-- .../__tests__/extensionRegistration.test.ts | 8 +-- .../languages/__tests__/utils/useHandler.ts | 8 +-- packages/languages/package.json | 2 +- packages/languages/tsconfig.build.json | 6 +-- packages/languages/tsconfig.json | 6 +-- packages/testing/package.json | 2 +- .../testing/src/context/tenancySecurity.ts | 4 +- packages/testing/tsconfig.build.json | 6 +-- packages/testing/tsconfig.json | 6 +-- .../__tests__/helpers/useGraphQLHandler.ts | 8 +-- .../webhooks/__tests__/helpers/useHandler.ts | 8 +-- packages/webhooks/package.json | 2 +- packages/webhooks/tsconfig.build.json | 6 +-- packages/webhooks/tsconfig.json | 6 +-- yarn.lock | 54 +++++++++---------- 83 files changed, 228 insertions(+), 228 deletions(-) rename packages/{api-testing => api-core-testing}/package.json (95%) rename packages/{api-testing => api-core-testing}/src/handlers/AuthTriggerHandler.ts (100%) rename packages/{api-testing => api-core-testing}/src/handlers/RootTenantInitializer.ts (100%) rename packages/{api-testing => api-core-testing}/src/identity.ts (100%) rename packages/{api-testing => api-core-testing}/src/index.ts (100%) rename packages/{api-testing => api-core-testing}/src/mocks/TestAuthenticator.ts (100%) rename packages/{api-testing => api-core-testing}/src/mocks/TestAuthorizer.ts (100%) rename packages/{api-testing => api-core-testing}/src/tenancySecurity.ts (100%) rename packages/{api-testing => api-core-testing}/tsconfig.build.json (100%) rename packages/{api-testing => api-core-testing}/tsconfig.json (100%) rename packages/{api-testing => api-core-testing}/webiny.config.js (100%) diff --git a/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts b/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts index 71342ffa966..f3a0ca15001 100644 --- a/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts +++ b/packages/api-aco/__tests__/defaultPermissionsMerger.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { createIdentity } from "@webiny/api-testing"; +import { createIdentity } from "@webiny/api-core-testing"; import { FolderPermission } from "~/flp/flp.types"; import { DefaultPermissionsMerger } from "~/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts index 3f34bd778f8..2908ef5acfa 100644 --- a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts @@ -9,7 +9,7 @@ import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; import type { CmsModel } from "@webiny/api-headless-cms/types"; import { ContextPlugin } from "@webiny/api"; import { AcoFeature } from "~/index"; -import { createIdentity } from "@webiny/api-testing"; +import { createIdentity } from "@webiny/api-core-testing"; import { createAcoSdk } from "~tests/utils/createAcoSdk.js"; import { diff --git a/packages/api-aco/__tests__/utils/useHandler.ts b/packages/api-aco/__tests__/utils/useHandler.ts index d42fb647f50..cd1fd6e67f4 100644 --- a/packages/api-aco/__tests__/utils/useHandler.ts +++ b/packages/api-aco/__tests__/utils/useHandler.ts @@ -14,10 +14,10 @@ import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/type import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import { AcoFeature } from "~/index"; -import { createIdentity } from "@webiny/api-testing"; +import { createIdentity } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; import type { AcoContext } from "~/types"; export interface UseHandlerParams { diff --git a/packages/api-aco/package.json b/packages/api-aco/package.json index 45354478c0f..93e876eff4e 100644 --- a/packages/api-aco/package.json +++ b/packages/api-aco/package.json @@ -37,8 +37,8 @@ "lodash": "^4.18.1" }, "devDependencies": { + "@webiny/api-core-testing": "0.0.0", "@webiny/api-file-manager": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/plugins": "0.0.0", diff --git a/packages/api-aco/tsconfig.build.json b/packages/api-aco/tsconfig.build.json index d851b4d25c3..6bb8bc3cab1 100644 --- a/packages/api-aco/tsconfig.build.json +++ b/packages/api-aco/tsconfig.build.json @@ -14,8 +14,8 @@ { "path": "../shared-aco/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../validation/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-file-manager/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -51,10 +51,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/validation/*": ["../validation/src/*"], "@webiny/validation": ["../validation/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-aco/tsconfig.json b/packages/api-aco/tsconfig.json index 3f450911d6c..2637de7c9bc 100644 --- a/packages/api-aco/tsconfig.json +++ b/packages/api-aco/tsconfig.json @@ -14,8 +14,8 @@ { "path": "../shared-aco" }, { "path": "../utils" }, { "path": "../validation" }, + { "path": "../api-core-testing" }, { "path": "../api-file-manager" }, - { "path": "../api-testing" }, { "path": "../handler-aws" }, { "path": "../plugins" }, { "path": "../wcp" } @@ -51,10 +51,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/validation/*": ["../validation/src/*"], "@webiny/validation": ["../validation/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-testing/package.json b/packages/api-core-testing/package.json similarity index 95% rename from packages/api-testing/package.json rename to packages/api-core-testing/package.json index 73c8db45f9c..7d4572fd0c9 100644 --- a/packages/api-testing/package.json +++ b/packages/api-core-testing/package.json @@ -1,5 +1,5 @@ { - "name": "@webiny/api-testing", + "name": "@webiny/api-core-testing", "version": "0.0.0", "type": "module", "exports": { diff --git a/packages/api-testing/src/handlers/AuthTriggerHandler.ts b/packages/api-core-testing/src/handlers/AuthTriggerHandler.ts similarity index 100% rename from packages/api-testing/src/handlers/AuthTriggerHandler.ts rename to packages/api-core-testing/src/handlers/AuthTriggerHandler.ts diff --git a/packages/api-testing/src/handlers/RootTenantInitializer.ts b/packages/api-core-testing/src/handlers/RootTenantInitializer.ts similarity index 100% rename from packages/api-testing/src/handlers/RootTenantInitializer.ts rename to packages/api-core-testing/src/handlers/RootTenantInitializer.ts diff --git a/packages/api-testing/src/identity.ts b/packages/api-core-testing/src/identity.ts similarity index 100% rename from packages/api-testing/src/identity.ts rename to packages/api-core-testing/src/identity.ts diff --git a/packages/api-testing/src/index.ts b/packages/api-core-testing/src/index.ts similarity index 100% rename from packages/api-testing/src/index.ts rename to packages/api-core-testing/src/index.ts diff --git a/packages/api-testing/src/mocks/TestAuthenticator.ts b/packages/api-core-testing/src/mocks/TestAuthenticator.ts similarity index 100% rename from packages/api-testing/src/mocks/TestAuthenticator.ts rename to packages/api-core-testing/src/mocks/TestAuthenticator.ts diff --git a/packages/api-testing/src/mocks/TestAuthorizer.ts b/packages/api-core-testing/src/mocks/TestAuthorizer.ts similarity index 100% rename from packages/api-testing/src/mocks/TestAuthorizer.ts rename to packages/api-core-testing/src/mocks/TestAuthorizer.ts diff --git a/packages/api-testing/src/tenancySecurity.ts b/packages/api-core-testing/src/tenancySecurity.ts similarity index 100% rename from packages/api-testing/src/tenancySecurity.ts rename to packages/api-core-testing/src/tenancySecurity.ts diff --git a/packages/api-testing/tsconfig.build.json b/packages/api-core-testing/tsconfig.build.json similarity index 100% rename from packages/api-testing/tsconfig.build.json rename to packages/api-core-testing/tsconfig.build.json diff --git a/packages/api-testing/tsconfig.json b/packages/api-core-testing/tsconfig.json similarity index 100% rename from packages/api-testing/tsconfig.json rename to packages/api-core-testing/tsconfig.json diff --git a/packages/api-testing/webiny.config.js b/packages/api-core-testing/webiny.config.js similarity index 100% rename from packages/api-testing/webiny.config.js rename to packages/api-core-testing/webiny.config.js diff --git a/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts index c4ee1180ce6..22ed498cf36 100644 --- a/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-file-manager-aco/__tests__/utils/useGraphQlHandler.ts @@ -12,10 +12,10 @@ import { createAcoSdk } from "../../../api-aco/__tests__/utils/createAcoSdk.js"; import { createFileManagerSdk } from "../../../api-file-manager/__tests__/utils/createFileManagerSdk.js"; import { FileManagerAcoFeature } from "~/index.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/api-file-manager-aco/package.json b/packages/api-file-manager-aco/package.json index c44e25c7f9d..f93e3eed4c8 100644 --- a/packages/api-file-manager-aco/package.json +++ b/packages/api-file-manager-aco/package.json @@ -30,8 +30,8 @@ "devDependencies": { "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/api-headless-cms": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-file-manager-aco/tsconfig.build.json b/packages/api-file-manager-aco/tsconfig.build.json index 965bdd32e07..9534fc6465c 100644 --- a/packages/api-file-manager-aco/tsconfig.build.json +++ b/packages/api-file-manager-aco/tsconfig.build.json @@ -9,8 +9,8 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, @@ -39,10 +39,10 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-file-manager-aco/tsconfig.json b/packages/api-file-manager-aco/tsconfig.json index 8754b5880b6..2792545b50b 100644 --- a/packages/api-file-manager-aco/tsconfig.json +++ b/packages/api-file-manager-aco/tsconfig.json @@ -9,8 +9,8 @@ { "path": "../handler-graphql" }, { "path": "../api" }, { "path": "../api-core" }, + { "path": "../api-core-testing" }, { "path": "../api-headless-cms" }, - { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../handler-aws" }, @@ -39,10 +39,10 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-file-manager/__tests__/utils/useGqlHandler.ts b/packages/api-file-manager/__tests__/utils/useGqlHandler.ts index 658d2b8ee4e..28637822ff7 100644 --- a/packages/api-file-manager/__tests__/utils/useGqlHandler.ts +++ b/packages/api-file-manager/__tests__/utils/useGqlHandler.ts @@ -11,10 +11,10 @@ import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.j import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import { FileManagerAppFeature } from "~/FileManagerAppFeature"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { createFileManagerSdk } from "./createFileManagerSdk"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; diff --git a/packages/api-file-manager/package.json b/packages/api-file-manager/package.json index d71801444ff..707dd764899 100644 --- a/packages/api-file-manager/package.json +++ b/packages/api-file-manager/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@types/object-hash": "^3.0.6", - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/project-utils": "0.0.0", "@webiny/utils": "0.0.0", diff --git a/packages/api-file-manager/tsconfig.build.json b/packages/api-file-manager/tsconfig.build.json index 7e175c9c25b..cf7f2e3ece8 100644 --- a/packages/api-file-manager/tsconfig.build.json +++ b/packages/api-file-manager/tsconfig.build.json @@ -13,7 +13,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" } ], @@ -46,8 +46,8 @@ "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-file-manager/tsconfig.json b/packages/api-file-manager/tsconfig.json index 05a7c8791df..4362740663a 100644 --- a/packages/api-file-manager/tsconfig.json +++ b/packages/api-file-manager/tsconfig.json @@ -13,7 +13,7 @@ { "path": "../handler-graphql" }, { "path": "../plugins" }, { "path": "../wcp" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../handler-aws" }, { "path": "../utils" } ], @@ -46,8 +46,8 @@ "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/utils/*": ["../utils/src/*"], diff --git a/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts index 74915b634c2..02c53443a45 100644 --- a/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-headless-cms-aco/__tests__/utils/useGraphQlHandler.ts @@ -26,10 +26,10 @@ import { RESTORE_ENTRY } from "~tests/graphql/cms.gql"; import { CREATE_FOLDER, DELETE_FOLDER, GET_FOLDER } from "~tests/graphql/folder.gql"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; export interface UseGQLHandlerParams { diff --git a/packages/api-headless-cms-aco/package.json b/packages/api-headless-cms-aco/package.json index 8740e4afc29..3db9d191744 100644 --- a/packages/api-headless-cms-aco/package.json +++ b/packages/api-headless-cms-aco/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-headless-cms-aco/tsconfig.build.json b/packages/api-headless-cms-aco/tsconfig.build.json index f38620d50c1..6592d8358ec 100644 --- a/packages/api-headless-cms-aco/tsconfig.build.json +++ b/packages/api-headless-cms-aco/tsconfig.build.json @@ -9,7 +9,7 @@ { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -35,8 +35,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-headless-cms-aco/tsconfig.json b/packages/api-headless-cms-aco/tsconfig.json index 14c5e2fc6d5..f16096a2328 100644 --- a/packages/api-headless-cms-aco/tsconfig.json +++ b/packages/api-headless-cms-aco/tsconfig.json @@ -9,7 +9,7 @@ { "path": "../handler" }, { "path": "../handler-graphql" }, { "path": "../api-core" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../event-handler-core" }, { "path": "../plugins" }, { "path": "../wcp" } @@ -35,8 +35,8 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts index b382f30eb18..436a5277cc3 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/context/useHandler.ts @@ -20,8 +20,8 @@ import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { Plugin, PluginCollection } from "@webiny/plugins/types"; import type { CmsContext } from "~/types"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "~tests/helpers/bridgeLegacyPlugins"; export interface CreateHandlerCoreParams { diff --git a/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts b/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts index fec243ae559..209799069d8 100644 --- a/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts +++ b/packages/api-headless-cms-ddb-es/__tests__/graphql/handler.ts @@ -19,8 +19,8 @@ import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/type import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { CmsContext } from "~/types"; import { createIndexConfigurationPlugin } from "~tests/graphql/createIndexConfigurationPlugin"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "~tests/helpers/bridgeLegacyPlugins"; interface UseHandlerParams { diff --git a/packages/api-headless-cms-ddb-es/package.json b/packages/api-headless-cms-ddb-es/package.json index 5c735e73b10..e88b9f699eb 100644 --- a/packages/api-headless-cms-ddb-es/package.json +++ b/packages/api-headless-cms-ddb-es/package.json @@ -47,8 +47,8 @@ "devDependencies": { "@types/jsonpack": "^1.1.6", "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/api-dynamodb-to-elasticsearch": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/api-headless-cms-ddb-es/tsconfig.build.json b/packages/api-headless-cms-ddb-es/tsconfig.build.json index e872b2d0a53..d076abf2afb 100644 --- a/packages/api-headless-cms-ddb-es/tsconfig.build.json +++ b/packages/api-headless-cms-ddb-es/tsconfig.build.json @@ -14,8 +14,8 @@ { "path": "../plugins/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-dynamodb-to-elasticsearch/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -53,10 +53,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-dynamodb-to-elasticsearch/*": ["../api-dynamodb-to-elasticsearch/src/*"], "@webiny/api-dynamodb-to-elasticsearch": ["../api-dynamodb-to-elasticsearch/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms-ddb-es/tsconfig.json b/packages/api-headless-cms-ddb-es/tsconfig.json index 0c7dd7d782f..5ab06c6ddea 100644 --- a/packages/api-headless-cms-ddb-es/tsconfig.json +++ b/packages/api-headless-cms-ddb-es/tsconfig.json @@ -14,8 +14,8 @@ { "path": "../plugins" }, { "path": "../utils" }, { "path": "../api-core" }, + { "path": "../api-core-testing" }, { "path": "../api-dynamodb-to-elasticsearch" }, - { "path": "../api-testing" }, { "path": "../background-tasks" }, { "path": "../event-handler-core" }, { "path": "../handler" }, @@ -53,10 +53,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-dynamodb-to-elasticsearch/*": ["../api-dynamodb-to-elasticsearch/src/*"], "@webiny/api-dynamodb-to-elasticsearch": ["../api-dynamodb-to-elasticsearch/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts b/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts index 221f0529ff8..9d07c32b720 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/aco/setup/plugins.ts @@ -11,10 +11,10 @@ import type { HeadlessCmsStorageOperations } from "~/types"; import type { PermissionsArg } from "./helpers"; import { createPermissions } from "./helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { CmsEndpointAccessDecorator } from "~tests/testHelpers/handlers/CmsEndpointAccessDecorator"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; diff --git a/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts b/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts index 8d4c72e46b1..1565f9f4b41 100644 --- a/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts +++ b/packages/api-headless-cms/__tests__/testHelpers/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import type { HeadlessCmsStorageOperations, ApiEndpoint } from "~/types"; import type { PermissionsArg } from "~tests/testHelpers/helpers"; import { createPermissions } from "~tests/testHelpers/helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { CmsEndpointAccessDecorator } from "~tests/testHelpers/handlers/CmsEndpointAccessDecorator"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; diff --git a/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts b/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts index f64b26ed303..fa011d94e85 100644 --- a/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts +++ b/packages/api-headless-cms/__tests__/testHelpers/useHandler.ts @@ -11,10 +11,10 @@ import type { HeadlessCmsStorageOperations } from "~/types"; import type { PermissionsArg } from "~tests/testHelpers/helpers"; import { createPermissions } from "~tests/testHelpers/helpers"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { defaultIdentity } from "~tests/testHelpers/helpers"; import { processLegacyPlugins } from "~tests/testHelpers/bridgeLegacyPlugins"; diff --git a/packages/api-headless-cms/package.json b/packages/api-headless-cms/package.json index b6d603a39fc..a49d608f855 100644 --- a/packages/api-headless-cms/package.json +++ b/packages/api-headless-cms/package.json @@ -27,7 +27,7 @@ "@graphql-tools/schema": "10.0.36", "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/error": "0.0.0", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts b/packages/api-headless-cms/src/testing/createCmsTestHandler.ts index feacfd78325..140c94e683a 100644 --- a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts +++ b/packages/api-headless-cms/src/testing/createCmsTestHandler.ts @@ -17,10 +17,10 @@ import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types.js"; import { HeadlessCmsFeature } from "~/HeadlessCmsFeature.js"; import type { HeadlessCmsStorageOperations } from "~/types/types.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./processLegacyPlugins.js"; const DEFAULT_IDENTITY: IdentityData = { diff --git a/packages/api-headless-cms/src/testing/index.ts b/packages/api-headless-cms/src/testing/index.ts index daf2e56801f..3fe553a3a6c 100644 --- a/packages/api-headless-cms/src/testing/index.ts +++ b/packages/api-headless-cms/src/testing/index.ts @@ -1,7 +1,7 @@ export { createCmsTestHandler } from "./createCmsTestHandler.js"; export type { CmsTestHandlerParams, InvokeParams } from "./createCmsTestHandler.js"; export { processLegacyPlugins } from "./processLegacyPlugins.js"; -export { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -export { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -export { AuthTriggerHandler } from "@webiny/api-testing"; -export { RootTenantInitializer } from "@webiny/api-testing"; +export { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +export { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +export { AuthTriggerHandler } from "@webiny/api-core-testing"; +export { RootTenantInitializer } from "@webiny/api-core-testing"; diff --git a/packages/api-headless-cms/tsconfig.build.json b/packages/api-headless-cms/tsconfig.build.json index cb16b6fcf3b..ea46a605416 100644 --- a/packages/api-headless-cms/tsconfig.build.json +++ b/packages/api-headless-cms/tsconfig.build.json @@ -4,7 +4,7 @@ "references": [ { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, @@ -29,8 +29,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms/tsconfig.json b/packages/api-headless-cms/tsconfig.json index c7da8c7de3c..24b8dc9f2a5 100644 --- a/packages/api-headless-cms/tsconfig.json +++ b/packages/api-headless-cms/tsconfig.json @@ -4,7 +4,7 @@ "references": [ { "path": "../api" }, { "path": "../api-core" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../error" }, { "path": "../event-handler-core" }, { "path": "../feature" }, @@ -29,8 +29,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/error/*": ["../error/src/*"], "@webiny/error": ["../error/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts b/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts index f27e6e0055a..f8a65aea7ea 100644 --- a/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/api-record-locking/__tests__/helpers/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import { } from "@webiny/api-websockets/exports/api.js"; import { RecordLockingAppFeature } from "~/index"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/api-record-locking/package.json b/packages/api-record-locking/package.json index cc9158dc8c3..48aa1c9facb 100644 --- a/packages/api-record-locking/package.json +++ b/packages/api-record-locking/package.json @@ -28,7 +28,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-record-locking/tsconfig.build.json b/packages/api-record-locking/tsconfig.build.json index 1176ef9476c..55bea18aaf8 100644 --- a/packages/api-record-locking/tsconfig.build.json +++ b/packages/api-record-locking/tsconfig.build.json @@ -10,7 +10,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } ], @@ -37,8 +37,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-record-locking/tsconfig.json b/packages/api-record-locking/tsconfig.json index 170466b8d20..14ad5732bc5 100644 --- a/packages/api-record-locking/tsconfig.json +++ b/packages/api-record-locking/tsconfig.json @@ -10,7 +10,7 @@ { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../api-core" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../event-handler-core" }, { "path": "../wcp" } ], @@ -37,8 +37,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts index 9b78fe864a8..9334cf9d5d9 100644 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts +++ b/packages/api-scheduler-aws/__tests__/__mocks/handler/useGraphQLHandler.ts @@ -12,10 +12,10 @@ import { SchedulerFeature } from "@webiny/api-scheduler"; import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js"; import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { CANCEL_SCHEDULED_ACTION, GET_SCHEDULED_ACTION, diff --git a/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts b/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts index ceb1cc077bb..5241c067afd 100644 --- a/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts +++ b/packages/api-scheduler-aws/__tests__/__mocks/handler/useHandler.ts @@ -9,10 +9,10 @@ import { SchedulerFeature } from "@webiny/api-scheduler"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { buildSchema } from "graphql"; import type { GraphQLSchema } from "graphql"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { SchedulerClient, SchedulerClientConfig diff --git a/packages/api-scheduler-aws/package.json b/packages/api-scheduler-aws/package.json index 875b513c621..5007529b7e2 100644 --- a/packages/api-scheduler-aws/package.json +++ b/packages/api-scheduler-aws/package.json @@ -29,8 +29,8 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/api-headless-cms": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/db-dynamodb": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/api-scheduler-aws/tsconfig.build.json b/packages/api-scheduler-aws/tsconfig.build.json index 655ec9a0c20..e367b2f13ea 100644 --- a/packages/api-scheduler-aws/tsconfig.build.json +++ b/packages/api-scheduler-aws/tsconfig.build.json @@ -9,7 +9,7 @@ { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../error/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../event-handler-aws/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, @@ -39,8 +39,8 @@ "@webiny/error": ["../error/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], diff --git a/packages/api-scheduler-aws/tsconfig.json b/packages/api-scheduler-aws/tsconfig.json index 54516998ce3..352c06ecd7d 100644 --- a/packages/api-scheduler-aws/tsconfig.json +++ b/packages/api-scheduler-aws/tsconfig.json @@ -9,7 +9,7 @@ { "path": "../aws-sdk" }, { "path": "../error" }, { "path": "../utils" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../db-dynamodb" }, { "path": "../event-handler-aws" }, { "path": "../event-handler-core" }, @@ -39,8 +39,8 @@ "@webiny/error": ["../error/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-aws/*": ["../event-handler-aws/src/*"], diff --git a/packages/api-websockets-aws/__tests__/helpers/useHandler.ts b/packages/api-websockets-aws/__tests__/helpers/useHandler.ts index 975a1928ccf..9341fc853f8 100644 --- a/packages/api-websockets-aws/__tests__/helpers/useHandler.ts +++ b/packages/api-websockets-aws/__tests__/helpers/useHandler.ts @@ -13,10 +13,10 @@ import { WebsocketsFeature } from "@webiny/api-websockets/features/feature.js"; import { WebsocketsGraphQLFactoryFeature } from "@webiny/api-websockets/graphql/feature.js"; import { WebsocketsRouteHandler } from "@webiny/api-websockets/features/Routes/abstractions.js"; import { ConnectionRegistry } from "@webiny/api-websockets/features/ConnectionRegistry/abstractions.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; diff --git a/packages/api-websockets-aws/package.json b/packages/api-websockets-aws/package.json index 8967425a1dc..9b43848312d 100644 --- a/packages/api-websockets-aws/package.json +++ b/packages/api-websockets-aws/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/api-headless-cms": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-websockets-aws/tsconfig.build.json b/packages/api-websockets-aws/tsconfig.build.json index 788a4bb7099..5dbe8c0f3bf 100644 --- a/packages/api-websockets-aws/tsconfig.build.json +++ b/packages/api-websockets-aws/tsconfig.build.json @@ -9,8 +9,8 @@ { "path": "../handler/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, @@ -37,10 +37,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets-aws/tsconfig.json b/packages/api-websockets-aws/tsconfig.json index edc62011d2e..ccb9ac8edbb 100644 --- a/packages/api-websockets-aws/tsconfig.json +++ b/packages/api-websockets-aws/tsconfig.json @@ -9,8 +9,8 @@ { "path": "../handler" }, { "path": "../utils" }, { "path": "../api-core" }, + { "path": "../api-core-testing" }, { "path": "../api-headless-cms" }, - { "path": "../api-testing" }, { "path": "../event-handler-core" }, { "path": "../handler-db" }, { "path": "../handler-graphql" }, @@ -37,10 +37,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts b/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts index a7fdb65e499..d6a480c0891 100644 --- a/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/api-websockets/__tests__/helpers/useGraphQLHandler.ts @@ -13,10 +13,10 @@ import { WebsocketsGraphQLFactoryFeature } from "~/graphql/feature.js"; import { ConnectionRegistry } from "~/features/ConnectionRegistry/abstractions.js"; import { WebsocketsTransport } from "~/transport/index.js"; import { MockWebsocketsTransport } from "~tests/mocks/MockWebsocketsTransport.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import { getIntrospectionQuery } from "graphql"; diff --git a/packages/api-websockets/__tests__/helpers/useHandler.ts b/packages/api-websockets/__tests__/helpers/useHandler.ts index 781ac419c96..c0ed3e9408a 100644 --- a/packages/api-websockets/__tests__/helpers/useHandler.ts +++ b/packages/api-websockets/__tests__/helpers/useHandler.ts @@ -15,10 +15,10 @@ import { WebsocketsTransport } from "~/transport/index.js"; import { MockWebsocketsTransport } from "~tests/mocks/MockWebsocketsTransport.js"; import { WebsocketsRouteHandler } from "~/features/Routes/abstractions.js"; import { ConnectionRegistry } from "~/features/ConnectionRegistry/abstractions.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; diff --git a/packages/api-websockets/package.json b/packages/api-websockets/package.json index 74022bd2ded..7e120b1aea9 100644 --- a/packages/api-websockets/package.json +++ b/packages/api-websockets/package.json @@ -27,8 +27,8 @@ "type-fest": "^5.8.0" }, "devDependencies": { + "@webiny/api-core-testing": "0.0.0", "@webiny/api-headless-cms": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/api-websockets/tsconfig.build.json b/packages/api-websockets/tsconfig.build.json index e66c16edf30..c2e829772db 100644 --- a/packages/api-websockets/tsconfig.build.json +++ b/packages/api-websockets/tsconfig.build.json @@ -10,8 +10,8 @@ { "path": "../feature/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -39,10 +39,10 @@ "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/api-websockets/tsconfig.json b/packages/api-websockets/tsconfig.json index d4d16c516f8..675a894d539 100644 --- a/packages/api-websockets/tsconfig.json +++ b/packages/api-websockets/tsconfig.json @@ -10,8 +10,8 @@ { "path": "../feature" }, { "path": "../handler" }, { "path": "../handler-graphql" }, + { "path": "../api-core-testing" }, { "path": "../api-headless-cms" }, - { "path": "../api-testing" }, { "path": "../aws-sdk" }, { "path": "../handler-db" }, { "path": "../wcp" } @@ -39,10 +39,10 @@ "@webiny/handler": ["../handler/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], diff --git a/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts b/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts index eebfd3fd2c5..f78a2bb7db2 100644 --- a/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useGraphQLHandler.ts @@ -14,9 +14,9 @@ import { BackgroundTasksFeature } from "~/api/BackgroundTasksFeature.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/background-tasks/__tests__/helpers/useRawHandler.ts b/packages/background-tasks/__tests__/helpers/useRawHandler.ts index 2bc66cafa60..08f21f31239 100644 --- a/packages/background-tasks/__tests__/helpers/useRawHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useRawHandler.ts @@ -17,9 +17,9 @@ import { TasksCrud } from "~/api/TasksCrud.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/background-tasks/__tests__/helpers/useTaskHandler.ts b/packages/background-tasks/__tests__/helpers/useTaskHandler.ts index f3bcae420b7..f3043fc514b 100644 --- a/packages/background-tasks/__tests__/helpers/useTaskHandler.ts +++ b/packages/background-tasks/__tests__/helpers/useTaskHandler.ts @@ -16,9 +16,9 @@ import { BackgroundTasksFeature } from "~/api/BackgroundTasksFeature.js"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { createMockTaskService } from "~tests/mocks/taskTriggerTransportPlugin"; import { TaskService } from "~/api/domain/TaskService.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; import { TenantFromHeaderInitializer } from "./mocks/TenantFromHeaderInitializer"; import { TaskRunner } from "~/api/runner/index.js"; import { TaskEventValidation } from "~/api/runner/TaskEventValidation.js"; diff --git a/packages/background-tasks/package.json b/packages/background-tasks/package.json index 58a3eddf42e..cdf2b504295 100644 --- a/packages/background-tasks/package.json +++ b/packages/background-tasks/package.json @@ -48,7 +48,7 @@ "zod": "4.4.3" }, "devDependencies": { - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/background-tasks/tsconfig.build.json b/packages/background-tasks/tsconfig.build.json index 9dc57add914..97226845556 100644 --- a/packages/background-tasks/tsconfig.build.json +++ b/packages/background-tasks/tsconfig.build.json @@ -16,7 +16,7 @@ { "path": "../plugins/tsconfig.build.json" }, { "path": "../sdk/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -56,8 +56,8 @@ "@webiny/sdk": ["../sdk/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], diff --git a/packages/background-tasks/tsconfig.json b/packages/background-tasks/tsconfig.json index 070e8a85126..d22bdbeaa0d 100644 --- a/packages/background-tasks/tsconfig.json +++ b/packages/background-tasks/tsconfig.json @@ -16,7 +16,7 @@ { "path": "../plugins" }, { "path": "../sdk" }, { "path": "../utils" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../aws-sdk" }, { "path": "../handler-aws" }, { "path": "../wcp" } @@ -56,8 +56,8 @@ "@webiny/sdk": ["../sdk/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], "@webiny/aws-sdk": ["../aws-sdk/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index e8839edf49c..0b80aef9eed 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -3199,7 +3199,7 @@ "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", - "/packages/api-testing/package.json", + "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3291,7 +3291,7 @@ "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", - "/packages/api-testing/package.json", + "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3457,7 +3457,7 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", - "/packages/api-testing/package.json", + "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -3588,7 +3588,7 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", - "/packages/api-testing/package.json", + "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -4936,7 +4936,7 @@ { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, - { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder-scheduler/package.json", @@ -5788,7 +5788,7 @@ { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, - { "file": "/packages/api-testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, diff --git a/packages/languages/__tests__/cmsManageRoute.test.ts b/packages/languages/__tests__/cmsManageRoute.test.ts index c9f359e9d74..40da5cb9ce4 100644 --- a/packages/languages/__tests__/cmsManageRoute.test.ts +++ b/packages/languages/__tests__/cmsManageRoute.test.ts @@ -21,10 +21,10 @@ import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js" import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./utils/bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/languages/__tests__/extensionRegistration.test.ts b/packages/languages/__tests__/extensionRegistration.test.ts index 36dc73ccb43..6a65fa28363 100644 --- a/packages/languages/__tests__/extensionRegistration.test.ts +++ b/packages/languages/__tests__/extensionRegistration.test.ts @@ -25,10 +25,10 @@ import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; import { LANGUAGE_MODEL_ID } from "~/shared/constants.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./utils/bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/languages/__tests__/utils/useHandler.ts b/packages/languages/__tests__/utils/useHandler.ts index 589266bd0bd..797b2afcbc5 100644 --- a/packages/languages/__tests__/utils/useHandler.ts +++ b/packages/languages/__tests__/utils/useHandler.ts @@ -9,10 +9,10 @@ import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js" import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types"; import { Extension } from "~/api/Extension.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; diff --git a/packages/languages/package.json b/packages/languages/package.json index 713777ae743..d1f2a429683 100644 --- a/packages/languages/package.json +++ b/packages/languages/package.json @@ -31,7 +31,7 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/db-dynamodb": "0.0.0", "@webiny/di": "^1.0.2", diff --git a/packages/languages/tsconfig.build.json b/packages/languages/tsconfig.build.json index 181dbc3f014..3ecfb4bca04 100644 --- a/packages/languages/tsconfig.build.json +++ b/packages/languages/tsconfig.build.json @@ -11,7 +11,7 @@ { "path": "../feature/tsconfig.build.json" }, { "path": "../project/tsconfig.build.json" }, { "path": "../project-aws/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../db-dynamodb/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -43,8 +43,8 @@ "@webiny/project": ["../project/src"], "@webiny/project-aws/*": ["../project-aws/src/*"], "@webiny/project-aws": ["../project-aws/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/languages/tsconfig.json b/packages/languages/tsconfig.json index a8e259bbacf..bd2ad850ca8 100644 --- a/packages/languages/tsconfig.json +++ b/packages/languages/tsconfig.json @@ -11,7 +11,7 @@ { "path": "../feature" }, { "path": "../project" }, { "path": "../project-aws" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../db-dynamodb" }, { "path": "../event-handler-core" }, { "path": "../handler" }, @@ -43,8 +43,8 @@ "@webiny/project": ["../project/src"], "@webiny/project-aws/*": ["../project-aws/src/*"], "@webiny/project-aws": ["../project-aws/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/testing/package.json b/packages/testing/package.json index 92fa7251582..487724c0d4f 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -17,13 +17,13 @@ "@webiny/api": "0.0.0", "@webiny/api-aco": "0.0.0", "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/api-file-manager": "0.0.0", "@webiny/api-headless-cms": "0.0.0", "@webiny/api-headless-cms-aco": "0.0.0", "@webiny/api-mailer": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/api-record-locking": "0.0.0", - "@webiny/api-testing": "0.0.0", "@webiny/api-websockets": "0.0.0", "@webiny/aws-sdk": "0.0.0", "@webiny/background-tasks": "0.0.0", diff --git a/packages/testing/src/context/tenancySecurity.ts b/packages/testing/src/context/tenancySecurity.ts index 8c91eeccdca..123b53eee5b 100644 --- a/packages/testing/src/context/tenancySecurity.ts +++ b/packages/testing/src/context/tenancySecurity.ts @@ -1,5 +1,5 @@ /** - * Shared test tenancy/security constants now live in the base @webiny/api-testing package; re-exported + * Shared test tenancy/security constants now live in the base @webiny/api-core-testing package; re-exported * here for existing consumers. Runtime setup is DI-native via `TenancyAndSecurityFeature`. */ export { @@ -7,4 +7,4 @@ export { FULL_ACCESS_ROLE_ID, FULL_ACCESS_TEAM_ID, UNKNOWN_TEAM_ID -} from "@webiny/api-testing"; +} from "@webiny/api-core-testing"; diff --git a/packages/testing/tsconfig.build.json b/packages/testing/tsconfig.build.json index 9471988df94..92284b3744e 100644 --- a/packages/testing/tsconfig.build.json +++ b/packages/testing/tsconfig.build.json @@ -5,13 +5,13 @@ { "path": "../api/tsconfig.build.json" }, { "path": "../api-aco/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-file-manager/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, { "path": "../api-headless-cms-aco/tsconfig.build.json" }, { "path": "../api-mailer/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../api-record-locking/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, { "path": "../api-websockets/tsconfig.build.json" }, { "path": "../aws-sdk/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, @@ -35,6 +35,8 @@ "@webiny/api-aco": ["../api-aco/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], @@ -47,8 +49,6 @@ "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], "@webiny/api-record-locking": ["../api-record-locking/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/api-websockets/*": ["../api-websockets/src/*"], "@webiny/api-websockets": ["../api-websockets/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], diff --git a/packages/testing/tsconfig.json b/packages/testing/tsconfig.json index 8a93f12af2d..4e3b1329b15 100644 --- a/packages/testing/tsconfig.json +++ b/packages/testing/tsconfig.json @@ -5,13 +5,13 @@ { "path": "../api" }, { "path": "../api-aco" }, { "path": "../api-core" }, + { "path": "../api-core-testing" }, { "path": "../api-file-manager" }, { "path": "../api-headless-cms" }, { "path": "../api-headless-cms-aco" }, { "path": "../api-mailer" }, { "path": "../api-opensearch" }, { "path": "../api-record-locking" }, - { "path": "../api-testing" }, { "path": "../api-websockets" }, { "path": "../aws-sdk" }, { "path": "../background-tasks" }, @@ -35,6 +35,8 @@ "@webiny/api-aco": ["../api-aco/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], @@ -47,8 +49,6 @@ "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], "@webiny/api-record-locking": ["../api-record-locking/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], "@webiny/api-websockets/*": ["../api-websockets/src/*"], "@webiny/api-websockets": ["../api-websockets/src"], "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], diff --git a/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts b/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts index abdfb5c94c6..3b37ee78b72 100644 --- a/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts +++ b/packages/webhooks/__tests__/helpers/useGraphQLHandler.ts @@ -11,10 +11,10 @@ import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { Extension } from "~/api/Extension.js"; import { NoopTaskServiceFeature, noopTaskService } from "./NoopTaskService.js"; import { TestWebhookProviderFeature } from "./TestWebhookProvider.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; diff --git a/packages/webhooks/__tests__/helpers/useHandler.ts b/packages/webhooks/__tests__/helpers/useHandler.ts index fe4721dd35b..ea701f603d0 100644 --- a/packages/webhooks/__tests__/helpers/useHandler.ts +++ b/packages/webhooks/__tests__/helpers/useHandler.ts @@ -12,10 +12,10 @@ import { processLegacyPlugins } from "./bridgeLegacyPlugins"; import { Extension } from "~/api/Extension.js"; import { NoopTaskServiceFeature, noopTaskService } from "./NoopTaskService.js"; import { TestWebhookProviderFeature } from "./TestWebhookProvider.js"; -import { TestIdentity, TestAuthenticator } from "@webiny/api-testing"; -import { TestPermissions, TestAuthorizer } from "@webiny/api-testing"; -import { AuthTriggerHandler } from "@webiny/api-testing"; -import { RootTenantInitializer } from "@webiny/api-testing"; +import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; +import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; +import { AuthTriggerHandler } from "@webiny/api-core-testing"; +import { RootTenantInitializer } from "@webiny/api-core-testing"; import { BuildParam } from "@webiny/api-core/features/buildParams/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; diff --git a/packages/webhooks/package.json b/packages/webhooks/package.json index 32f9b83970b..27d0fbd1b67 100644 --- a/packages/webhooks/package.json +++ b/packages/webhooks/package.json @@ -41,7 +41,7 @@ }, "devDependencies": { "@webiny/api": "0.0.0", - "@webiny/api-testing": "0.0.0", + "@webiny/api-core-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/webhooks/tsconfig.build.json b/packages/webhooks/tsconfig.build.json index 592662c374b..a03cce005b2 100644 --- a/packages/webhooks/tsconfig.build.json +++ b/packages/webhooks/tsconfig.build.json @@ -13,7 +13,7 @@ { "path": "../sdk/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api/tsconfig.build.json" }, - { "path": "../api-testing/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -47,8 +47,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api/*": ["../api/src/*"], "@webiny/api": ["../api/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/webhooks/tsconfig.json b/packages/webhooks/tsconfig.json index c83b65ed0e4..f38dad6591d 100644 --- a/packages/webhooks/tsconfig.json +++ b/packages/webhooks/tsconfig.json @@ -13,7 +13,7 @@ { "path": "../sdk" }, { "path": "../utils" }, { "path": "../api" }, - { "path": "../api-testing" }, + { "path": "../api-core-testing" }, { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../wcp" } @@ -47,8 +47,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api/*": ["../api/src/*"], "@webiny/api": ["../api/src"], - "@webiny/api-testing/*": ["../api-testing/src/*"], - "@webiny/api-testing": ["../api-testing/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/yarn.lock b/yarn.lock index da78261f43c..795e12166a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10453,9 +10453,9 @@ __metadata: dependencies: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -10606,6 +10606,19 @@ __metadata: languageName: unknown linkType: soft +"@webiny/api-core-testing@npm:0.0.0, @webiny/api-core-testing@workspace:packages/api-core-testing": + version: 0.0.0-use.local + resolution: "@webiny/api-core-testing@workspace:packages/api-core-testing" + dependencies: + "@webiny/api-core": "npm:0.0.0" + "@webiny/build-tools": "npm:0.0.0" + "@webiny/di": "npm:^1.0.2" + "@webiny/event-handler-core": "npm:0.0.0" + rimraf: "npm:^6.1.3" + typescript: "npm:7.0.2" + languageName: unknown + linkType: soft + "@webiny/api-core@npm:0.0.0, @webiny/api-core@workspace:packages/api-core": version: 0.0.0-use.local resolution: "@webiny/api-core@workspace:packages/api-core" @@ -10849,9 +10862,9 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/error": "npm:0.0.0" @@ -10932,8 +10945,8 @@ __metadata: "@types/object-hash": "npm:^3.0.6" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -10966,8 +10979,8 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-core": "npm:0.0.0" @@ -11016,11 +11029,11 @@ __metadata: "@types/jsonpack": "npm:^1.1.6" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-dynamodb-to-elasticsearch": "npm:0.0.0" "@webiny/api-elasticsearch-tasks": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db": "npm:0.0.0" @@ -11228,7 +11241,7 @@ __metadata: "@types/pluralize": "npm:^0.0.33" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db-dynamodb": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11317,8 +11330,8 @@ __metadata: "@graphql-tools/schema": "npm:10.0.36" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11343,9 +11356,9 @@ __metadata: dependencies: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-scheduler": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/db-dynamodb": "npm:0.0.0" @@ -11439,19 +11452,6 @@ __metadata: languageName: unknown linkType: soft -"@webiny/api-testing@npm:0.0.0, @webiny/api-testing@workspace:packages/api-testing": - version: 0.0.0-use.local - resolution: "@webiny/api-testing@workspace:packages/api-testing" - dependencies: - "@webiny/api-core": "npm:0.0.0" - "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.2" - "@webiny/event-handler-core": "npm:0.0.0" - rimraf: "npm:^6.1.3" - typescript: "npm:7.0.2" - languageName: unknown - linkType: soft - "@webiny/api-website-builder-scheduler@npm:0.0.0, @webiny/api-website-builder-scheduler@workspace:packages/api-website-builder-scheduler": version: 0.0.0-use.local resolution: "@webiny/api-website-builder-scheduler@workspace:packages/api-website-builder-scheduler" @@ -11534,8 +11534,8 @@ __metadata: dependencies: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11620,8 +11620,8 @@ __metadata: dependencies: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -12466,8 +12466,8 @@ __metadata: "@webiny/admin-ui": "npm:0.0.0" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" @@ -12957,8 +12957,8 @@ __metadata: dependencies: "@webiny/admin-ui": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/app-headless-cms": "npm:0.0.0" @@ -13573,13 +13573,13 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-headless-cms-aco": "npm:0.0.0" "@webiny/api-mailer": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/api-record-locking": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/api-websockets": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" @@ -13649,8 +13649,8 @@ __metadata: "@webiny/admin-ui": "npm:0.0.0" "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-testing": "npm:0.0.0" "@webiny/app": "npm:0.0.0" "@webiny/app-admin": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" From d2fbee6ecd817966523e58796e6a99631980b910 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Mon, 13 Jul 2026 16:40:57 +0200 Subject: [PATCH 25/31] refactor(testing): extract createCmsTestHandler into @webiny/api-headless-cms-testing Moves the CMS integration test handler off the @webiny/api-headless-cms/testing subpath into a dedicated sibling package (keeps test scaffolding out of the shipped api-headless-cms bundle). Repointed all 9 consumer packages + added the devDep; dropped the subpath. Deps api-headless-cms + api-core-testing. Note: references.json not regenerated (webiny CLI generator needs a full local build; it's a non-CI-checked cache that self-corrects on a clean sync-dependencies). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/utils/useGraphQlHandler.ts | 2 +- packages/api-aco/package.json | 1 + packages/api-aco/tsconfig.build.json | 3 ++ packages/api-aco/tsconfig.json | 3 ++ .../__tests__/context/useGraphQLHandler.ts | 2 +- .../package.json | 1 + .../tsconfig.build.json | 3 ++ .../tsconfig.json | 3 ++ .../__tests__/context/useHandler.ts | 4 +- .../api-headless-cms-es-tasks/package.json | 1 + .../tsconfig.build.json | 3 ++ .../api-headless-cms-es-tasks/tsconfig.json | 3 ++ .../__tests__/__mocks/context/useHandler.ts | 4 +- .../api-headless-cms-scheduler/package.json | 1 + .../tsconfig.build.json | 3 ++ .../api-headless-cms-scheduler/tsconfig.json | 3 ++ .../__tests__/context/useHandler.ts | 4 +- packages/api-headless-cms-tasks/package.json | 1 + .../tsconfig.build.json | 3 ++ packages/api-headless-cms-tasks/tsconfig.json | 3 ++ .../api-headless-cms-testing/package.json | 39 +++++++++++++++++++ .../src}/createCmsTestHandler.ts | 4 +- .../src}/index.ts | 0 .../src}/processLegacyPlugins.ts | 0 .../tsconfig.build.json | 33 ++++++++++++++++ .../api-headless-cms-testing/tsconfig.json | 33 ++++++++++++++++ .../api-headless-cms-testing/webiny.config.js | 8 ++++ .../__tests__/__handler/context.ts | 4 +- .../__tests__/entrySystemSchema.test.ts | 2 +- .../api-headless-cms-workflows/package.json | 1 + .../tsconfig.build.json | 3 ++ .../api-headless-cms-workflows/tsconfig.json | 3 ++ .../__tests__/__mocks/context/useHandler.ts | 4 +- .../package.json | 1 + .../tsconfig.build.json | 3 ++ .../tsconfig.json | 3 ++ .../__tests__/wbPageSystem.test.ts | 2 +- .../package.json | 1 + .../tsconfig.build.json | 3 ++ .../tsconfig.json | 3 ++ .../__tests__/utils/useGraphQlHandler.ts | 4 +- .../__tests__/utils/useHandler.ts | 4 +- packages/api-website-builder/package.json | 1 + .../api-website-builder/tsconfig.build.json | 3 ++ packages/api-website-builder/tsconfig.json | 3 ++ yarn.lock | 28 +++++++++++++ 46 files changed, 224 insertions(+), 20 deletions(-) create mode 100644 packages/api-headless-cms-testing/package.json rename packages/{api-headless-cms/src/testing => api-headless-cms-testing/src}/createCmsTestHandler.ts (97%) rename packages/{api-headless-cms/src/testing => api-headless-cms-testing/src}/index.ts (100%) rename packages/{api-headless-cms/src/testing => api-headless-cms-testing/src}/processLegacyPlugins.ts (100%) create mode 100644 packages/api-headless-cms-testing/tsconfig.build.json create mode 100644 packages/api-headless-cms-testing/tsconfig.json create mode 100644 packages/api-headless-cms-testing/webiny.config.js diff --git a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts index 2908ef5acfa..a8a1442e2a7 100644 --- a/packages/api-aco/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-aco/__tests__/utils/useGraphQlHandler.ts @@ -2,7 +2,7 @@ import { getIntrospectionQuery } from "graphql"; import { FileModel } from "@webiny/api-file-manager/domain/file/file.model.js"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import { until } from "@webiny/project-utils/testing/helpers/until.js"; -import { createCmsTestHandler, processLegacyPlugins } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler, processLegacyPlugins } from "@webiny/api-headless-cms-testing"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types"; diff --git a/packages/api-aco/package.json b/packages/api-aco/package.json index 93e876eff4e..75b1829ef89 100644 --- a/packages/api-aco/package.json +++ b/packages/api-aco/package.json @@ -39,6 +39,7 @@ "devDependencies": { "@webiny/api-core-testing": "0.0.0", "@webiny/api-file-manager": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/plugins": "0.0.0", diff --git a/packages/api-aco/tsconfig.build.json b/packages/api-aco/tsconfig.build.json index 6bb8bc3cab1..5da6af76afe 100644 --- a/packages/api-aco/tsconfig.build.json +++ b/packages/api-aco/tsconfig.build.json @@ -16,6 +16,7 @@ { "path": "../validation/tsconfig.build.json" }, { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-file-manager/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } @@ -55,6 +56,8 @@ "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-aco/tsconfig.json b/packages/api-aco/tsconfig.json index 2637de7c9bc..593884bc6ab 100644 --- a/packages/api-aco/tsconfig.json +++ b/packages/api-aco/tsconfig.json @@ -16,6 +16,7 @@ { "path": "../validation" }, { "path": "../api-core-testing" }, { "path": "../api-file-manager" }, + { "path": "../api-headless-cms-testing" }, { "path": "../handler-aws" }, { "path": "../plugins" }, { "path": "../wcp" } @@ -55,6 +56,8 @@ "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], "@webiny/api-file-manager": ["../api-file-manager/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], diff --git a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts index 5a81108ee04..947837f40a4 100644 --- a/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts +++ b/packages/api-headless-cms-bulk-actions/__tests__/context/useGraphQLHandler.ts @@ -1,6 +1,6 @@ import { getIntrospectionQuery } from "graphql"; import { HeadlessCmsContextualSchema } from "@webiny/api-headless-cms/HeadlessCmsContextualSchema.js"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; import { until } from "@webiny/project-utils/testing/helpers/until.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; diff --git a/packages/api-headless-cms-bulk-actions/package.json b/packages/api-headless-cms-bulk-actions/package.json index 08c278c40b6..0fd079e4bf2 100644 --- a/packages/api-headless-cms-bulk-actions/package.json +++ b/packages/api-headless-cms-bulk-actions/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@webiny/api": "0.0.0", "@webiny/api-core": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/handler-graphql": "0.0.0", diff --git a/packages/api-headless-cms-bulk-actions/tsconfig.build.json b/packages/api-headless-cms-bulk-actions/tsconfig.build.json index d85022f97a1..dc96909eef4 100644 --- a/packages/api-headless-cms-bulk-actions/tsconfig.build.json +++ b/packages/api-headless-cms-bulk-actions/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../utils/tsconfig.build.json" }, { "path": "../api/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" } ], @@ -45,6 +46,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-headless-cms-bulk-actions/tsconfig.json b/packages/api-headless-cms-bulk-actions/tsconfig.json index 76fe3e48b6e..a2c8cc8f391 100644 --- a/packages/api-headless-cms-bulk-actions/tsconfig.json +++ b/packages/api-headless-cms-bulk-actions/tsconfig.json @@ -13,6 +13,7 @@ { "path": "../utils" }, { "path": "../api" }, { "path": "../api-core" }, + { "path": "../api-headless-cms-testing" }, { "path": "../plugins" }, { "path": "../wcp" } ], @@ -45,6 +46,8 @@ "@webiny/api": ["../api/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"], "@webiny/wcp/*": ["../wcp/src/*"], diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts index b0e68816f49..16b0d7576b5 100644 --- a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts @@ -4,8 +4,8 @@ import { getDocumentClient } from "@webiny/project-utils/testing/dynamodb/index. import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; import { BackgroundTasksFeature, TaskService, TasksCrud } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import type { Context } from "~/types"; import { HeadlessCmsEsTasksFeature } from "~/index.js"; diff --git a/packages/api-headless-cms-es-tasks/package.json b/packages/api-headless-cms-es-tasks/package.json index 7517b14f1d1..86b7ebf66af 100644 --- a/packages/api-headless-cms-es-tasks/package.json +++ b/packages/api-headless-cms-es-tasks/package.json @@ -27,6 +27,7 @@ "@webiny/utils": "0.0.0" }, "devDependencies": { + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler-db": "0.0.0", "@webiny/handler-graphql": "0.0.0", diff --git a/packages/api-headless-cms-es-tasks/tsconfig.build.json b/packages/api-headless-cms-es-tasks/tsconfig.build.json index df0e7820b2a..75c3657e2e2 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.build.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../handler-db/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" } ], @@ -36,6 +37,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], "@webiny/handler-db": ["../handler-db/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], diff --git a/packages/api-headless-cms-es-tasks/tsconfig.json b/packages/api-headless-cms-es-tasks/tsconfig.json index 3d5546fa6a5..c2e40ea25cc 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../error" }, { "path": "../feature" }, { "path": "../utils" }, + { "path": "../api-headless-cms-testing" }, { "path": "../handler-db" }, { "path": "../handler-graphql" }, { "path": "../testing" } @@ -37,6 +38,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler-db/*": ["../handler-db/src/*"], "@webiny/handler-db": ["../handler-db/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], diff --git a/packages/api-headless-cms-scheduler/__tests__/__mocks/context/useHandler.ts b/packages/api-headless-cms-scheduler/__tests__/__mocks/context/useHandler.ts index 413bb8ff812..0f8b540489f 100644 --- a/packages/api-headless-cms-scheduler/__tests__/__mocks/context/useHandler.ts +++ b/packages/api-headless-cms-scheduler/__tests__/__mocks/context/useHandler.ts @@ -1,6 +1,6 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; import { CmsSchedulerFeature } from "~/CmsSchedulerFeature.js"; import { SchedulerFeature, SchedulerService } from "@webiny/api-scheduler"; diff --git a/packages/api-headless-cms-scheduler/package.json b/packages/api-headless-cms-scheduler/package.json index 1db7fa69a9a..cd902ff1e85 100644 --- a/packages/api-headless-cms-scheduler/package.json +++ b/packages/api-headless-cms-scheduler/package.json @@ -24,6 +24,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/project-utils": "0.0.0", diff --git a/packages/api-headless-cms-scheduler/tsconfig.build.json b/packages/api-headless-cms-scheduler/tsconfig.build.json index 2c9996c31b7..d109cb84097 100644 --- a/packages/api-headless-cms-scheduler/tsconfig.build.json +++ b/packages/api-headless-cms-scheduler/tsconfig.build.json @@ -7,6 +7,7 @@ { "path": "../api-scheduler/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" } ], "compilerOptions": { @@ -26,6 +27,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"] } diff --git a/packages/api-headless-cms-scheduler/tsconfig.json b/packages/api-headless-cms-scheduler/tsconfig.json index 6de202f3bf1..d197d19edc8 100644 --- a/packages/api-headless-cms-scheduler/tsconfig.json +++ b/packages/api-headless-cms-scheduler/tsconfig.json @@ -7,6 +7,7 @@ { "path": "../api-scheduler" }, { "path": "../feature" }, { "path": "../api-core" }, + { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../testing" } ], @@ -27,6 +28,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/testing/*": ["../testing/src/*"], diff --git a/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts index d33e9f479f1..8661d04c514 100644 --- a/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts +++ b/packages/api-headless-cms-tasks/__tests__/context/useHandler.ts @@ -3,8 +3,8 @@ import { DbFeature } from "@webiny/handler-db"; import { getDocumentClient } from "@webiny/project-utils/testing/dynamodb/index.js"; import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import type { HcmsTasksContext } from "~/types"; import { HcmsTasksFeature } from "~/HcmsTasksFeature.js"; diff --git a/packages/api-headless-cms-tasks/package.json b/packages/api-headless-cms-tasks/package.json index f7fbf24e6e5..fa63f33039e 100644 --- a/packages/api-headless-cms-tasks/package.json +++ b/packages/api-headless-cms-tasks/package.json @@ -33,6 +33,7 @@ }, "devDependencies": { "@webiny/api-core": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/event-handler-core": "0.0.0", diff --git a/packages/api-headless-cms-tasks/tsconfig.build.json b/packages/api-headless-cms-tasks/tsconfig.build.json index fe3f3a09457..9778642ea7f 100644 --- a/packages/api-headless-cms-tasks/tsconfig.build.json +++ b/packages/api-headless-cms-tasks/tsconfig.build.json @@ -14,6 +14,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -50,6 +51,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms-tasks/tsconfig.json b/packages/api-headless-cms-tasks/tsconfig.json index 16eb8e80cec..c3a78f98e31 100644 --- a/packages/api-headless-cms-tasks/tsconfig.json +++ b/packages/api-headless-cms-tasks/tsconfig.json @@ -14,6 +14,7 @@ { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../api-core" }, + { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../event-handler-core" }, { "path": "../handler" }, @@ -51,6 +52,8 @@ "@webiny/utils": ["../utils/src"], "@webiny/api-core/*": ["../api-core/src/*"], "@webiny/api-core": ["../api-core/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], diff --git a/packages/api-headless-cms-testing/package.json b/packages/api-headless-cms-testing/package.json new file mode 100644 index 00000000000..d480fd0b658 --- /dev/null +++ b/packages/api-headless-cms-testing/package.json @@ -0,0 +1,39 @@ +{ + "name": "@webiny/api-headless-cms-testing", + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./index.js", + "./*": "./*" + }, + "repository": { + "type": "git", + "url": "https://github.com/webiny/webiny-js.git", + "directory": "packages/api-headless-cms-testing" + }, + "description": "Shared Headless CMS integration test handler (createCmsTestHandler) for Webiny API packages.", + "author": "Webiny Ltd.", + "license": "MIT", + "dependencies": { + "@webiny/api-core": "0.0.0", + "@webiny/api-core-testing": "0.0.0", + "@webiny/api-headless-cms": "0.0.0", + "@webiny/di": "^1.0.2", + "@webiny/event-handler-core": "0.0.0", + "@webiny/handler-graphql": "0.0.0", + "@webiny/project-utils": "0.0.0", + "@webiny/wcp": "0.0.0", + "graphql": "^16.14.2" + }, + "devDependencies": { + "@webiny/build-tools": "0.0.0", + "rimraf": "^6.1.3", + "typescript": "7.0.2" + }, + "publishConfig": { + "access": "public" + }, + "webiny": { + "publishFrom": "dist" + } +} diff --git a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts b/packages/api-headless-cms-testing/src/createCmsTestHandler.ts similarity index 97% rename from packages/api-headless-cms/src/testing/createCmsTestHandler.ts rename to packages/api-headless-cms-testing/src/createCmsTestHandler.ts index 140c94e683a..9d1f3d3e891 100644 --- a/packages/api-headless-cms/src/testing/createCmsTestHandler.ts +++ b/packages/api-headless-cms-testing/src/createCmsTestHandler.ts @@ -15,8 +15,8 @@ import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; import type { SecurityPermission } from "@webiny/api-core/types/security.js"; import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types.js"; -import { HeadlessCmsFeature } from "~/HeadlessCmsFeature.js"; -import type { HeadlessCmsStorageOperations } from "~/types/types.js"; +import { HeadlessCmsFeature } from "@webiny/api-headless-cms/HeadlessCmsFeature.js"; +import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types/types.js"; import { TestIdentity, TestAuthenticator } from "@webiny/api-core-testing"; import { TestPermissions, TestAuthorizer } from "@webiny/api-core-testing"; import { AuthTriggerHandler } from "@webiny/api-core-testing"; diff --git a/packages/api-headless-cms/src/testing/index.ts b/packages/api-headless-cms-testing/src/index.ts similarity index 100% rename from packages/api-headless-cms/src/testing/index.ts rename to packages/api-headless-cms-testing/src/index.ts diff --git a/packages/api-headless-cms/src/testing/processLegacyPlugins.ts b/packages/api-headless-cms-testing/src/processLegacyPlugins.ts similarity index 100% rename from packages/api-headless-cms/src/testing/processLegacyPlugins.ts rename to packages/api-headless-cms-testing/src/processLegacyPlugins.ts diff --git a/packages/api-headless-cms-testing/tsconfig.build.json b/packages/api-headless-cms-testing/tsconfig.build.json new file mode 100644 index 00000000000..cf58ea13fbe --- /dev/null +++ b/packages/api-headless-cms-testing/tsconfig.build.json @@ -0,0 +1,33 @@ +{ + "extends": "../../tsconfig.build.json", + "include": ["src"], + "references": [ + { "path": "../api-core/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, + { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../event-handler-core/tsconfig.build.json" }, + { "path": "../handler-graphql/tsconfig.build.json" }, + { "path": "../wcp/tsconfig.build.json" } + ], + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "declarationDir": "./dist", + "paths": { + "~/*": ["./src/*"], + "~tests/*": ["./__tests__/*"], + "@webiny/api-core/*": ["../api-core/src/*"], + "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], + "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], + "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], + "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], + "@webiny/handler-graphql": ["../handler-graphql/src"], + "@webiny/wcp/*": ["../wcp/src/*"], + "@webiny/wcp": ["../wcp/src"] + } + } +} diff --git a/packages/api-headless-cms-testing/tsconfig.json b/packages/api-headless-cms-testing/tsconfig.json new file mode 100644 index 00000000000..832ab7e5cf4 --- /dev/null +++ b/packages/api-headless-cms-testing/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "__tests__"], + "references": [ + { "path": "../api-core" }, + { "path": "../api-core-testing" }, + { "path": "../api-headless-cms" }, + { "path": "../event-handler-core" }, + { "path": "../handler-graphql" }, + { "path": "../wcp" } + ], + "compilerOptions": { + "rootDirs": ["./src", "./__tests__"], + "outDir": "./dist", + "declarationDir": "./dist", + "paths": { + "~/*": ["./src/*"], + "~tests/*": ["./__tests__/*"], + "@webiny/api-core/*": ["../api-core/src/*"], + "@webiny/api-core": ["../api-core/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], + "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], + "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], + "@webiny/event-handler-core": ["../event-handler-core/src"], + "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], + "@webiny/handler-graphql": ["../handler-graphql/src"], + "@webiny/wcp/*": ["../wcp/src/*"], + "@webiny/wcp": ["../wcp/src"] + } + } +} diff --git a/packages/api-headless-cms-testing/webiny.config.js b/packages/api-headless-cms-testing/webiny.config.js new file mode 100644 index 00000000000..4f5e3db04b9 --- /dev/null +++ b/packages/api-headless-cms-testing/webiny.config.js @@ -0,0 +1,8 @@ +import { createWatchPackage, createBuildPackage } from "@webiny/build-tools"; + +export default { + commands: { + build: createBuildPackage({ cwd: import.meta.dirname }), + watch: createWatchPackage({ cwd: import.meta.dirname }) + } +}; diff --git a/packages/api-headless-cms-workflows/__tests__/__handler/context.ts b/packages/api-headless-cms-workflows/__tests__/__handler/context.ts index a9d412ea45a..cd3df99af1d 100644 --- a/packages/api-headless-cms-workflows/__tests__/__handler/context.ts +++ b/packages/api-headless-cms-workflows/__tests__/__handler/context.ts @@ -1,8 +1,8 @@ import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { createRegisterExtensionPlugin } from "@webiny/handler"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import { NoopFolderLevelPermissions } from "@webiny/api-aco/features/flp/FolderLevelPermissions/index.js"; import { createModelsPlugins, type ICreateModelsPluginsParams } from "../__cms/models.js"; import { CmsWorkflowsFeature } from "~/index.js"; diff --git a/packages/api-headless-cms-workflows/__tests__/entrySystemSchema.test.ts b/packages/api-headless-cms-workflows/__tests__/entrySystemSchema.test.ts index 3cb0169acc2..6b1004efd63 100644 --- a/packages/api-headless-cms-workflows/__tests__/entrySystemSchema.test.ts +++ b/packages/api-headless-cms-workflows/__tests__/entrySystemSchema.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; import { CmsWorkflowsFeature } from "~/index.js"; const CMS_ENTRY_SYSTEM_FIELDS = /* GraphQL */ ` diff --git a/packages/api-headless-cms-workflows/package.json b/packages/api-headless-cms-workflows/package.json index b33de51d6b3..3a010d7a7f9 100644 --- a/packages/api-headless-cms-workflows/package.json +++ b/packages/api-headless-cms-workflows/package.json @@ -27,6 +27,7 @@ "@webiny/shared-aco": "0.0.0" }, "devDependencies": { + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler": "0.0.0", diff --git a/packages/api-headless-cms-workflows/tsconfig.build.json b/packages/api-headless-cms-workflows/tsconfig.build.json index cd482746997..b03a4740e25 100644 --- a/packages/api-headless-cms-workflows/tsconfig.build.json +++ b/packages/api-headless-cms-workflows/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../shared-aco/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, @@ -38,6 +39,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/shared-aco/*": ["../shared-aco/src/*"], "@webiny/shared-aco": ["../shared-aco/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-headless-cms-workflows/tsconfig.json b/packages/api-headless-cms-workflows/tsconfig.json index 8e03312ad9a..93f6677a2ca 100644 --- a/packages/api-headless-cms-workflows/tsconfig.json +++ b/packages/api-headless-cms-workflows/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../error" }, { "path": "../feature" }, { "path": "../shared-aco" }, + { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../handler" }, { "path": "../plugins" }, @@ -39,6 +40,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/shared-aco/*": ["../shared-aco/src/*"], "@webiny/shared-aco": ["../shared-aco/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts index 4c0ac0bee9a..8efb82c7397 100644 --- a/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts +++ b/packages/api-website-builder-scheduler/__tests__/__mocks/context/useHandler.ts @@ -1,6 +1,6 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import { WebsiteBuilderSchedulerFeature } from "~/WebsiteBuilderSchedulerFeature.js"; import { SchedulerFeature, SchedulerService } from "@webiny/api-scheduler"; diff --git a/packages/api-website-builder-scheduler/package.json b/packages/api-website-builder-scheduler/package.json index be45ba59e8d..cb9c5ceaaca 100644 --- a/packages/api-website-builder-scheduler/package.json +++ b/packages/api-website-builder-scheduler/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@webiny/api-core": "0.0.0", "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", diff --git a/packages/api-website-builder-scheduler/tsconfig.build.json b/packages/api-website-builder-scheduler/tsconfig.build.json index b829399e870..73609856e89 100644 --- a/packages/api-website-builder-scheduler/tsconfig.build.json +++ b/packages/api-website-builder-scheduler/tsconfig.build.json @@ -8,6 +8,7 @@ { "path": "../feature/tsconfig.build.json" }, { "path": "../api-core/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" } ], @@ -30,6 +31,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], diff --git a/packages/api-website-builder-scheduler/tsconfig.json b/packages/api-website-builder-scheduler/tsconfig.json index b0842a9186a..e7c168eba6d 100644 --- a/packages/api-website-builder-scheduler/tsconfig.json +++ b/packages/api-website-builder-scheduler/tsconfig.json @@ -8,6 +8,7 @@ { "path": "../feature" }, { "path": "../api-core" }, { "path": "../api-headless-cms" }, + { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../background-tasks" }, { "path": "../testing" } @@ -31,6 +32,8 @@ "@webiny/api-core": ["../api-core/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], diff --git a/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts b/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts index 0f2d3f51722..c0855b4e412 100644 --- a/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts +++ b/packages/api-website-builder-workflows/__tests__/wbPageSystem.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; import { WebsiteBuilderFeature } from "@webiny/api-website-builder"; import { WebsiteBuilderWorkflowsFeature } from "~/index.js"; diff --git a/packages/api-website-builder-workflows/package.json b/packages/api-website-builder-workflows/package.json index eedd6f3669a..605a5f85da8 100644 --- a/packages/api-website-builder-workflows/package.json +++ b/packages/api-website-builder-workflows/package.json @@ -29,6 +29,7 @@ }, "devDependencies": { "@webiny/api-headless-cms": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", diff --git a/packages/api-website-builder-workflows/tsconfig.build.json b/packages/api-website-builder-workflows/tsconfig.build.json index 6ef2069d86e..8350292365e 100644 --- a/packages/api-website-builder-workflows/tsconfig.build.json +++ b/packages/api-website-builder-workflows/tsconfig.build.json @@ -12,6 +12,7 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../shared-aco/tsconfig.build.json" }, { "path": "../api-headless-cms/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" } ], "compilerOptions": { @@ -41,6 +42,8 @@ "@webiny/shared-aco": ["../shared-aco/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-website-builder-workflows/tsconfig.json b/packages/api-website-builder-workflows/tsconfig.json index 213b699f20b..3bd73c0eab9 100644 --- a/packages/api-website-builder-workflows/tsconfig.json +++ b/packages/api-website-builder-workflows/tsconfig.json @@ -12,6 +12,7 @@ { "path": "../handler-graphql" }, { "path": "../shared-aco" }, { "path": "../api-headless-cms" }, + { "path": "../api-headless-cms-testing" }, { "path": "../plugins" }, { "path": "../testing" } ], @@ -42,6 +43,8 @@ "@webiny/shared-aco": ["../shared-aco/src"], "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], "@webiny/api-headless-cms": ["../api-headless-cms/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"], "@webiny/testing/*": ["../testing/src/*"], diff --git a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts index 53c046347a4..e68da1021d4 100644 --- a/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useGraphQlHandler.ts @@ -2,8 +2,8 @@ import { getIntrospectionQuery } from "graphql"; import { until } from "@webiny/project-utils/testing/helpers/until.js"; import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import { createContextPlugin } from "@webiny/api"; import { InvalidateCloudfrontCacheTaskDefinition } from "@webiny/api-file-manager-s3/features/FlushCache/InvalidateCacheTask.js"; import { WebsiteBuilderFeature } from "~/index.js"; diff --git a/packages/api-website-builder/__tests__/utils/useHandler.ts b/packages/api-website-builder/__tests__/utils/useHandler.ts index d148aee8e61..6d762bd34c5 100644 --- a/packages/api-website-builder/__tests__/utils/useHandler.ts +++ b/packages/api-website-builder/__tests__/utils/useHandler.ts @@ -1,8 +1,8 @@ import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; -import { createCmsTestHandler } from "@webiny/api-headless-cms/testing"; -import type { CmsTestHandlerParams } from "@webiny/api-headless-cms/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import type { ApiCoreContext } from "@webiny/api-core/types/core.js"; import { createContextPlugin } from "@webiny/api"; import { InvalidateCloudfrontCacheTaskDefinition } from "@webiny/api-file-manager-s3/features/FlushCache/InvalidateCacheTask.js"; diff --git a/packages/api-website-builder/package.json b/packages/api-website-builder/package.json index 5d3e6fb4847..37693cf29a3 100644 --- a/packages/api-website-builder/package.json +++ b/packages/api-website-builder/package.json @@ -36,6 +36,7 @@ "devDependencies": { "@webiny/api-core-ddb": "0.0.0", "@webiny/api-file-manager-s3": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", diff --git a/packages/api-website-builder/tsconfig.build.json b/packages/api-website-builder/tsconfig.build.json index 55ca7e9dba3..c705322688e 100644 --- a/packages/api-website-builder/tsconfig.build.json +++ b/packages/api-website-builder/tsconfig.build.json @@ -14,6 +14,7 @@ { "path": "../utils/tsconfig.build.json" }, { "path": "../api-core-ddb/tsconfig.build.json" }, { "path": "../api-file-manager-s3/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" }, @@ -50,6 +51,8 @@ "@webiny/api-core-ddb": ["../api-core-ddb/src"], "@webiny/api-file-manager-s3/*": ["../api-file-manager-s3/src/*"], "@webiny/api-file-manager-s3": ["../api-file-manager-s3/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], diff --git a/packages/api-website-builder/tsconfig.json b/packages/api-website-builder/tsconfig.json index 2e8ba4727fe..b266b4c9a27 100644 --- a/packages/api-website-builder/tsconfig.json +++ b/packages/api-website-builder/tsconfig.json @@ -14,6 +14,7 @@ { "path": "../utils" }, { "path": "../api-core-ddb" }, { "path": "../api-file-manager-s3" }, + { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../background-tasks" }, { "path": "../plugins" }, @@ -51,6 +52,8 @@ "@webiny/api-core-ddb": ["../api-core-ddb/src"], "@webiny/api-file-manager-s3/*": ["../api-file-manager-s3/src/*"], "@webiny/api-file-manager-s3": ["../api-file-manager-s3/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], diff --git a/yarn.lock b/yarn.lock index 795e12166a2..4b2d8f1533c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10456,6 +10456,7 @@ __metadata: "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -11003,6 +11004,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11092,6 +11094,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-headless-cms-ddb-es": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11114,6 +11117,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/api-scheduler": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11186,6 +11190,7 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-headless-cms-bulk-actions": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11207,6 +11212,25 @@ __metadata: languageName: unknown linkType: soft +"@webiny/api-headless-cms-testing@npm:0.0.0, @webiny/api-headless-cms-testing@workspace:packages/api-headless-cms-testing": + version: 0.0.0-use.local + resolution: "@webiny/api-headless-cms-testing@workspace:packages/api-headless-cms-testing" + dependencies: + "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" + "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/build-tools": "npm:0.0.0" + "@webiny/di": "npm:^1.0.2" + "@webiny/event-handler-core": "npm:0.0.0" + "@webiny/handler-graphql": "npm:0.0.0" + "@webiny/project-utils": "npm:0.0.0" + "@webiny/wcp": "npm:0.0.0" + graphql: "npm:^16.14.2" + rimraf: "npm:^6.1.3" + typescript: "npm:7.0.2" + languageName: unknown + linkType: soft + "@webiny/api-headless-cms-workflows@npm:0.0.0, @webiny/api-headless-cms-workflows@workspace:packages/api-headless-cms-workflows": version: 0.0.0-use.local resolution: "@webiny/api-headless-cms-workflows@workspace:packages/api-headless-cms-workflows" @@ -11215,6 +11239,7 @@ __metadata: "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/api-workflows": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11459,6 +11484,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/api-scheduler": "npm:0.0.0" "@webiny/api-website-builder": "npm:0.0.0" @@ -11481,6 +11507,7 @@ __metadata: "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-website-builder": "npm:0.0.0" "@webiny/api-workflows": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" @@ -11505,6 +11532,7 @@ __metadata: "@webiny/api-core-ddb": "npm:0.0.0" "@webiny/api-file-manager-s3": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" From a8bf587c856c9d8306e9af39e7a01472d60399e3 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Tue, 14 Jul 2026 06:33:14 +0200 Subject: [PATCH 26/31] wip:32 (350cc) --- packages/cli-core/files/references.json | 7504 ++++++----------------- 1 file changed, 1839 insertions(+), 5665 deletions(-) diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index d0bb59f2a88..1f7552c7b48 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -549,11 +549,7 @@ "version": "8.10.162", "files": ["/packages/aws-sdk/package.json", "/packages/aws-sdk/package.json"] }, - { - "name": "@types/hoist-non-react-statics", - "version": "3.3.7", - "files": ["/package.json"] - }, + { "name": "@types/hoist-non-react-statics", "version": "3.3.7", "files": ["/package.json"] }, { "name": "@types/prismjs", "version": "1.26.6", @@ -1128,6 +1124,7 @@ "/packages/api-file-manager/package.json", "/packages/api-headless-cms/package.json", "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-scheduler/package.json", "/packages/api-workflows/package.json", "/packages/app/package.json", @@ -1145,6 +1142,7 @@ "/packages/api-file-manager/package.json", "/packages/api-headless-cms/package.json", "/packages/api-headless-cms-tasks/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-scheduler/package.json", "/packages/api-workflows/package.json", "/packages/app/package.json", @@ -1278,11 +1276,7 @@ "/packages/self-hosted-auth/package.json" ] }, - { - "name": "jwt-decode", - "version": "4.0.0", - "files": ["/package.json"] - }, + { "name": "jwt-decode", "version": "4.0.0", "files": ["/package.json"] }, { "name": "knex", "version": "3.3.0", @@ -2513,21 +2507,9 @@ "version": "2.3.1", "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "@babel/code-frame", - "version": "8.0.0", - "files": ["/package.json"] - }, - { - "name": "@commitlint/cli", - "version": "21.2.1", - "files": ["/package.json"] - }, - { - "name": "@commitlint/config-conventional", - "version": "21.2.0", - "files": ["/package.json"] - }, + { "name": "@babel/code-frame", "version": "8.0.0", "files": ["/package.json"] }, + { "name": "@commitlint/cli", "version": "21.2.1", "files": ["/package.json"] }, + { "name": "@commitlint/config-conventional", "version": "21.2.0", "files": ["/package.json"] }, { "name": "@emotion/react", "version": "11.14.0", @@ -2546,86 +2528,26 @@ "version": "7.3.0", "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] }, - { - "name": "@grpc/grpc-js", - "version": "1.14.4", - "files": ["/package.json"] - }, - { - "name": "@lexical/code", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/hashtag", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/headless", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/history", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/html", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/list", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/mark", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/overflow", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/react", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/rich-text", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/selection", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/text", - "version": "0.47.0", - "files": ["/package.json"] - }, - { - "name": "@lexical/utils", - "version": "0.47.0", - "files": ["/package.json"] - }, + { "name": "@grpc/grpc-js", "version": "1.14.4", "files": ["/package.json"] }, + { "name": "@lexical/code", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/hashtag", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/headless", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/history", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/html", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/list", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/mark", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/overflow", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/react", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/rich-text", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/selection", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/text", "version": "0.47.0", "files": ["/package.json"] }, + { "name": "@lexical/utils", "version": "0.47.0", "files": ["/package.json"] }, { "name": "@material-design-icons/svg", "version": "0.14.15", "files": ["/packages/icons/package.json", "/packages/icons/package.json"] }, - { - "name": "@octokit/rest", - "version": "22.0.1", - "files": ["/package.json"] - }, + { "name": "@octokit/rest", "version": "22.0.1", "files": ["/package.json"] }, { "name": "@rsbuild/core", "version": "2.1.5", @@ -2712,11 +2634,7 @@ "/packages/website-builder-sdk/package.json" ] }, - { - "name": "@types/fs-extra", - "version": "11.0.4", - "files": ["/package.json"] - }, + { "name": "@types/fs-extra", "version": "11.0.4", "files": ["/package.json"] }, { "name": "@types/graphlib", "version": "2.1.12", @@ -3006,16 +2924,8 @@ "/scripts/release/package.json" ] }, - { - "name": "@vitest/coverage-v8", - "version": "4.1.10", - "files": ["/package.json"] - }, - { - "name": "adio", - "version": "3.0.1", - "files": ["/package.json"] - }, + { "name": "@vitest/coverage-v8", "version": "4.1.10", "files": ["/package.json"] }, + { "name": "adio", "version": "3.0.1", "files": ["/package.json"] }, { "name": "amazon-cognito-identity-js", "version": "6.3.20", @@ -3064,11 +2974,7 @@ "/packages/admin-ui/package.json" ] }, - { - "name": "cross-env", - "version": "10.1.0", - "files": ["/package.json"] - }, + { "name": "cross-env", "version": "10.1.0", "files": ["/package.json"] }, { "name": "cypress", "version": "15.18.1", @@ -3094,11 +3000,7 @@ "version": "3.0.2", "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "deepmerge", - "version": "4.3.1", - "files": ["/package.json"] - }, + { "name": "deepmerge", "version": "4.3.1", "files": ["/package.json"] }, { "name": "del", "version": "8.0.1", @@ -3119,26 +3021,10 @@ "/packages/mcp/package.json" ] }, - { - "name": "fast-glob", - "version": "3.3.3", - "files": ["/package.json"] - }, - { - "name": "fs-extra", - "version": "11.3.6", - "files": ["/package.json"] - }, - { - "name": "get-yarn-workspaces", - "version": "1.0.2", - "files": ["/package.json"] - }, - { - "name": "github-actions-wac", - "version": "2.0.0", - "files": ["/package.json"] - }, + { "name": "fast-glob", "version": "3.3.3", "files": ["/package.json"] }, + { "name": "fs-extra", "version": "11.3.6", "files": ["/package.json"] }, + { "name": "get-yarn-workspaces", "version": "1.0.2", "files": ["/package.json"] }, + { "name": "github-actions-wac", "version": "2.0.0", "files": ["/package.json"] }, { "name": "graphql", "version": "16.14.2", @@ -3177,16 +3063,8 @@ "version": "7.4.0", "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "husky", - "version": "9.1.7", - "files": ["/package.json"] - }, - { - "name": "inquirer", - "version": "14.0.2", - "files": ["/package.json"] - }, + { "name": "husky", "version": "9.1.7", "files": ["/package.json"] }, + { "name": "inquirer", "version": "14.0.2", "files": ["/package.json"] }, { "name": "jest-dynalite", "version": "3.6.1", @@ -3205,11 +3083,7 @@ "/packages/project-utils/package.json" ] }, - { - "name": "jest-extended", - "version": "7.0.0", - "files": ["/package.json"] - }, + { "name": "jest-extended", "version": "7.0.0", "files": ["/package.json"] }, { "name": "jsdom", "version": "29.1.1", @@ -3226,11 +3100,7 @@ "/packages/api-event-handler-server-sql/package.json" ] }, - { - "name": "lexical", - "version": "0.47.0", - "files": ["/package.json"] - }, + { "name": "lexical", "version": "0.47.0", "files": ["/package.json"] }, { "name": "listr2", "version": "10.2.2", @@ -3250,11 +3120,7 @@ "version": "4.18.1", "files": ["/package.json", "/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "minimatch", - "version": "10.2.5", - "files": ["/package.json"] - }, + { "name": "minimatch", "version": "10.2.5", "files": ["/package.json"] }, { "name": "mobx", "version": "6.16.1", @@ -3270,11 +3136,7 @@ "version": "5.1.16", "files": ["/package.json", "/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "next", - "version": "16.2.10", - "files": ["/package.json"] - }, + { "name": "next", "version": "16.2.10", "files": ["/package.json"] }, { "name": "oxfmt", "version": "0.58.0", @@ -3288,11 +3150,7 @@ "/packages/react-properties/package.json" ] }, - { - "name": "oxlint", - "version": "1.73.0", - "files": ["/package.json"] - }, + { "name": "oxlint", "version": "1.73.0", "files": ["/package.json"] }, { "name": "pino", "version": "10.3.1", @@ -3308,16 +3166,8 @@ "version": "13.1.3", "files": ["/packages/project-utils/package.json", "/packages/project-utils/package.json"] }, - { - "name": "react", - "version": "18.3.1", - "files": ["/package.json"] - }, - { - "name": "react-dom", - "version": "18.3.1", - "files": ["/package.json"] - }, + { "name": "react", "version": "18.3.1", "files": ["/package.json"] }, + { "name": "react-dom", "version": "18.3.1", "files": ["/package.json"] }, { "name": "rimraf", "version": "6.1.3", @@ -3334,6 +3184,7 @@ "/packages/api-background-tasks-os/package.json", "/packages/api-core/package.json", "/packages/api-core-ddb/package.json", + "/packages/api-core-testing/package.json", "/packages/api-elasticsearch-tasks/package.json", "/packages/api-event-handler-aws/package.json", "/packages/api-event-handler-aws-ddb/package.json", @@ -3346,12 +3197,12 @@ "/packages/api-file-manager-server/package.json", "/packages/api-headless-cms/package.json", "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-mailer/package.json", "/packages/api-opensearch/package.json", "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", - "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3425,6 +3276,7 @@ "/packages/api-background-tasks-os/package.json", "/packages/api-core/package.json", "/packages/api-core-ddb/package.json", + "/packages/api-core-testing/package.json", "/packages/api-elasticsearch-tasks/package.json", "/packages/api-event-handler-aws/package.json", "/packages/api-event-handler-aws-ddb/package.json", @@ -3437,12 +3289,12 @@ "/packages/api-file-manager-server/package.json", "/packages/api-headless-cms/package.json", "/packages/api-headless-cms-ddb-es/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-mailer/package.json", "/packages/api-opensearch/package.json", "/packages/api-record-locking/package.json", "/packages/api-scheduler/package.json", "/packages/api-sync-system/package.json", - "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", @@ -3511,11 +3363,7 @@ "version": "1.101.0", "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] }, - { - "name": "semver", - "version": "7.8.5", - "files": ["/package.json"] - }, + { "name": "semver", "version": "7.8.5", "files": ["/package.json"] }, { "name": "storybook", "version": "10.5.0", @@ -3526,11 +3374,7 @@ "version": "3.3.4", "files": ["/packages/admin-ui/package.json", "/packages/admin-ui/package.json"] }, - { - "name": "ts-expect", - "version": "1.3.0", - "files": ["/package.json"] - }, + { "name": "ts-expect", "version": "1.3.0", "files": ["/package.json"] }, { "name": "tsx", "version": "4.23.0", @@ -3584,6 +3428,7 @@ "/packages/api-core/package.json", "/packages/api-core-ddb/package.json", "/packages/api-core-sql/package.json", + "/packages/api-core-testing/package.json", "/packages/api-dynamodb-to-elasticsearch/package.json", "/packages/api-elasticsearch-tasks/package.json", "/packages/api-event-handler-aws/package.json", @@ -3607,6 +3452,7 @@ "/packages/api-headless-cms-storage/package.json", "/packages/api-headless-cms-tasks/package.json", "/packages/api-headless-cms-tasks-ddb-es/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-headless-cms-workflows/package.json", "/packages/api-mailer/package.json", "/packages/api-opensearch/package.json", @@ -3615,7 +3461,6 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", - "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -3714,6 +3559,7 @@ "/packages/api-core/package.json", "/packages/api-core-ddb/package.json", "/packages/api-core-sql/package.json", + "/packages/api-core-testing/package.json", "/packages/api-dynamodb-to-elasticsearch/package.json", "/packages/api-elasticsearch-tasks/package.json", "/packages/api-event-handler-aws/package.json", @@ -3737,6 +3583,7 @@ "/packages/api-headless-cms-storage/package.json", "/packages/api-headless-cms-tasks/package.json", "/packages/api-headless-cms-tasks-ddb-es/package.json", + "/packages/api-headless-cms-testing/package.json", "/packages/api-headless-cms-workflows/package.json", "/packages/api-mailer/package.json", "/packages/api-opensearch/package.json", @@ -3745,7 +3592,6 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-scheduler-server/package.json", "/packages/api-sync-system/package.json", - "/packages/api-core-testing/package.json", "/packages/api-website-builder/package.json", "/packages/api-website-builder-scheduler/package.json", "/packages/api-website-builder-workflows/package.json", @@ -3837,16 +3683,8 @@ "version": "5.4.0", "files": ["/cypress-tests/package.json", "/cypress-tests/package.json"] }, - { - "name": "validator", - "version": "13.15.35", - "files": ["/package.json"] - }, - { - "name": "verdaccio", - "version": "6.7.4", - "files": ["/package.json"] - }, + { "name": "validator", "version": "13.15.35", "files": ["/package.json"] }, + { "name": "verdaccio", "version": "6.7.4", "files": ["/package.json"] }, { "name": "vite", "version": "8.1.4", @@ -4085,69 +3923,25 @@ } ], "resolutions": [ - { - "name": "@graphql-tools/merge", - "version": "9.2.0", - "files": ["/package.json"] - }, - { - "name": "@graphql-tools/schema", - "version": "10.0.36", - "files": ["/package.json"] - }, - { - "name": "@graphql-tools/utils", - "version": "11.2.0", - "files": ["/package.json"] - }, - { - "name": "@types/react", - "version": "18.3.31", - "files": ["/package.json"] - }, - { - "name": "@types/react-dom", - "version": "18.3.7", - "files": ["/package.json"] - }, - { - "name": "react", - "version": "18.3.1", - "files": ["/package.json"] - }, - { - "name": "react-dom", - "version": "18.3.1", - "files": ["/package.json"] - } + { "name": "@graphql-tools/merge", "version": "9.2.0", "files": ["/package.json"] }, + { "name": "@graphql-tools/schema", "version": "10.0.36", "files": ["/package.json"] }, + { "name": "@graphql-tools/utils", "version": "11.2.0", "files": ["/package.json"] }, + { "name": "@types/react", "version": "18.3.31", "files": ["/package.json"] }, + { "name": "@types/react-dom", "version": "18.3.7", "files": ["/package.json"] }, + { "name": "react", "version": "18.3.1", "files": ["/package.json"] }, + { "name": "react-dom", "version": "18.3.1", "files": ["/package.json"] } ], "references": [ { "name": "@types/hoist-non-react-statics", "versions": [ - { - "version": "3.3.7", - "files": [ - { - "file": "/package.json", - "types": ["dependencies"] - } - ] - } + { "version": "3.3.7", "files": [{ "file": "/package.json", "types": ["dependencies"] }] } ] }, { "name": "jwt-decode", "versions": [ - { - "version": "4.0.0", - "files": [ - { - "file": "/package.json", - "types": ["dependencies"] - } - ] - } + { "version": "4.0.0", "files": [{ "file": "/package.json", "types": ["dependencies"] }] } ] }, { @@ -4156,14 +3950,8 @@ { "version": "8.0.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -4173,12 +3961,7 @@ "versions": [ { "version": "21.2.1", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, @@ -4187,12 +3970,7 @@ "versions": [ { "version": "21.2.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, @@ -4201,12 +3979,7 @@ "versions": [ { "version": "1.14.4", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, @@ -4216,18 +3989,9 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4238,14 +4002,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4256,14 +4014,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-converter/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } ] } ] @@ -4274,14 +4026,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } ] } ] @@ -4292,14 +4038,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-converter/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } ] } ] @@ -4310,14 +4050,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4328,14 +4062,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4346,14 +4074,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4364,18 +4086,9 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4386,18 +4099,9 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4408,22 +4112,10 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4434,14 +4126,8 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } ] } ] @@ -4452,30 +4138,12 @@ { "version": "0.47.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] } ] } ] @@ -4486,14 +4154,8 @@ { "version": "22.0.1", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } ] } ] @@ -4503,12 +4165,7 @@ "versions": [ { "version": "11.0.4", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, @@ -4518,10 +4175,7 @@ { "version": "24.13.3", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, + { "file": "/package.json", "types": ["devDependencies"] }, { "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["devDependencies"] @@ -4536,42 +4190,15 @@ { "version": "18.3.31", "files": [ - { - "file": "/package.json", - "types": ["devDependencies", "resolutions"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { "file": "/packages/app-headless-cms-common/package.json", "types": ["devDependencies"] @@ -4584,18 +4211,9 @@ "file": "/packages/app-headless-cms-workflows/package.json", "types": ["devDependencies"] }, - { - "file": "/packages/app-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, { "file": "/packages/app-website-builder-scheduler/package.json", "types": ["devDependencies"] @@ -4604,38 +4222,20 @@ "file": "/packages/app-website-builder-workflows/package.json", "types": ["devDependencies"] }, - { - "file": "/packages/app-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["devDependencies"] }, { "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["devDependencies"] }, - { - "file": "/packages/react-composition/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, { "file": "/packages/react-rich-text-lexical-renderer/package.json", "types": ["dependencies"] }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["devDependencies"] } ] } ] @@ -4646,10 +4246,7 @@ { "version": "18.3.7", "files": [ - { - "file": "/package.json", - "types": ["devDependencies", "resolutions"] - }, + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, { "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["devDependencies"] @@ -4663,27 +4260,14 @@ "versions": [ { "version": "4.1.10", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, { "name": "adio", "versions": [ - { - "version": "3.0.1", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] - } + { "version": "3.0.1", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, { @@ -4692,66 +4276,21 @@ { "version": "5.6.2", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/aws-layers/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-server/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/system-requirements/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/prepublishOnly/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-layers/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } ] } ] @@ -4761,12 +4300,7 @@ "versions": [ { "version": "10.1.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, @@ -4776,18 +4310,9 @@ { "version": "4.3.1", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -4798,54 +4323,18 @@ { "version": "9.6.1", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/common-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/system-requirements/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } ] } ] @@ -4856,3648 +4345,1689 @@ { "version": "3.3.3", "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "fs-extra", + "versions": [ + { + "version": "11.3.6", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "get-yarn-workspaces", + "versions": [ + { + "version": "1.0.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "github-actions-wac", + "versions": [ + { "version": "2.0.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "graphql", + "versions": [ + { + "version": "16.14.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms/package.json", + "types": ["dependencies", "devDependencies"] }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["devDependencies"] }, { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-bulk-actions/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-tasks/package.json", "types": ["dependencies"] }, { - "file": "/packages/i18n/package.json", + "file": "/packages/api-headless-cms-testing/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "husky", + "versions": [ + { "version": "9.1.7", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "inquirer", + "versions": [ + { + "version": "14.0.2", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "jest-extended", + "versions": [ + { "version": "7.0.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "lexical", + "versions": [ + { + "version": "0.47.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-theme/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "load-json-file", + "versions": [ + { + "version": "7.0.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/telemetry/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "lodash", + "versions": [ + { + "version": "4.18.1", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["dependencies"] }, { - "file": "/packages/project/package.json", + "file": "/packages/api-headless-cms-storage/package.json", "types": ["dependencies"] }, - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/validation/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } ] } ] }, { - "name": "fs-extra", + "name": "minimatch", "versions": [ { - "version": "11.3.6", + "version": "10.2.5", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "nanoid", + "versions": [ + { + "version": "5.1.16", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "next", + "versions": [ + { + "version": "16.2.10", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "oxfmt", + "versions": [ + { + "version": "0.58.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "oxlint", + "versions": [ + { + "version": "1.73.0", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "react", + "versions": [ + { + "version": "18.3.1", "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] }, { - "file": "/package.json", - "types": ["devDependencies"] + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["dependencies"] }, { - "file": "/packages/build-tools/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, { - "file": "/packages/create-webiny-project/package.json", + "file": "/packages/app-website-builder-scheduler/package.json", "types": ["dependencies"] }, { - "file": "/packages/pulumi-sdk/package.json", + "file": "/packages/app-website-builder-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-websockets/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, { - "file": "/scripts/buildPackages/package.json", + "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["peerDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws-template/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server-template/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-template-base/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["dependencies"] }, { - "file": "/scripts/prepublishOnly/package.json", + "file": "/packages/react-rich-text-lexical-renderer/package.json", "types": ["dependencies"] - } + }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "get-yarn-workspaces", + "name": "react-dom", "versions": [ { - "version": "1.0.2", + "version": "18.3.1", "files": [ + { "file": "/package.json", "types": ["devDependencies", "resolutions"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { - "file": "/package.json", - "types": ["devDependencies"] + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["dependencies"] }, { - "file": "/packages/build-tools/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, { - "file": "/packages/cli-core/package.json", + "file": "/packages/app-website-builder-scheduler/package.json", "types": ["dependencies"] }, { - "file": "/packages/project-utils/package.json", + "file": "/packages/app-website-builder-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-websockets/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, { - "file": "/scripts/prepublishOnly/package.json", + "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["dependencies"] - } + }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "github-actions-wac", + "name": "semver", "versions": [ { - "version": "2.0.0", + "version": "7.8.5", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "ts-expect", + "versions": [ + { "version": "1.3.0", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } + ] + }, + { + "name": "tsx", + "versions": [ + { + "version": "4.23.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "type-fest", + "versions": [ + { + "version": "5.8.0", "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, { - "file": "/package.json", + "file": "/packages/api-elasticsearch-tasks/package.json", "types": ["devDependencies"] - } + }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { + "file": "/packages/api-websockets/package.json", + "types": ["dependencies", "devDependencies"] + }, + { + "file": "/packages/api-websockets-aws/package.json", + "types": ["dependencies", "devDependencies"] + }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/db/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } ] } ] }, { - "name": "graphql", + "name": "typescript", "versions": [ { - "version": "16.14.2", + "version": "7.0.2", "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, { - "file": "/package.json", + "file": "/packages/api-background-tasks-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-aco/package.json", + "file": "/packages/api-background-tasks-os/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-testing/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-audit-logs/package.json", + "file": "/packages/api-dynamodb-to-elasticsearch/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/api-file-manager-aco/package.json", + "file": "/packages/api-event-handler-aws-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies", "devDependencies"] + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms-aco/package.json", + "file": "/packages/api-event-handler-core/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms-bulk-actions/package.json", + "file": "/packages/api-event-handler-server/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms-tasks/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-mailer/package.json", + "file": "/packages/api-file-manager-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-record-locking/package.json", + "file": "/packages/api-headless-cms-bulk-actions/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-scheduler/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/api-scheduler-aws/package.json", + "file": "/packages/api-headless-cms-es-tasks/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-website-builder/package.json", + "file": "/packages/api-headless-cms-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-websockets/package.json", + "file": "/packages/api-headless-cms-storage/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-websockets-aws/package.json", + "file": "/packages/api-headless-cms-tasks/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-workflows/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-tasks-ddb-es/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-testing/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] + "file": "/packages/api-website-builder-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] + "file": "/packages/api-website-builder-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] + "file": "/packages/app-graphql-playground/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] + "file": "/packages/app-headless-cms-common/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/languages/package.json", - "types": ["dependencies"] + "file": "/packages/app-headless-cms-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, { - "file": "/packages/self-hosted-auth/package.json", - "types": ["dependencies"] + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/testing/package.json", + "file": "/packages/app-website-builder-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "husky", - "versions": [ - { - "version": "9.1.7", - "files": [ + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, { - "file": "/package.json", + "file": "/packages/create-webiny-project/_templates/base/template.package.json", "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "inquirer", - "versions": [ - { - "version": "14.0.2", - "files": [ + }, + { "file": "/packages/db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/error/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["devDependencies"] }, { - "file": "/package.json", + "file": "/packages/project-template-base/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/shared-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/wcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["devDependencies"] }, { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] }, { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + "file": "/packages/website-builder-react/package.json", + "types": ["devDependencies"] + }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["devDependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["devDependencies"] } ] } ] }, { - "name": "jest-extended", + "name": "validator", "versions": [ { - "version": "7.0.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "version": "13.15.35", + "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, { - "name": "lexical", + "name": "verdaccio", "versions": [ - { - "version": "0.47.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-converter/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-theme/package.json", - "types": ["dependencies"] - } - ] - } + { "version": "6.7.4", "files": [{ "file": "/package.json", "types": ["devDependencies"] }] } ] }, { - "name": "load-json-file", + "name": "vitest", "versions": [ { - "version": "7.0.1", + "version": "4.1.10", "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, { - "file": "/package.json", + "file": "/packages/api-elasticsearch-tasks/package.json", "types": ["devDependencies"] }, { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws-ddb/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/global-config/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-core/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/project/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-server/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/project-utils/package.json", + "file": "/packages/api-event-handler-server-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] + "file": "/packages/api-file-manager-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-aco/package.json", "types": ["dependencies"] }, { - "file": "/packages/telemetry/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-bulk-actions/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] }, { - "file": "/scripts/prepublishOnly/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-es-tasks/package.json", + "types": ["devDependencies"] }, { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-scheduler/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "lodash", - "versions": [ - { - "version": "4.18.1", - "files": [ - { - "file": "/package.json", + "file": "/packages/api-headless-cms-storage/package.json", "types": ["devDependencies"] }, { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-tasks/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-aco/package.json", - "types": ["dependencies"] + "file": "/packages/api-website-builder-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] + "file": "/packages/api-website-builder-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms-ddb-es/package.json", - "types": ["dependencies"] + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-headless-cms-storage/package.json", - "types": ["dependencies"] + "file": "/packages/create-webiny-project/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/lexical-converter/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-sync-system/package.json", - "types": ["dependencies"] + "file": "/packages/react-rich-text-lexical-renderer/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["devDependencies"] }, { - "file": "/packages/api-website-builder/package.json", - "types": ["dependencies"] + "file": "/packages/website-builder-nextjs/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app/package.json", - "types": ["dependencies"] + "file": "/packages/website-builder-react/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } + ] + } + ] + }, + { + "name": "write-json-file", + "versions": [ + { + "version": "7.0.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "yargs", + "versions": [ + { + "version": "18.0.0", + "files": [ + { "file": "/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/merge", + "versions": [ + { + "version": "9.2.0", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/schema", + "versions": [ + { + "version": "10.0.36", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@graphql-tools/utils", + "versions": [ + { + "version": "11.2.0", + "files": [ + { "file": "/package.json", "types": ["resolutions"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/fontawesome-svg-core", + "versions": [ + { + "version": "7.3.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "@fortawesome/react-fontawesome", + "versions": [ + { + "version": "3.4.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { - "file": "/packages/app-aco/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/i18n-react/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/validation/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] } ] } ] }, { - "name": "minimatch", + "name": "@minoru/react-dnd-treeview", "versions": [ { - "version": "10.2.5", + "version": "3.5.4", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@monaco-editor/react", + "versions": [ + { + "version": "4.7.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "nanoid", + "name": "@radix-ui/react-scroll-area", "versions": [ { - "version": "5.1.16", + "version": "1.2.14", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@tanstack/react-table", + "versions": [ + { + "version": "8.21.3", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "bytes", + "versions": [ + { + "version": "3.1.2", "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "class-variance-authority", + "versions": [ + { + "version": "0.7.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "clsx", + "versions": [ + { + "version": "2.1.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "cmdk", + "versions": [ + { + "version": "1.1.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "date-fns", + "versions": [ + { + "version": "4.4.0", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/utils/package.json", + "file": "/packages/api-headless-cms-storage/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "mobx", + "versions": [ + { + "version": "6.16.1", + "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { - "file": "/packages/website-builder-sdk/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] }, - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "next", + "name": "monaco-editor", "versions": [ { - "version": "16.2.10", + "version": "0.53.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "oxfmt", + "name": "radix-ui", "versions": [ { - "version": "0.58.0", + "version": "1.6.2", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "oxlint", + "name": "react-color", "versions": [ { - "version": "1.73.0", + "version": "2.19.3", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "react", + "name": "react-custom-scrollbars", "versions": [ { - "version": "18.3.1", + "version": "4.2.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-day-picker", + "versions": [ + { + "version": "10.0.1", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "react-dnd", + "versions": [ + { + "version": "16.0.1", "files": [ - { - "file": "/package.json", - "types": ["devDependencies", "resolutions"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["peerDependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-common/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-mailer/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-record-locking/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-websockets/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/_templates/base/template.package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["peerDependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["peerDependencies"] - }, - { - "file": "/packages/i18n-react/package.json", - "types": ["peerDependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws-template/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-server/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-server-template/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-template-base/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-composition/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-rich-text-lexical-renderer/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/tenant-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webiny/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["dependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "react-dom", + "name": "react-virtualized", "versions": [ { - "version": "18.3.1", + "version": "9.22.6", "files": [ - { - "file": "/package.json", - "types": ["devDependencies", "resolutions"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-record-locking/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-websockets/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/_templates/base/template.package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/react-composition/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/tenant-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["dependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "semver", + "name": "sonner", "versions": [ { - "version": "7.8.5", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/system-requirements/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } - ] + "version": "2.0.7", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] } ] }, { - "name": "ts-expect", + "name": "tailwind-merge", "versions": [ { - "version": "1.3.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] + "version": "3.6.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] } ] }, { - "name": "tsx", + "name": "tailwindcss", "versions": [ { - "version": "4.23.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-server/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - } - ] + "version": "4.3.2", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] } ] }, { - "name": "type-fest", + "name": "tw-animate-css", "versions": [ { - "version": "5.8.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-elasticsearch-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets/package.json", - "types": ["dependencies", "devDependencies"] - }, - { - "file": "/packages/api-websockets-aws/package.json", - "types": ["dependencies", "devDependencies"] - }, - { - "file": "/packages/api-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/db/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/prepublishOnly/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["devDependencies"] - } - ] + "version": "1.4.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["dependencies"] }] } ] }, { - "name": "typescript", + "name": "@fortawesome/free-solid-svg-icons", "versions": [ { - "version": "7.0.2", + "version": "7.3.0", "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-background-tasks-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-background-tasks-os/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-dynamodb-to-elasticsearch/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-elasticsearch-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb-os/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-bulk-actions/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb-es/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-es-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-storage/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-tasks-ddb-es/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-opensearch/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-testing/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-common/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-websockets/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/aws-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/common-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/create-webiny-project/_templates/base/template.package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/error/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/feature/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/feature-flags/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n-react/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/logger/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/plugins/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-template-base/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-composition/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/shared-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/tenant-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/testing/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/validation/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/wcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/webiny/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-nextjs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-vue/package.json", - "types": ["devDependencies"] - }, - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "validator", - "versions": [ - { - "version": "13.15.35", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "verdaccio", - "versions": [ - { - "version": "6.7.4", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "vitest", - "versions": [ - { - "version": "4.1.10", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-elasticsearch-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb-os/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms-bulk-actions/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb-es/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-es-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-storage/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-opensearch/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-converter/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/plugins/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-composition/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-rich-text-lexical-renderer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/self-hosted-auth-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/validation/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-nextjs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "write-json-file", - "versions": [ - { - "version": "7.0.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/global-config/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/prepublishOnly/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "yargs", - "versions": [ - { - "version": "18.0.0", - "files": [ - { - "file": "/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@graphql-tools/merge", - "versions": [ - { - "version": "9.2.0", - "files": [ - { - "file": "/package.json", - "types": ["resolutions"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@graphql-tools/schema", - "versions": [ - { - "version": "10.0.36", - "files": [ - { - "file": "/package.json", - "types": ["resolutions"] - }, - { - "file": "/packages/api-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@graphql-tools/utils", - "versions": [ - { - "version": "11.2.0", - "files": [ - { - "file": "/package.json", - "types": ["resolutions"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@fortawesome/fontawesome-svg-core", - "versions": [ - { - "version": "7.3.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-common/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@fortawesome/react-fontawesome", - "versions": [ - { - "version": "3.4.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@minoru/react-dnd-treeview", - "versions": [ - { - "version": "3.5.4", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@monaco-editor/react", - "versions": [ - { - "version": "4.7.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@radix-ui/react-scroll-area", - "versions": [ - { - "version": "1.2.14", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@tanstack/react-table", - "versions": [ - { - "version": "8.21.3", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "bytes", - "versions": [ - { - "version": "3.1.2", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "class-variance-authority", - "versions": [ - { - "version": "0.7.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "clsx", - "versions": [ - { - "version": "2.1.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "cmdk", - "versions": [ - { - "version": "1.1.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "date-fns", - "versions": [ - { - "version": "4.4.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms-storage/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "mobx", - "versions": [ - { - "version": "6.16.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-mailer/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-record-locking/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-utils/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/tenant-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-vue/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "monaco-editor", - "versions": [ - { - "version": "0.53.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "radix-ui", - "versions": [ - { - "version": "1.6.2", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "react-color", - "versions": [ - { - "version": "2.19.3", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "react-custom-scrollbars", - "versions": [ - { - "version": "4.2.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "react-day-picker", - "versions": [ - { - "version": "10.0.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "react-dnd", - "versions": [ - { - "version": "16.0.1", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "react-virtualized", - "versions": [ - { - "version": "9.22.6", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "sonner", - "versions": [ - { - "version": "2.0.7", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "tailwind-merge", - "versions": [ - { - "version": "3.6.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "tailwindcss", - "versions": [ - { - "version": "4.3.2", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "tw-animate-css", - "versions": [ - { - "version": "1.4.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@fortawesome/free-solid-svg-icons", - "versions": [ - { - "version": "7.3.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@rsbuild/core", - "versions": [ - { - "version": "2.1.5", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@rsbuild/plugin-svgr", - "versions": [ - { - "version": "2.0.5", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@storybook/addon-a11y", - "versions": [ - { - "version": "10.5.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "@storybook/addon-docs", - "versions": [ - { - "version": "10.5.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "@storybook/react", - "versions": [ - { - "version": "10.5.0", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "@tailwindcss/postcss", - "versions": [ - { - "version": "4.3.2", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@types/react-color", - "versions": [ - { - "version": "3.0.13", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "@types/react-custom-scrollbars", - "versions": [ - { - "version": "4.0.13", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "@types/react-virtualized", - "versions": [ - { - "version": "9.22.3", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] - } - ] - }, - { - "name": "rimraf", - "versions": [ - { - "version": "6.1.3", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/ai-powerups/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-aco-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-background-tasks-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-background-tasks-os/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-elasticsearch-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-aws-ddb-os/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-event-handler-server-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-file-manager-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb-es/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-opensearch/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-testing/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-common/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-mailer/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-record-locking/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-sdk-playground/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder-scheduler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-websockets/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-workflows/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/aws-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/background-tasks-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/common-audit-logs/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/db/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/error/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/event-handler-server/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/feature-flags/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n-react/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/languages/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/logger/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/plugins/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/tenant-manager/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/testing/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/validation/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/wcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/webiny/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "sass", + "name": "@rsbuild/core", "versions": [ { - "version": "1.101.0", + "version": "2.1.5", "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "storybook", + "name": "@rsbuild/plugin-svgr", "versions": [ { - "version": "10.5.0", + "version": "2.0.5", "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "storybook-react-rsbuild", + "name": "@storybook/addon-a11y", "versions": [ { - "version": "3.3.4", - "files": [ - { - "file": "/packages/admin-ui/package.json", - "types": ["devDependencies"] - } - ] + "version": "10.5.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] } ] }, { - "name": "ai", + "name": "@storybook/addon-docs", "versions": [ { - "version": "7.0.19", + "version": "10.5.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@storybook/react", + "versions": [ + { + "version": "10.5.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@tailwindcss/postcss", + "versions": [ + { + "version": "4.3.2", "files": [ - { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - } + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "front-matter", + "name": "@types/react-color", "versions": [ { - "version": "4.0.2", + "version": "3.0.13", "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["dependencies"] + "file": "/packages/lexical-editor-actions/package.json", + "types": ["devDependencies"] } ] } ] }, { - "name": "mobx-react-lite", + "name": "@types/react-custom-scrollbars", "versions": [ { - "version": "4.1.1", + "version": "4.0.13", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "@types/react-virtualized", + "versions": [ + { + "version": "9.22.3", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "rimraf", + "versions": [ + { + "version": "6.1.3", "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/ai-powerups/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] + "file": "/packages/api-background-tasks-ddb/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] + "file": "/packages/api-background-tasks-os/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-testing/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] + "file": "/packages/api-elasticsearch-tasks/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws-ddb/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-headless-cms-scheduler/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-aws-ddb-os/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-headless-cms-workflows/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-core/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-mailer/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-server/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-record-locking/package.json", - "types": ["dependencies"] + "file": "/packages/api-event-handler-server-sql/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] + "file": "/packages/api-file-manager-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-ddb-es/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/app-website-builder-workflows/package.json", - "types": ["dependencies"] + "file": "/packages/api-headless-cms-testing/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-opensearch/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-ddb/package.json", "types": ["devDependencies"] }, { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] + "file": "/packages/api-websockets-server/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["devDependencies"] }, { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] + "file": "/packages/app-graphql-playground/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["devDependencies"] }, { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] + "file": "/packages/app-headless-cms-common/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] + "file": "/packages/app-headless-cms-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/form/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-mailer/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-sdk-playground/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, { - "file": "/packages/okta/package.json", - "types": ["dependencies"] + "file": "/packages/app-website-builder-scheduler/package.json", + "types": ["devDependencies"] }, { - "file": "/packages/tenant-manager/package.json", - "types": ["dependencies"] + "file": "/packages/app-website-builder-workflows/package.json", + "types": ["devDependencies"] }, + { "file": "/packages/app-websockets/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-workflows/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/aws-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["devDependencies"] }, + { "file": "/packages/background-tasks-aws/package.json", "types": ["devDependencies"] }, { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] + "file": "/packages/background-tasks-server/package.json", + "types": ["devDependencies"] }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["dependencies"] - } + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/common-audit-logs/package.json", "types": ["devDependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/db/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/error/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/event-handler-server/package.json", "types": ["devDependencies"] }, + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n-react/package.json", "types": ["devDependencies"] }, + { "file": "/packages/languages/package.json", "types": ["devDependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, + { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, + { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, + { "file": "/packages/wcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/webiny/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["devDependencies"] } ] } ] }, { - "name": "zod", + "name": "sass", "versions": [ { - "version": "4.4.3", + "version": "1.101.0", "files": [ + { "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }, + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "storybook", + "versions": [ + { + "version": "10.5.0", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "storybook-react-rsbuild", + "versions": [ + { + "version": "3.3.4", + "files": [{ "file": "/packages/admin-ui/package.json", "types": ["devDependencies"] }] + } + ] + }, + { + "name": "ai", + "versions": [ + { + "version": "7.0.19", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "front-matter", + "versions": [ + { + "version": "4.0.2", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "mobx-react-lite", + "versions": [ + { + "version": "4.1.1", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { - "file": "/packages/ai-powerups/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-audit-logs-ddb/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-mailer/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-scheduler-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-websockets-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-websockets-server/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-workflows/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-server/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/sdk/package.json", + "file": "/packages/app-headless-cms-scheduler/package.json", "types": ["dependencies"] }, { - "file": "/packages/self-hosted-auth/package.json", + "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-record-locking/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, { - "file": "/packages/utils/package.json", + "file": "/packages/app-website-builder-workflows/package.json", "types": ["dependencies"] }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/tenant-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "zod", + "versions": [ + { + "version": "4.4.3", + "files": [ + { "file": "/packages/ai-powerups/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs-ddb/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-scheduler-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-workflows/package.json", "types": ["dependencies"] }, + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } ] } ] @@ -8508,38 +6038,20 @@ { "version": "3.3.0", "files": [ - { - "file": "/packages/api-aco-sql/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-audit-logs-sql/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-core-sql/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/api-aco-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["dependencies"] }, { "file": "/packages/api-event-handler-server-sql/package.json", "types": ["devDependencies"] }, - { - "file": "/packages/api-headless-cms-sql/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-websockets-sql/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["dependencies"] }, { "file": "/packages/project-server-template/template/appTemplates/api/graphql/package.json", "types": ["dependencies"] }, - { - "file": "/packages/self-hosted-auth-sql/package.json", - "types": ["dependencies"] - } + { "file": "/packages/self-hosted-auth-sql/package.json", "types": ["dependencies"] } ] } ] @@ -8550,30 +6062,15 @@ { "version": "12.11.1", "files": [ - { - "file": "/packages/api-aco-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-audit-logs-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-core-sql/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/api-aco-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-audit-logs-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-core-sql/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-event-handler-server-sql/package.json", "types": ["dependencies"] }, - { - "file": "/packages/api-headless-cms-sql/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-websockets-sql/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/api-headless-cms-sql/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-websockets-sql/package.json", "types": ["devDependencies"] }, { "file": "/packages/project-server-template/template/appTemplates/api/graphql/package.json", "types": ["dependencies"] @@ -8587,12 +6084,7 @@ "versions": [ { "version": "4.0.11", - "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] } ] }, @@ -8601,12 +6093,7 @@ "versions": [ { "version": "4.0.11", - "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] } ] }, @@ -8616,18 +6103,9 @@ { "version": "2.2.3", "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb-es/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["dependencies"] } ] } ] @@ -8637,12 +6115,7 @@ "versions": [ { "version": "6.2.3", - "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] } ] }, @@ -8652,26 +6125,11 @@ { "version": "9.0.3", "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["dependencies"] }, + { "file": "/packages/cognito/package.json", "types": ["dependencies"] }, + { "file": "/packages/okta/package.json", "types": ["dependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] } ] } ] @@ -8682,34 +6140,13 @@ { "version": "10.3.1", "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/logger/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/logger/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] } ] } ] @@ -8719,12 +6156,7 @@ "versions": [ { "version": "4.4.1", - "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-core/package.json", "types": ["dependencies"] }] } ] }, @@ -8734,22 +6166,10 @@ { "version": "9.0.10", "files": [ - { - "file": "/packages/api-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/auth0/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/self-hosted-auth/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] }, + { "file": "/packages/self-hosted-auth/package.json", "types": ["devDependencies"] } ] } ] @@ -8760,30 +6180,15 @@ { "version": "3.6.1", "files": [ - { - "file": "/packages/api-core-ddb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-headless-cms-ddb/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/api-core-ddb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["devDependencies"] }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] } ] } ] @@ -8798,22 +6203,10 @@ "file": "/packages/api-dynamodb-to-elasticsearch/package.json", "types": ["dependencies"] }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/utils/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/scripts/release/package.json", "types": ["dependencies"] } ] } ] @@ -8824,10 +6217,7 @@ { "version": "2.2.0", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] } ] } ] @@ -8838,26 +6228,11 @@ { "version": "4.1.0", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } ] } ] @@ -8868,14 +6243,8 @@ { "version": "3.0.0", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] } ] } ] @@ -8886,18 +6255,9 @@ { "version": "3.0.0", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -8908,14 +6268,8 @@ { "version": "1.6.4", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] } ] } ] @@ -8926,10 +6280,7 @@ { "version": "3.0.6", "files": [ - { - "file": "/packages/api-file-manager/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-file-manager/package.json", "types": ["devDependencies"] } ] } ] @@ -8940,36 +6291,21 @@ { "version": "4.41.0", "files": [ - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-server/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-server/package.json", "types": ["dependencies"] } ] } ] }, { - "name": "p-map", - "versions": [ - { - "version": "7.0.5", - "files": [ - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/sdk/package.json", - "types": ["dependencies"] - } + "name": "p-map", + "versions": [ + { + "version": "7.0.5", + "files": [ + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/sdk/package.json", "types": ["dependencies"] } ] } ] @@ -8980,14 +6316,8 @@ { "version": "0.35.3", "files": [ - { - "file": "/packages/api-file-manager-s3/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/api-file-manager-server/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-file-manager-s3/package.json", "types": ["dependencies"] }, + { "file": "/packages/api-file-manager-server/package.json", "types": ["dependencies"] } ] } ] @@ -8998,14 +6328,8 @@ { "version": "2.1.1", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -9016,18 +6340,9 @@ { "version": "2.12.7", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -9038,14 +6353,8 @@ { "version": "8.0.0", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] @@ -9056,30 +6365,12 @@ { "version": "1.6.9", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-aco/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-aco/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/form/package.json", "types": ["dependencies"] } ] } ] @@ -9090,10 +6381,7 @@ { "version": "0.0.33", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] } ] } ] @@ -9104,10 +6392,7 @@ { "version": "0.9.7", "files": [ - { - "file": "/packages/api-headless-cms/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-headless-cms/package.json", "types": ["devDependencies"] } ] } ] @@ -9118,10 +6403,7 @@ { "version": "1.1.6", "files": [ - { - "file": "/packages/api-headless-cms-ddb/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/api-headless-cms-ddb/package.json", "types": ["devDependencies"] }, { "file": "/packages/api-headless-cms-ddb-es/package.json", "types": ["devDependencies"] @@ -9140,10 +6422,7 @@ "file": "/packages/api-headless-cms-storage/package.json", "types": ["dependencies"] }, - { - "file": "/packages/db-dynamodb/package.json", - "types": ["dependencies"] - } + { "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] } ] } ] @@ -9154,14 +6433,8 @@ { "version": "5.0.0", "files": [ - { - "file": "/packages/api-mailer/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } ] } ] @@ -9171,12 +6444,7 @@ "versions": [ { "version": "9.0.3", - "files": [ - { - "file": "/packages/api-mailer/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-mailer/package.json", "types": ["dependencies"] }] } ] }, @@ -9185,12 +6453,7 @@ "versions": [ { "version": "8.0.1", - "files": [ - { - "file": "/packages/api-mailer/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/api-mailer/package.json", "types": ["devDependencies"] }] } ] }, @@ -9199,12 +6462,7 @@ "versions": [ { "version": "3.6.0", - "files": [ - { - "file": "/packages/api-opensearch/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/api-opensearch/package.json", "types": ["dependencies"] }] } ] }, @@ -9214,14 +6472,8 @@ { "version": "4.1.0", "files": [ - { - "file": "/packages/api-scheduler-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-scheduler-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] } ] } ] @@ -9232,10 +6484,7 @@ { "version": "9.2.9", "files": [ - { - "file": "/packages/api-scheduler-server/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-scheduler-server/package.json", "types": ["dependencies"] } ] } ] @@ -9246,10 +6495,7 @@ { "version": "10.5.0", "files": [ - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] } ] } ] @@ -9260,50 +6506,17 @@ { "version": "4.17.24", "files": [ - { - "file": "/packages/api-sync-system/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/i18n/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/mcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/validation/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-sync-system/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app/package.json", "types": ["devDependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/i18n/package.json", "types": ["devDependencies"] }, + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, + { "file": "/packages/validation/package.json", "types": ["devDependencies"] } ] } ] @@ -9314,10 +6527,7 @@ { "version": "8.21.0", "files": [ - { - "file": "/packages/api-websockets-server/package.json", - "types": ["dependencies"] - } + { "file": "/packages/api-websockets-server/package.json", "types": ["dependencies"] } ] } ] @@ -9328,10 +6538,7 @@ { "version": "8.18.1", "files": [ - { - "file": "/packages/api-websockets-server/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/api-websockets-server/package.json", "types": ["devDependencies"] } ] } ] @@ -9342,38 +6549,14 @@ { "version": "11.14.1", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } ] } ] @@ -9384,22 +6567,10 @@ { "version": "1.3.5", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -9409,12 +6580,7 @@ "versions": [ { "version": "1.6.6", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] } ] }, @@ -9424,22 +6590,10 @@ { "version": "2.6.10", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -9450,22 +6604,10 @@ { "version": "1.2.14", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -9476,18 +6618,9 @@ { "version": "1.0.20", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] } ] } ] @@ -9497,12 +6630,7 @@ "versions": [ { "version": "1.1.13", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] } ] }, @@ -9511,12 +6639,7 @@ "versions": [ { "version": "0.2.16", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] } ] }, @@ -9526,40 +6649,22 @@ { "version": "1.3.4", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } ] } ] }, { "name": "history", - "versions": [ - { - "version": "5.3.0", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } + "versions": [ + { + "version": "5.3.0", + "files": [ + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] } ] } ] @@ -9570,14 +6675,8 @@ { "version": "2.2.4", "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } ] } ] @@ -9587,12 +6686,7 @@ "versions": [ { "version": "0.10.3", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] } ] }, @@ -9601,12 +6695,7 @@ "versions": [ { "version": "4.0.3", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["dependencies"] }] } ] }, @@ -9615,12 +6704,7 @@ "versions": [ { "version": "3.0.4", - "files": [ - { - "file": "/packages/app/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app/package.json", "types": ["devDependencies"] }] } ] }, @@ -9629,12 +6713,7 @@ "versions": [ { "version": "3.1.5", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9643,12 +6722,7 @@ "versions": [ { "version": "3.1.5", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9658,26 +6732,11 @@ { "version": "11.13.5", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/lexical-editor-actions/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/lexical-editor-actions/package.json", "types": ["dependencies"] } ] } ] @@ -9688,34 +6747,13 @@ { "version": "11.14.0", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-audit-logs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-audit-logs/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, { "file": "/packages/react-rich-text-lexical-renderer/package.json", "types": ["devDependencies"] @@ -9729,12 +6767,7 @@ "versions": [ { "version": "2.2.498", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9744,14 +6777,8 @@ { "version": "2.5.1", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] @@ -9762,18 +6789,9 @@ { "version": "0.2.0", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -9784,14 +6802,8 @@ { "version": "9.8.2", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-admin/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] @@ -9801,12 +6813,7 @@ "versions": [ { "version": "4.12.1", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9815,12 +6822,7 @@ "versions": [ { "version": "4.4.5", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9829,12 +6831,7 @@ "versions": [ { "version": "5.0.2", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9843,12 +6840,7 @@ "versions": [ { "version": "1.6.0", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9857,12 +6849,7 @@ "versions": [ { "version": "0.9.0", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["dependencies"] }] } ] }, @@ -9872,22 +6859,10 @@ { "version": "16.3.2", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-composition/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/react-properties/package.json", - "types": ["devDependencies"] - }, + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/form/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-composition/package.json", "types": ["devDependencies"] }, + { "file": "/packages/react-properties/package.json", "types": ["devDependencies"] }, { "file": "/packages/react-rich-text-lexical-renderer/package.json", "types": ["devDependencies"] @@ -9901,12 +6876,7 @@ "versions": [ { "version": "3.1.5", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -9915,12 +6885,7 @@ "versions": [ { "version": "2.1.12", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -9930,18 +6895,9 @@ { "version": "0.1.10", "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] } ] } ] @@ -9951,12 +6907,7 @@ "versions": [ { "version": "4.0.0", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -9965,12 +6916,7 @@ "versions": [ { "version": "4.4.12", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -9979,12 +6925,7 @@ "versions": [ { "version": "2.0.5", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -9993,12 +6934,7 @@ "versions": [ { "version": "1.4.6", - "files": [ - { - "file": "/packages/app-admin/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin/package.json", "types": ["devDependencies"] }] } ] }, @@ -10008,14 +6944,8 @@ { "version": "6.1.0", "files": [ - { - "file": "/packages/app-admin-ui/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, + { "file": "/packages/app-admin-ui/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, { "file": "/packages/app-headless-cms-workflows/package.json", "types": ["dependencies"] @@ -10024,10 +6954,7 @@ "file": "/packages/app-website-builder-workflows/package.json", "types": ["dependencies"] }, - { - "file": "/packages/app-workflows/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-workflows/package.json", "types": ["dependencies"] } ] } ] @@ -10037,12 +6964,7 @@ "versions": [ { "version": "6.1.11", - "files": [ - { - "file": "/packages/app-admin-ui/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/app-admin-ui/package.json", "types": ["devDependencies"] }] } ] }, @@ -10052,10 +6974,7 @@ { "version": "1.11.21", "files": [ - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } ] } ] @@ -10066,10 +6985,7 @@ { "version": "4.0.1", "files": [ - { - "file": "/packages/app-file-manager/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-file-manager/package.json", "types": ["dependencies"] } ] } ] @@ -10080,10 +6996,7 @@ { "version": "2.0.0", "files": [ - { - "file": "/packages/app-graphql-playground/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-graphql-playground/package.json", "types": ["dependencies"] } ] } ] @@ -10094,10 +7007,7 @@ { "version": "7.3.0", "files": [ - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -10108,10 +7018,7 @@ { "version": "7.3.0", "files": [ - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -10122,10 +7029,7 @@ { "version": "7.3.0", "files": [ - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -10136,14 +7040,8 @@ { "version": "16.0.1", "files": [ - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] }, + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] } ] } ] @@ -10154,10 +7052,7 @@ { "version": "1.8.1", "files": [ - { - "file": "/packages/app-headless-cms/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms/package.json", "types": ["dependencies"] } ] } ] @@ -10168,10 +7063,7 @@ { "version": "16.0.1", "files": [ - { - "file": "/packages/app-headless-cms-common/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-headless-cms-common/package.json", "types": ["dependencies"] } ] } ] @@ -10182,14 +7074,8 @@ { "version": "0.14.15", "files": [ - { - "file": "/packages/app-scheduler/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/icons/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/app-scheduler/package.json", "types": ["dependencies"] }, + { "file": "/packages/icons/package.json", "types": ["devDependencies"] } ] } ] @@ -10200,40 +7086,22 @@ { "version": "1.2.14", "files": [ - { - "file": "/packages/app-serverless-cms/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "deep-equal", - "versions": [ - { - "version": "2.2.3", - "files": [ - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-react/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-vue/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-serverless-cms/package.json", "types": ["dependencies"] } + ] + } + ] + }, + { + "name": "deep-equal", + "versions": [ + { + "version": "2.2.3", + "files": [ + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-react/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } ] } ] @@ -10244,14 +7112,8 @@ { "version": "6.0.0", "files": [ - { - "file": "/packages/app-website-builder/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/app-website-builder/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -10262,14 +7124,8 @@ { "version": "1.0.4", "files": [ - { - "file": "/packages/app-website-builder/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/app-website-builder/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["devDependencies"] } ] } ] @@ -10279,12 +7135,7 @@ "versions": [ { "version": "2.23.0", - "files": [ - { - "file": "/packages/auth0/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/auth0/package.json", "types": ["dependencies"] }] } ] }, @@ -10294,14 +7145,8 @@ { "version": "2.0.3", "files": [ - { - "file": "/packages/auth0/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/okta/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/auth0/package.json", "types": ["devDependencies"] }, + { "file": "/packages/okta/package.json", "types": ["devDependencies"] } ] } ] @@ -10311,12 +7156,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10325,12 +7165,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10339,12 +7174,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10353,12 +7183,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10367,12 +7192,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10381,12 +7201,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10395,12 +7210,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10409,12 +7219,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10423,12 +7228,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10437,12 +7237,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10451,12 +7246,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10465,12 +7255,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10479,12 +7264,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10493,12 +7273,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10507,12 +7282,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10521,12 +7291,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10535,12 +7300,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10549,12 +7309,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10563,12 +7318,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10577,12 +7327,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10591,12 +7336,7 @@ "versions": [ { "version": "3.1084.0", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10605,12 +7345,7 @@ "versions": [ { "version": "3.996.6", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10619,12 +7354,7 @@ "versions": [ { "version": "8.10.162", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -10633,12 +7363,7 @@ "versions": [ { "version": "1.0.7", - "files": [ - { - "file": "/packages/aws-sdk/package.json", - "types": ["peerDependencies"] - } - ] + "files": [{ "file": "/packages/aws-sdk/package.json", "types": ["peerDependencies"] }] } ] }, @@ -10648,10 +7373,7 @@ { "version": "14.1.3", "files": [ - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - } + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] } ] } ] @@ -10662,10 +7384,7 @@ { "version": "2.6.5", "files": [ - { - "file": "/packages/background-tasks/package.json", - "types": ["dependencies"] - } + { "file": "/packages/background-tasks/package.json", "types": ["dependencies"] } ] } ] @@ -10675,12 +7394,7 @@ "versions": [ { "version": "2.1.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10689,12 +7403,7 @@ "versions": [ { "version": "2.0.1", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10703,12 +7412,7 @@ "versions": [ { "version": "1.5.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10717,12 +7421,7 @@ "versions": [ { "version": "1.5.18", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10731,103 +7430,53 @@ "versions": [ { "version": "0.23.2", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, { "name": "@rspack/core", "versions": [ - { - "version": "2.1.3", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "@swc/plugin-emotion", - "versions": [ - { - "version": "14.15.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "css-loader", - "versions": [ - { - "version": "7.1.4", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] - } - ] - }, - { - "name": "find-up", - "versions": [ - { - "version": "8.0.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/prepublishOnly/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - } + { + "version": "2.1.3", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "@swc/plugin-emotion", + "versions": [ + { + "version": "14.15.0", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "css-loader", + "versions": [ + { + "version": "7.1.4", + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] + } + ] + }, + { + "name": "find-up", + "versions": [ + { + "version": "8.0.0", + "files": [ + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }, + { "file": "/scripts/prepublishOnly/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] } ] } ] @@ -10837,12 +7486,7 @@ "versions": [ { "version": "8.2.1", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10851,12 +7495,7 @@ "versions": [ { "version": "4.0.2", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10865,12 +7504,7 @@ "versions": [ { "version": "0.18.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10879,12 +7513,7 @@ "versions": [ { "version": "17.0.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10893,12 +7522,7 @@ "versions": [ { "version": "5.0.3", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10907,12 +7531,7 @@ "versions": [ { "version": "4.0.0", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10922,30 +7541,12 @@ { "version": "28.0.0", "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cli/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/generateSkills/package.json", - "types": ["dependencies"] - } + { "file": "/packages/build-tools/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cli/package.json", "types": ["dependencies"] }, + { "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }, + { "file": "/scripts/generateSkills/package.json", "types": ["dependencies"] } ] } ] @@ -10955,12 +7556,7 @@ "versions": [ { "version": "4.1.1", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10969,12 +7565,7 @@ "versions": [ { "version": "6.0.6", - "files": [ - { - "file": "/packages/build-tools/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/build-tools/package.json", "types": ["dependencies"] }] } ] }, @@ -10984,14 +7575,8 @@ { "version": "11.0.0", "files": [ - { - "file": "/packages/cli-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - } + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] } ] } ] @@ -11002,18 +7587,9 @@ { "version": "9.4.1", "files": [ - { - "file": "/packages/cli-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/cli-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } ] } ] @@ -11024,22 +7600,10 @@ { "version": "4.4.0", "files": [ - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/global-config/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/telemetry/package.json", - "types": ["dependencies"] - } + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/global-config/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/telemetry/package.json", "types": ["dependencies"] } ] } ] @@ -11050,14 +7614,8 @@ { "version": "3.34.0", "files": [ - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } ] } ] @@ -11068,22 +7626,10 @@ { "version": "13.1.3", "files": [ - { - "file": "/packages/cli-core/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/cli-core/package.json", "types": ["dependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -11093,12 +7639,7 @@ "versions": [ { "version": "6.18.0", - "files": [ - { - "file": "/packages/cognito/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/cognito/package.json", "types": ["dependencies"] }] } ] }, @@ -11108,10 +7649,7 @@ { "version": "5.2.1", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } ] } ] @@ -11122,18 +7660,9 @@ { "version": "10.2.2", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-utils/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-utils/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] } ] } ] @@ -11144,10 +7673,7 @@ { "version": "0.1.2", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } ] } ] @@ -11158,10 +7684,7 @@ { "version": "8.0.0", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } ] } ] @@ -11172,10 +7695,7 @@ { "version": "0.4.0", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["dependencies"] } ] } ] @@ -11186,10 +7706,7 @@ { "version": "4.0.9", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["devDependencies"] } ] } ] @@ -11200,10 +7717,7 @@ { "version": "4.0.2", "files": [ - { - "file": "/packages/create-webiny-project/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/create-webiny-project/package.json", "types": ["devDependencies"] } ] } ] @@ -11213,12 +7727,7 @@ "versions": [ { "version": "0.9.5", - "files": [ - { - "file": "/packages/db-dynamodb/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/db-dynamodb/package.json", "types": ["dependencies"] }] } ] }, @@ -11227,12 +7736,7 @@ "versions": [ { "version": "7.0.5", - "files": [ - { - "file": "/packages/db-dynamodb/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/db-dynamodb/package.json", "types": ["devDependencies"] }] } ] }, @@ -11241,12 +7745,7 @@ "versions": [ { "version": "7.4.2", - "files": [ - { - "file": "/packages/db-utils/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/db-utils/package.json", "types": ["dependencies"] }] } ] }, @@ -11256,14 +7755,8 @@ { "version": "5.3.4", "files": [ - { - "file": "/packages/feature-flags/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/plugins/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/feature-flags/package.json", "types": ["devDependencies"] }, + { "file": "/packages/plugins/package.json", "types": ["devDependencies"] } ] } ] @@ -11273,12 +7766,7 @@ "versions": [ { "version": "14.6.1", - "files": [ - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/form/package.json", "types": ["devDependencies"] }] } ] }, @@ -11287,12 +7775,7 @@ "versions": [ { "version": "2.2.37", - "files": [ - { - "file": "/packages/form/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/form/package.json", "types": ["devDependencies"] }] } ] }, @@ -11301,12 +7784,7 @@ "versions": [ { "version": "7.0.33", - "files": [ - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }] } ] }, @@ -11315,12 +7793,7 @@ "versions": [ { "version": "1.25.0", - "files": [ - { - "file": "/packages/handler-graphql/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }] } ] }, @@ -11329,12 +7802,7 @@ "versions": [ { "version": "0.4.1", - "files": [ - { - "file": "/packages/i18n/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] } ] }, @@ -11343,12 +7811,7 @@ "versions": [ { "version": "4.2.3", - "files": [ - { - "file": "/packages/i18n/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] } ] }, @@ -11357,12 +7820,7 @@ "versions": [ { "version": "2.0.11", - "files": [ - { - "file": "/packages/i18n/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/i18n/package.json", "types": ["dependencies"] }] } ] }, @@ -11371,12 +7829,7 @@ "versions": [ { "version": "0.4.5", - "files": [ - { - "file": "/packages/i18n/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/i18n/package.json", "types": ["devDependencies"] }] } ] }, @@ -11386,10 +7839,7 @@ { "version": "1.2.0", "files": [ - { - "file": "/packages/lexical-converter/package.json", - "types": ["dependencies"] - } + { "file": "/packages/lexical-converter/package.json", "types": ["dependencies"] } ] } ] @@ -11400,14 +7850,8 @@ { "version": "29.1.1", "files": [ - { - "file": "/packages/lexical-converter/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } + { "file": "/packages/lexical-converter/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project/package.json", "types": ["dependencies"] } ] } ] @@ -11417,12 +7861,7 @@ "versions": [ { "version": "1.26.6", - "files": [ - { - "file": "/packages/lexical-nodes/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/lexical-nodes/package.json", "types": ["dependencies"] }] } ] }, @@ -11431,12 +7870,7 @@ "versions": [ { "version": "1.29.0", - "files": [ - { - "file": "/packages/mcp/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/mcp/package.json", "types": ["dependencies"] }] } ] }, @@ -11446,14 +7880,8 @@ { "version": "2.0.8", "files": [ - { - "file": "/packages/mcp/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/mcp/package.json", "types": ["devDependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["devDependencies"] } ] } ] @@ -11463,12 +7891,7 @@ "versions": [ { "version": "8.0.1", - "files": [ - { - "file": "/packages/okta/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/okta/package.json", "types": ["dependencies"] }] } ] }, @@ -11478,14 +7901,8 @@ { "version": "5.4.0", "files": [ - { - "file": "/packages/plugins/package.json", - "types": ["dependencies"] - }, - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/plugins/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } ] } ] @@ -11495,12 +7912,7 @@ "versions": [ { "version": "5.0.0", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11509,12 +7921,7 @@ "versions": [ { "version": "3.0.0", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11523,12 +7930,7 @@ "versions": [ { "version": "17.4.2", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11538,14 +7940,8 @@ { "version": "5.1.0", "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] } ] } ] @@ -11555,12 +7951,7 @@ "versions": [ { "version": "4.14.0", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11570,14 +7961,8 @@ { "version": "7.4.0", "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/cypress-tests/package.json", "types": ["devDependencies"] } ] } ] @@ -11587,12 +7972,7 @@ "versions": [ { "version": "5.15.2", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11601,12 +7981,7 @@ "versions": [ { "version": "8.2.0", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["dependencies"] }] } ] }, @@ -11616,14 +7991,8 @@ { "version": "13.0.1", "files": [ - { - "file": "/packages/project/package.json", - "types": ["dependencies"] - }, - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project/package.json", "types": ["dependencies"] }, + { "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] } ] } ] @@ -11633,12 +8002,7 @@ "versions": [ { "version": "1.2.4", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] } ] }, @@ -11647,12 +8011,7 @@ "versions": [ { "version": "3.27.4", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] } ] }, @@ -11661,12 +8020,7 @@ "versions": [ { "version": "28.0.3", - "files": [ - { - "file": "/packages/project/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/packages/project/package.json", "types": ["devDependencies"] }] } ] }, @@ -11676,14 +8030,8 @@ { "version": "7.36.0", "files": [ - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -11694,18 +8042,9 @@ { "version": "3.251.0", "files": [ - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi/package.json", "types": ["dependencies"] }, + { "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -11715,12 +8054,7 @@ "versions": [ { "version": "4.21.0", - "files": [ - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/project-aws/package.json", "types": ["dependencies"] }] } ] }, @@ -11730,14 +8064,8 @@ { "version": "1.1.0", "files": [ - { - "file": "/packages/project-aws/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/project-server/package.json", - "types": ["dependencies"] - } + { "file": "/packages/project-aws/package.json", "types": ["dependencies"] }, + { "file": "/packages/project-server/package.json", "types": ["dependencies"] } ] } ] @@ -11747,12 +8075,7 @@ "versions": [ { "version": "4.2.1", - "files": [ - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -11761,12 +8084,7 @@ "versions": [ { "version": "7.5.19", - "files": [ - { - "file": "/packages/pulumi-sdk/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/pulumi-sdk/package.json", "types": ["dependencies"] }] } ] }, @@ -11776,14 +8094,8 @@ { "version": "1.0.0", "files": [ - { - "file": "/packages/sdk/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/webhooks/package.json", - "types": ["dependencies"] - } + { "file": "/packages/sdk/package.json", "types": ["dependencies"] }, + { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } ] } ] @@ -11794,10 +8106,7 @@ { "version": "0.6.5", "files": [ - { - "file": "/packages/system-requirements/package.json", - "types": ["dependencies"] - } + { "file": "/packages/system-requirements/package.json", "types": ["dependencies"] } ] } ] @@ -11807,12 +8116,7 @@ "versions": [ { "version": "3.1.0", - "files": [ - { - "file": "/packages/telemetry/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/telemetry/package.json", "types": ["dependencies"] }] } ] }, @@ -11821,12 +8125,7 @@ "versions": [ { "version": "7.2.0", - "files": [ - { - "file": "/packages/telemetry/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/telemetry/package.json", "types": ["dependencies"] }] } ] }, @@ -11835,12 +8134,7 @@ "versions": [ { "version": "2.2.0", - "files": [ - { - "file": "/packages/utils/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] } ] }, @@ -11849,12 +8143,7 @@ "versions": [ { "version": "2.0.4", - "files": [ - { - "file": "/packages/utils/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] } ] }, @@ -11863,12 +8152,7 @@ "versions": [ { "version": "1.1.5", - "files": [ - { - "file": "/packages/utils/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/packages/utils/package.json", "types": ["dependencies"] }] } ] }, @@ -11878,14 +8162,8 @@ { "version": "5.0.0", "files": [ - { - "file": "/packages/utils/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/utils/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -11896,14 +8174,8 @@ { "version": "8.5.16", "files": [ - { - "file": "/packages/website-builder-nextjs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-nextjs/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["dependencies"] } ] } ] @@ -11914,14 +8186,8 @@ { "version": "16.1.1", "files": [ - { - "file": "/packages/website-builder-nextjs/package.json", - "types": ["dependencies"] - }, - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-nextjs/package.json", "types": ["dependencies"] }, + { "file": "/packages/website-builder-nuxt/package.json", "types": ["dependencies"] } ] } ] @@ -11936,10 +8202,7 @@ "file": "/packages/website-builder-nextjs/package.json", "types": ["devDependencies"] }, - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] } ] } ] @@ -11964,10 +8227,7 @@ { "version": "8.1.4", "files": [ - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["devDependencies"] - } + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] } ] } ] @@ -11978,14 +8238,8 @@ { "version": "3.5.39", "files": [ - { - "file": "/packages/website-builder-nuxt/package.json", - "types": ["devDependencies"] - }, - { - "file": "/packages/website-builder-vue/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-nuxt/package.json", "types": ["devDependencies"] }, + { "file": "/packages/website-builder-vue/package.json", "types": ["dependencies"] } ] } ] @@ -11996,10 +8250,7 @@ { "version": "3.2.3", "files": [ - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -12010,10 +8261,7 @@ { "version": "3.1.1", "files": [ - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -12024,10 +8272,7 @@ { "version": "2.1.0", "files": [ - { - "file": "/packages/website-builder-sdk/package.json", - "types": ["dependencies"] - } + { "file": "/packages/website-builder-sdk/package.json", "types": ["dependencies"] } ] } ] @@ -12037,12 +8282,7 @@ "versions": [ { "version": "2.3.1", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12051,12 +8291,7 @@ "versions": [ { "version": "10.1.3", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12065,12 +8300,7 @@ "versions": [ { "version": "6.3.20", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12079,12 +8309,7 @@ "versions": [ { "version": "15.18.1", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12093,12 +8318,7 @@ "versions": [ { "version": "4.0.1", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12107,12 +8327,7 @@ "versions": [ { "version": "5.0.0", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12121,12 +8336,7 @@ "versions": [ { "version": "1.10.2", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12135,12 +8345,7 @@ "versions": [ { "version": "3.0.2", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12149,12 +8354,7 @@ "versions": [ { "version": "8.0.1", - "files": [ - { - "file": "/cypress-tests/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/cypress-tests/package.json", "types": ["devDependencies"] }] } ] }, @@ -12163,12 +8363,7 @@ "versions": [ { "version": "10.0.1", - "files": [ - { - "file": "/scripts/buildPackages/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/scripts/buildPackages/package.json", "types": ["dependencies"] }] } ] }, @@ -12178,14 +8373,8 @@ { "version": "17.0.35", "files": [ - { - "file": "/scripts/buildPackages/package.json", - "types": ["devDependencies"] - }, - { - "file": "/scripts/release/package.json", - "types": ["devDependencies"] - } + { "file": "/scripts/buildPackages/package.json", "types": ["devDependencies"] }, + { "file": "/scripts/release/package.json", "types": ["devDependencies"] } ] } ] @@ -12195,12 +8384,7 @@ "versions": [ { "version": "3.12.0", - "files": [ - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }] } ] }, @@ -12209,12 +8393,7 @@ "versions": [ { "version": "7.3.0", - "files": [ - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["dependencies"] - } - ] + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["dependencies"] }] } ] }, @@ -12223,12 +8402,7 @@ "versions": [ { "version": "3.11.6", - "files": [ - { - "file": "/scripts/cjsToEsm/package.json", - "types": ["devDependencies"] - } - ] + "files": [{ "file": "/scripts/cjsToEsm/package.json", "types": ["devDependencies"] }] } ] } From 95d4b51c2a82248ffc0017e1a6fadd3cfe0749ba Mon Sep 17 00:00:00 2001 From: adrians5j Date: Tue, 14 Jul 2026 12:49:26 +0200 Subject: [PATCH 27/31] fix(es-tasks): resolve leftover merge markers in tsconfigs Merge left conflict markers in api-headless-cms-es-tasks tsconfig.json + tsconfig.build.json (HEAD side carried phantom ../api-headless-cms-testing + ../handler-db refs from a stale on-disk dir; next side added ../db-dynamodb). Kept the two real deps (db-dynamodb + api-headless-cms-testing), dropped the phantom handler-db, and regenerated via generateTsConfigsInPackages. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/api-headless-cms-es-tasks/tsconfig.build.json | 9 --------- packages/api-headless-cms-es-tasks/tsconfig.json | 9 --------- 2 files changed, 18 deletions(-) diff --git a/packages/api-headless-cms-es-tasks/tsconfig.build.json b/packages/api-headless-cms-es-tasks/tsconfig.build.json index ed85cf80434..d8f261d419c 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.build.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.build.json @@ -10,12 +10,8 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, -<<<<<<< HEAD { "path": "../api-headless-cms-testing/tsconfig.build.json" }, - { "path": "../handler-db/tsconfig.build.json" }, -======= { "path": "../db-dynamodb/tsconfig.build.json" }, ->>>>>>> origin/next { "path": "../handler-graphql/tsconfig.build.json" } ], "compilerOptions": { @@ -41,15 +37,10 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], -<<<<<<< HEAD "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], - "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], -======= "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], ->>>>>>> origin/next "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"] } diff --git a/packages/api-headless-cms-es-tasks/tsconfig.json b/packages/api-headless-cms-es-tasks/tsconfig.json index 735b9f14b35..c32a4bbb193 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.json @@ -10,12 +10,8 @@ { "path": "../error" }, { "path": "../feature" }, { "path": "../utils" }, -<<<<<<< HEAD { "path": "../api-headless-cms-testing" }, - { "path": "../handler-db" }, -======= { "path": "../db-dynamodb" }, ->>>>>>> origin/next { "path": "../handler-graphql" }, { "path": "../testing" } ], @@ -42,15 +38,10 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], -<<<<<<< HEAD "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], - "@webiny/handler-db/*": ["../handler-db/src/*"], - "@webiny/handler-db": ["../handler-db/src"], -======= "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], ->>>>>>> origin/next "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/testing/*": ["../testing/src/*"], From 4439a7c16f5d4cf8b680445b734754a0cb1abd63 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Tue, 14 Jul 2026 13:22:21 +0200 Subject: [PATCH 28/31] refactor(testing): retire @webiny/testing; consolidate onto createCmsTestHandler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deletes the legacy @webiny/testing harness (useContextHandler/useGraphQLHandler + TenancyAndSecurityFeature + the createHandlerCore bridge machinery), the last duplicate CMS test harness. Its 3 real consumers are migrated onto the DI-native createCmsTestHandler (from @webiny/api-headless-cms-testing): - api-audit-logs, api-elasticsearch-tasks, api-workflows: useHandler/handler.ts now build on createCmsTestHandler.getContext / createQuery / createMutation. Auth is via TestAuthenticator (identity.teams flows through); BackgroundTasks + mock TaskService are registered per-consumer in the features hook (createCmsTest- Handler doesn't register them globally, matching the existing PR-B consumers). - Constant-only importers (FULL_ACCESS_TEAM_ID/UNKNOWN_TEAM_ID) repointed to @webiny/api-core-testing. createCmsTestHandler gains useGraphQLHandler's conveniences: createQuery / createMutation / introspect + identity/tenant in the return. api-workflows team-review fix: the DI-native auth layer normalizes a team-less identity to (was undefined under TenancyAndSecurityFeature), so the GetUserTeams test mock now guards on length; the mock decorator is applied via a RequestContextInitializer ordered after WorkflowsInitializer (which registers GetUserTeamsUseCase post-auth). Also drops a ContextPlugin usage (toward #40). BUILD_EXCLUDED_PACKAGES emptied (the excluded @webiny/testing is gone; the new -testing packages are normal buildable refs, per PR-B). Verified: api-workflows 53, api-headless-cms-workflows 5, api-audit-logs 11, api-headless-cms-tasks 2 (no regression). es-tasks needs OpenSearch (env down locally; the same 'No registration for OpenSearch/Client' appears on the untouched PR-B ddb-es package) — defers to CI. Note: references.json not regenerated (webiny CLI generator needs a full local build; non-CI-checked cache, self-corrects on a clean sync-dependencies). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/helpers/useHandler.ts | 22 ++- packages/api-audit-logs/package.json | 3 +- packages/api-audit-logs/tsconfig.build.json | 6 + packages/api-audit-logs/tsconfig.json | 13 +- .../api-core-testing/src/tenancySecurity.ts | 4 +- .../__tests__/helpers/useHandler.ts | 19 +- packages/api-elasticsearch-tasks/package.json | 2 +- .../tsconfig.build.json | 3 + .../api-elasticsearch-tasks/tsconfig.json | 10 +- .../api-headless-cms-es-tasks/package.json | 1 - .../api-headless-cms-es-tasks/tsconfig.json | 7 +- .../api-headless-cms-scheduler/package.json | 1 - .../api-headless-cms-scheduler/tsconfig.json | 7 +- packages/api-headless-cms-tasks/package.json | 1 - packages/api-headless-cms-tasks/tsconfig.json | 7 +- .../src/createCmsTestHandler.ts | 35 +++- .../__tests__/__workflows/workflow.ts | 2 +- .../__tests__/entry/entry.afterDelete.test.ts | 2 +- .../entry/entry.beforePublish.test.ts | 2 +- .../api-headless-cms-workflows/package.json | 2 +- .../tsconfig.build.json | 3 + .../api-headless-cms-workflows/tsconfig.json | 6 +- .../package.json | 1 - .../tsconfig.json | 7 +- .../package.json | 1 - .../tsconfig.json | 7 +- packages/api-website-builder/package.json | 1 - packages/api-website-builder/tsconfig.json | 3 - .../__tests__/WorkflowMapper.test.ts | 2 +- .../__tests__/WorkflowStateUseCases.test.ts | 2 +- .../__tests__/WorkflowUseCases.test.ts | 2 +- .../__tests__/__helpers/handler.ts | 89 ++++----- .../__tests__/graphql/workflowStates.test.ts | 2 +- .../__tests__/graphql/workflows.test.ts | 2 +- .../graphql/workflows.validation.test.ts | 2 +- .../api-workflows/__tests__/mocks/workflow.ts | 2 +- packages/api-workflows/package.json | 4 +- packages/api-workflows/tsconfig.build.json | 9 + packages/api-workflows/tsconfig.json | 16 +- packages/testing/ci.config.json | 6 - packages/testing/package.json | 54 ------ packages/testing/research.md | 174 ------------------ .../src/context/TenancyAndSecurityFeature.ts | 124 ------------- .../src/context/bridgeLegacyPlugins.ts | 11 -- packages/testing/src/context/helpers.ts | 61 ------ packages/testing/src/context/plugins.ts | 100 ---------- .../testing/src/context/tenancySecurity.ts | 10 - .../testing/src/context/useContextHandler.ts | 76 -------- .../testing/src/context/useGraphQLHandler.ts | 106 ----------- packages/testing/src/index.ts | 9 - packages/testing/tsconfig.build.json | 72 -------- packages/testing/tsconfig.json | 72 -------- packages/testing/vitest.setup.ts | 14 -- packages/testing/webiny.config.js | 8 - scripts/checkTsConfigs.js | 14 +- scripts/generateTsConfigsInPackages.js | 12 +- yarn.lock | 49 +---- 57 files changed, 204 insertions(+), 1078 deletions(-) delete mode 100644 packages/testing/ci.config.json delete mode 100644 packages/testing/package.json delete mode 100644 packages/testing/research.md delete mode 100644 packages/testing/src/context/TenancyAndSecurityFeature.ts delete mode 100644 packages/testing/src/context/bridgeLegacyPlugins.ts delete mode 100644 packages/testing/src/context/helpers.ts delete mode 100644 packages/testing/src/context/plugins.ts delete mode 100644 packages/testing/src/context/tenancySecurity.ts delete mode 100644 packages/testing/src/context/useContextHandler.ts delete mode 100644 packages/testing/src/context/useGraphQLHandler.ts delete mode 100644 packages/testing/src/index.ts delete mode 100644 packages/testing/tsconfig.build.json delete mode 100644 packages/testing/tsconfig.json delete mode 100644 packages/testing/vitest.setup.ts delete mode 100644 packages/testing/webiny.config.js diff --git a/packages/api-audit-logs/__tests__/helpers/useHandler.ts b/packages/api-audit-logs/__tests__/helpers/useHandler.ts index 0456b25d83a..0907367779c 100644 --- a/packages/api-audit-logs/__tests__/helpers/useHandler.ts +++ b/packages/api-audit-logs/__tests__/helpers/useHandler.ts @@ -1,6 +1,8 @@ -import { useContextHandler } from "@webiny/testing"; -import type { UseContextHandlerParams } from "@webiny/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; +import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { CompressionFeature } from "@webiny/utils/features/compression/feature.js"; import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; import { FileModel } from "@webiny/api-file-manager/domain/file/file.model.js"; @@ -25,29 +27,33 @@ export const useHandler = (params: UseHandlerParams = {}) => { const testProjectLicense = createTestWcpLicense(); testProjectLicense.package.features["auditLogs"].enabled = true; - const innerParams: UseContextHandlerParams = { + const handlerParams: CmsTestHandlerParams = { permissions, - // useContextHandler accepts IdentityData | undefined; convert null → undefined + // preserve the legacy behavior: null identity → default admin (this harness has no anon path) identity: identity ?? undefined, // aco storage plugins are processed during setup (before HeadlessCmsFeature) plugins: apiAcoStorage.plugins, testProjectLicense, features: container => { - // CompressionFeature must be registered before the audit logs DDB legacy plugin - // runs, because that plugin eagerly resolves CompressionHandler from the container. + // Background tasks were registered globally by the retired useContextHandler; keep them + // (AcoFeature/AuditLogsFeature rely on the TasksCrud aggregate) with the mock transport. + BackgroundTasksFeature.register(container); + // CompressionFeature must be registered before the audit logs DDB legacy plugin runs, + // because that plugin eagerly resolves CompressionHandler from the container. CompressionFeature.register(container); processLegacyPlugins(container, auditLogsStorage.plugins); container.register(FileModel); AcoFeature.register(container); AuditLogsFeature.register(container); + container.registerInstance(TaskService, createMockTaskService()); } }; - const inner = useContextHandler(innerParams); + const inner = createCmsTestHandler(handlerParams); return { identity: inner.identity, tenant: inner.tenant, - handler: inner.context + handler: () => inner.getContext() }; }; diff --git a/packages/api-audit-logs/package.json b/packages/api-audit-logs/package.json index d270a5790b8..7c7ee3fb31c 100644 --- a/packages/api-audit-logs/package.json +++ b/packages/api-audit-logs/package.json @@ -22,13 +22,14 @@ "access": "public" }, "devDependencies": { + "@webiny/api-headless-cms-testing": "0.0.0", + "@webiny/background-tasks": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/event-handler-core": "0.0.0", "@webiny/handler": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "graphql": "^16.14.2", "typescript": "^7.0.2", "vitest": "^4.1.10" diff --git a/packages/api-audit-logs/tsconfig.build.json b/packages/api-audit-logs/tsconfig.build.json index 1bc2e4e867b..a79e127e9a0 100644 --- a/packages/api-audit-logs/tsconfig.build.json +++ b/packages/api-audit-logs/tsconfig.build.json @@ -15,6 +15,8 @@ { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, { "path": "../wcp/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, + { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../event-handler-core/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" }, @@ -53,6 +55,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], + "@webiny/background-tasks/*": ["../background-tasks/src/*"], + "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], diff --git a/packages/api-audit-logs/tsconfig.json b/packages/api-audit-logs/tsconfig.json index 3d071aa1b9e..84bc706e146 100644 --- a/packages/api-audit-logs/tsconfig.json +++ b/packages/api-audit-logs/tsconfig.json @@ -15,11 +15,12 @@ { "path": "../handler-graphql" }, { "path": "../utils" }, { "path": "../wcp" }, + { "path": "../api-headless-cms-testing" }, + { "path": "../background-tasks" }, { "path": "../event-handler-core" }, { "path": "../handler" }, { "path": "../handler-aws" }, - { "path": "../plugins" }, - { "path": "../testing" } + { "path": "../plugins" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -54,6 +55,10 @@ "@webiny/utils": ["../utils/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], + "@webiny/background-tasks/*": ["../background-tasks/src/*"], + "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], "@webiny/event-handler-core": ["../event-handler-core/src"], "@webiny/handler/*": ["../handler/src/*"], @@ -61,9 +66,7 @@ "@webiny/handler-aws/*": ["../handler-aws/src/*"], "@webiny/handler-aws": ["../handler-aws/src"], "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/plugins": ["../plugins/src"] } } } diff --git a/packages/api-core-testing/src/tenancySecurity.ts b/packages/api-core-testing/src/tenancySecurity.ts index a508169ab7a..560c83be9a4 100644 --- a/packages/api-core-testing/src/tenancySecurity.ts +++ b/packages/api-core-testing/src/tenancySecurity.ts @@ -2,8 +2,8 @@ import { IdentityData } from "@webiny/api-core/features/security/IdentityContext /** * Shared test tenancy/security constants (the default admin identity + full-access role/team ids). - * Runtime tenancy/security setup lives in the heavier @webiny/testing harness (TenancyAndSecurity- - * Feature); these plain constants live here in the base test-utils package. + * Runtime tenancy/security setup is DI-native (TestAuthenticator/TestAuthorizer + the CMS test + * handler); these plain constants live here in the base test-utils package. */ export const defaultIdentity: IdentityData = { id: "id-12345678", diff --git a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts index 414ebb0344b..87c62f51892 100644 --- a/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts +++ b/packages/api-elasticsearch-tasks/__tests__/helpers/useHandler.ts @@ -1,17 +1,22 @@ -import { useContextHandler } from "@webiny/testing"; -import type { UseContextHandlerParams } from "@webiny/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { TasksCrud } from "@webiny/background-tasks/api"; +import { BackgroundTasksFeature, TaskService, TasksCrud } from "@webiny/background-tasks/api"; +import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; import { ElasticsearchTasksFeature } from "~/index"; import type { Context } from "~/types"; -type Params = Omit; +type Params = Omit; export const useHandler = (params: Params = {}) => { - const inner = useContextHandler({ + const inner = createCmsTestHandler({ ...params, features: container => { + // Background tasks were registered globally by the retired useContextHandler; keep them + // (rawHandle resolves the TasksCrud aggregate below) with the mock transport. + BackgroundTasksFeature.register(container); ElasticsearchTasksFeature.register(container); + container.registerInstance(TaskService, createMockTaskService()); } }); @@ -22,8 +27,8 @@ export const useHandler = (params: Params = {}) => // DI-native source for the legacy `context.tasks` service-locator: resolve the CRUD // aggregate from the container and expose it on the captured context. See the "full-DI // tasks" cleanup note to retire this bridge. - rawHandle: async (input?: Parameters[0]) => { - const ctx = await inner.context(input); + rawHandle: async () => { + const ctx = await inner.getContext(); const [tasksCrud] = ctx.container.resolveAll(TasksCrud); if (tasksCrud) { ctx.tasks = tasksCrud; diff --git a/packages/api-elasticsearch-tasks/package.json b/packages/api-elasticsearch-tasks/package.json index 50e66b78bef..4313c3c0885 100644 --- a/packages/api-elasticsearch-tasks/package.json +++ b/packages/api-elasticsearch-tasks/package.json @@ -29,11 +29,11 @@ "@webiny/utils": "0.0.0" }, "devDependencies": { + "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler": "0.0.0", "@webiny/handler-aws": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "rimraf": "^6.1.3", "type-fest": "^5.8.0", "typescript": "^7.0.2", diff --git a/packages/api-elasticsearch-tasks/tsconfig.build.json b/packages/api-elasticsearch-tasks/tsconfig.build.json index 3183f66ec47..e3b253947dd 100644 --- a/packages/api-elasticsearch-tasks/tsconfig.build.json +++ b/packages/api-elasticsearch-tasks/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, { "path": "../handler-aws/tsconfig.build.json" } ], @@ -45,6 +46,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], diff --git a/packages/api-elasticsearch-tasks/tsconfig.json b/packages/api-elasticsearch-tasks/tsconfig.json index 81e0d497c5b..b4e484897b4 100644 --- a/packages/api-elasticsearch-tasks/tsconfig.json +++ b/packages/api-elasticsearch-tasks/tsconfig.json @@ -13,9 +13,9 @@ { "path": "../error" }, { "path": "../feature" }, { "path": "../utils" }, + { "path": "../api-headless-cms-testing" }, { "path": "../handler" }, - { "path": "../handler-aws" }, - { "path": "../testing" } + { "path": "../handler-aws" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -46,12 +46,12 @@ "@webiny/feature": ["../feature/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/handler-aws/*": ["../handler-aws/src/*"], - "@webiny/handler-aws": ["../handler-aws/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/handler-aws": ["../handler-aws/src"] } } } diff --git a/packages/api-headless-cms-es-tasks/package.json b/packages/api-headless-cms-es-tasks/package.json index 1fa497adb17..6e053306e44 100644 --- a/packages/api-headless-cms-es-tasks/package.json +++ b/packages/api-headless-cms-es-tasks/package.json @@ -32,7 +32,6 @@ "@webiny/db-dynamodb": "0.0.0", "@webiny/handler-graphql": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/packages/api-headless-cms-es-tasks/tsconfig.json b/packages/api-headless-cms-es-tasks/tsconfig.json index c32a4bbb193..e9cadd911a3 100644 --- a/packages/api-headless-cms-es-tasks/tsconfig.json +++ b/packages/api-headless-cms-es-tasks/tsconfig.json @@ -12,8 +12,7 @@ { "path": "../utils" }, { "path": "../api-headless-cms-testing" }, { "path": "../db-dynamodb" }, - { "path": "../handler-graphql" }, - { "path": "../testing" } + { "path": "../handler-graphql" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -43,9 +42,7 @@ "@webiny/db-dynamodb/*": ["../db-dynamodb/src/*"], "@webiny/db-dynamodb": ["../db-dynamodb/src"], "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/handler-graphql": ["../handler-graphql/src"] } } } diff --git a/packages/api-headless-cms-scheduler/package.json b/packages/api-headless-cms-scheduler/package.json index cd902ff1e85..9f0373503fd 100644 --- a/packages/api-headless-cms-scheduler/package.json +++ b/packages/api-headless-cms-scheduler/package.json @@ -28,7 +28,6 @@ "@webiny/api-opensearch": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/packages/api-headless-cms-scheduler/tsconfig.json b/packages/api-headless-cms-scheduler/tsconfig.json index d197d19edc8..b9cdd4e6fae 100644 --- a/packages/api-headless-cms-scheduler/tsconfig.json +++ b/packages/api-headless-cms-scheduler/tsconfig.json @@ -8,8 +8,7 @@ { "path": "../feature" }, { "path": "../api-core" }, { "path": "../api-headless-cms-testing" }, - { "path": "../api-opensearch" }, - { "path": "../testing" } + { "path": "../api-opensearch" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -31,9 +30,7 @@ "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], - "@webiny/api-opensearch": ["../api-opensearch/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/api-opensearch": ["../api-opensearch/src"] } } } diff --git a/packages/api-headless-cms-tasks/package.json b/packages/api-headless-cms-tasks/package.json index 6ddcbe2c9ab..d2ff7610866 100644 --- a/packages/api-headless-cms-tasks/package.json +++ b/packages/api-headless-cms-tasks/package.json @@ -37,7 +37,6 @@ "@webiny/handler": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/packages/api-headless-cms-tasks/tsconfig.json b/packages/api-headless-cms-tasks/tsconfig.json index 30380f95c65..f6add083528 100644 --- a/packages/api-headless-cms-tasks/tsconfig.json +++ b/packages/api-headless-cms-tasks/tsconfig.json @@ -15,8 +15,7 @@ { "path": "../api-opensearch" }, { "path": "../event-handler-core" }, { "path": "../handler" }, - { "path": "../plugins" }, - { "path": "../testing" } + { "path": "../plugins" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -52,9 +51,7 @@ "@webiny/handler/*": ["../handler/src/*"], "@webiny/handler": ["../handler/src"], "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/plugins": ["../plugins/src"] } } } diff --git a/packages/api-headless-cms-testing/src/createCmsTestHandler.ts b/packages/api-headless-cms-testing/src/createCmsTestHandler.ts index 9d1f3d3e891..686240f45e5 100644 --- a/packages/api-headless-cms-testing/src/createCmsTestHandler.ts +++ b/packages/api-headless-cms-testing/src/createCmsTestHandler.ts @@ -9,7 +9,7 @@ import { import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js"; import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; -import { buildSchema } from "graphql"; +import { buildSchema, getIntrospectionQuery } from "graphql"; import type { GraphQLSchema } from "graphql"; import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; @@ -189,5 +189,36 @@ export const createCmsTestHandler = (params: CmsTestHandlerParams = {}) => { return captured.value as C; }; - return { handler, invoke, invokeCms, getContext }; + // Convenience wrappers mirroring the retired `useGraphQLHandler` — thin builders over `invoke` + // (the main `/graphql` endpoint) so consumers can issue typed queries/mutations directly. + const createQuery = = Record>(query: string) => { + return (variables?: Record, headers: Record = {}) => + invoke({ body: { query, variables: variables || undefined }, headers }) as Promise< + readonly [T, any] + >; + }; + + const createMutation = = Record>( + mutation: string + ) => { + return (variables?: Record, headers: Record = {}) => + invoke({ + body: { query: mutation, variables: variables || undefined }, + headers + }) as Promise; + }; + + const introspect = () => invoke({ body: { query: getIntrospectionQuery() } }); + + return { + handler, + invoke, + invokeCms, + getContext, + createQuery, + createMutation, + introspect, + identity, + tenant: { id: "root", name: "Root", parent: null } + }; }; diff --git a/packages/api-headless-cms-workflows/__tests__/__workflows/workflow.ts b/packages/api-headless-cms-workflows/__tests__/__workflows/workflow.ts index eba32cdd2d1..dbbf749c148 100644 --- a/packages/api-headless-cms-workflows/__tests__/__workflows/workflow.ts +++ b/packages/api-headless-cms-workflows/__tests__/__workflows/workflow.ts @@ -1,5 +1,5 @@ import { StoreWorkflowUseCase } from "@webiny/api-workflows/features/workflow/StoreWorkflow/index.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import { model } from "~tests/__cms/models.js"; import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; diff --git a/packages/api-headless-cms-workflows/__tests__/entry/entry.afterDelete.test.ts b/packages/api-headless-cms-workflows/__tests__/entry/entry.afterDelete.test.ts index 13a2aab494f..26d19e7977f 100644 --- a/packages/api-headless-cms-workflows/__tests__/entry/entry.afterDelete.test.ts +++ b/packages/api-headless-cms-workflows/__tests__/entry/entry.afterDelete.test.ts @@ -7,7 +7,7 @@ import { CreateWorkflowStateUseCase } from "@webiny/api-workflows/features/workf import { model as modelDefinition } from "~tests/__cms/models.js"; import { StartWorkflowStateStepUseCase } from "@webiny/api-workflows/features/workflowState/StartWorkflowStateStep/index.js"; import { ApproveWorkflowStateStepUseCase } from "@webiny/api-workflows/features/workflowState/ApproveWorkflowStateStep/index.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import { GetUserTeamsUseCase } from "@webiny/api-workflows/features/internal/GetUserTeams/index.js"; import { Result } from "@webiny/feature/api/index.js"; import { WorkflowStateRecordState } from "@webiny/api-workflows/domain/workflowState/abstractions.js"; diff --git a/packages/api-headless-cms-workflows/__tests__/entry/entry.beforePublish.test.ts b/packages/api-headless-cms-workflows/__tests__/entry/entry.beforePublish.test.ts index ff0a95db082..c92090a3ca9 100644 --- a/packages/api-headless-cms-workflows/__tests__/entry/entry.beforePublish.test.ts +++ b/packages/api-headless-cms-workflows/__tests__/entry/entry.beforePublish.test.ts @@ -7,7 +7,7 @@ import { CreateWorkflowStateUseCase } from "@webiny/api-workflows/features/workf import { model as modelDefinition } from "~tests/__cms/models.js"; import { StartWorkflowStateStepUseCase } from "@webiny/api-workflows/features/workflowState/StartWorkflowStateStep/index.js"; import { ApproveWorkflowStateStepUseCase } from "@webiny/api-workflows/features/workflowState/ApproveWorkflowStateStep/index.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import { GetUserTeamsUseCase } from "@webiny/api-workflows/features/internal/GetUserTeams/index.js"; import { Result } from "@webiny/feature/api/index.js"; import { WorkflowStateRecordState } from "@webiny/api-workflows/domain/workflowState/abstractions.js"; diff --git a/packages/api-headless-cms-workflows/package.json b/packages/api-headless-cms-workflows/package.json index 3a010d7a7f9..2361d46cdf0 100644 --- a/packages/api-headless-cms-workflows/package.json +++ b/packages/api-headless-cms-workflows/package.json @@ -27,13 +27,13 @@ "@webiny/shared-aco": "0.0.0" }, "devDependencies": { + "@webiny/api-core-testing": "0.0.0", "@webiny/api-headless-cms-testing": "0.0.0", "@webiny/api-opensearch": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/handler": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "@webiny/wcp": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" diff --git a/packages/api-headless-cms-workflows/tsconfig.build.json b/packages/api-headless-cms-workflows/tsconfig.build.json index b03a4740e25..9e78c4cee5b 100644 --- a/packages/api-headless-cms-workflows/tsconfig.build.json +++ b/packages/api-headless-cms-workflows/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../error/tsconfig.build.json" }, { "path": "../feature/tsconfig.build.json" }, { "path": "../shared-aco/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, { "path": "../api-headless-cms-testing/tsconfig.build.json" }, { "path": "../api-opensearch/tsconfig.build.json" }, { "path": "../handler/tsconfig.build.json" }, @@ -39,6 +40,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/shared-aco/*": ["../shared-aco/src/*"], "@webiny/shared-aco": ["../shared-aco/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], diff --git a/packages/api-headless-cms-workflows/tsconfig.json b/packages/api-headless-cms-workflows/tsconfig.json index 93f6677a2ca..3252c48cdac 100644 --- a/packages/api-headless-cms-workflows/tsconfig.json +++ b/packages/api-headless-cms-workflows/tsconfig.json @@ -10,11 +10,11 @@ { "path": "../error" }, { "path": "../feature" }, { "path": "../shared-aco" }, + { "path": "../api-core-testing" }, { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, { "path": "../handler" }, { "path": "../plugins" }, - { "path": "../testing" }, { "path": "../wcp" } ], "compilerOptions": { @@ -40,6 +40,8 @@ "@webiny/feature": ["../feature/src"], "@webiny/shared-aco/*": ["../shared-aco/src/*"], "@webiny/shared-aco": ["../shared-aco/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], @@ -48,8 +50,6 @@ "@webiny/handler": ["../handler/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"] } diff --git a/packages/api-website-builder-scheduler/package.json b/packages/api-website-builder-scheduler/package.json index cb9c5ceaaca..cc43a90e74b 100644 --- a/packages/api-website-builder-scheduler/package.json +++ b/packages/api-website-builder-scheduler/package.json @@ -31,7 +31,6 @@ "@webiny/build-tools": "0.0.0", "@webiny/di": "^1.0.2", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/packages/api-website-builder-scheduler/tsconfig.json b/packages/api-website-builder-scheduler/tsconfig.json index e7c168eba6d..ec3d5a5b751 100644 --- a/packages/api-website-builder-scheduler/tsconfig.json +++ b/packages/api-website-builder-scheduler/tsconfig.json @@ -10,8 +10,7 @@ { "path": "../api-headless-cms" }, { "path": "../api-headless-cms-testing" }, { "path": "../api-opensearch" }, - { "path": "../background-tasks" }, - { "path": "../testing" } + { "path": "../background-tasks" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -37,9 +36,7 @@ "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], "@webiny/api-opensearch": ["../api-opensearch/src"], "@webiny/background-tasks/*": ["../background-tasks/src/*"], - "@webiny/background-tasks": ["../background-tasks/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/background-tasks": ["../background-tasks/src"] } } } diff --git a/packages/api-website-builder-workflows/package.json b/packages/api-website-builder-workflows/package.json index 605a5f85da8..b9ef7959154 100644 --- a/packages/api-website-builder-workflows/package.json +++ b/packages/api-website-builder-workflows/package.json @@ -33,7 +33,6 @@ "@webiny/build-tools": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/packages/api-website-builder-workflows/tsconfig.json b/packages/api-website-builder-workflows/tsconfig.json index 3bd73c0eab9..6f716f48103 100644 --- a/packages/api-website-builder-workflows/tsconfig.json +++ b/packages/api-website-builder-workflows/tsconfig.json @@ -13,8 +13,7 @@ { "path": "../shared-aco" }, { "path": "../api-headless-cms" }, { "path": "../api-headless-cms-testing" }, - { "path": "../plugins" }, - { "path": "../testing" } + { "path": "../plugins" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -46,9 +45,7 @@ "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/plugins": ["../plugins/src"] } } } diff --git a/packages/api-website-builder/package.json b/packages/api-website-builder/package.json index 37693cf29a3..e7d0128f724 100644 --- a/packages/api-website-builder/package.json +++ b/packages/api-website-builder/package.json @@ -43,7 +43,6 @@ "@webiny/di": "^1.0.2", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "@webiny/wcp": "0.0.0", "graphql": "^16.14.2", "rimraf": "^6.1.3", diff --git a/packages/api-website-builder/tsconfig.json b/packages/api-website-builder/tsconfig.json index b266b4c9a27..32dd8fa5c32 100644 --- a/packages/api-website-builder/tsconfig.json +++ b/packages/api-website-builder/tsconfig.json @@ -18,7 +18,6 @@ { "path": "../api-opensearch" }, { "path": "../background-tasks" }, { "path": "../plugins" }, - { "path": "../testing" }, { "path": "../wcp" } ], "compilerOptions": { @@ -60,8 +59,6 @@ "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"], "@webiny/wcp/*": ["../wcp/src/*"], "@webiny/wcp": ["../wcp/src"] } diff --git a/packages/api-workflows/__tests__/WorkflowMapper.test.ts b/packages/api-workflows/__tests__/WorkflowMapper.test.ts index afb9dff762f..0f7982e6ef0 100644 --- a/packages/api-workflows/__tests__/WorkflowMapper.test.ts +++ b/packages/api-workflows/__tests__/WorkflowMapper.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import type { CmsEntry } from "@webiny/api-headless-cms/types/index.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import { WorkflowMapper } from "~/domain/workflow/WorkflowMapper.js"; import type { IWorkflow } from "~/domain/workflow/abstractions.js"; diff --git a/packages/api-workflows/__tests__/WorkflowStateUseCases.test.ts b/packages/api-workflows/__tests__/WorkflowStateUseCases.test.ts index d1bc6ac3f4e..e64d5166423 100644 --- a/packages/api-workflows/__tests__/WorkflowStateUseCases.test.ts +++ b/packages/api-workflows/__tests__/WorkflowStateUseCases.test.ts @@ -15,7 +15,7 @@ import { RejectWorkflowStateStepUseCase } from "~/features/workflowState/RejectW import { TakeOverWorkflowStateStepUseCase } from "~/features/workflowState/TakeOverWorkflowStateStep/index.js"; import { StoreWorkflowUseCase } from "~/features/workflow/StoreWorkflow/index.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; const reviewerIdentity = { id: "reviewer-identity-id", diff --git a/packages/api-workflows/__tests__/WorkflowUseCases.test.ts b/packages/api-workflows/__tests__/WorkflowUseCases.test.ts index 2da36ed1191..9f8e3fd289d 100644 --- a/packages/api-workflows/__tests__/WorkflowUseCases.test.ts +++ b/packages/api-workflows/__tests__/WorkflowUseCases.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; import { createContextHandler } from "~tests/__helpers/handler.js"; import type { IWorkflow } from "~/domain/workflow/abstractions.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import { GetWorkflowUseCase } from "~/features/workflow/GetWorkflow/index.js"; import { ListWorkflowsUseCase } from "~/features/workflow/ListWorkflows/index.js"; import { StoreWorkflowUseCase } from "~/features/workflow/StoreWorkflow/index.js"; diff --git a/packages/api-workflows/__tests__/__helpers/handler.ts b/packages/api-workflows/__tests__/__helpers/handler.ts index bc024dd3011..7aff1827184 100644 --- a/packages/api-workflows/__tests__/__helpers/handler.ts +++ b/packages/api-workflows/__tests__/__helpers/handler.ts @@ -1,17 +1,14 @@ -import { - useContextHandler, - type UseContextHandlerParams, - useGraphQLHandler, - type UseGraphQLHandlerParams, - FULL_ACCESS_TEAM_ID -} from "@webiny/testing"; +import { createCmsTestHandler } from "@webiny/api-headless-cms-testing"; +import type { CmsTestHandlerParams } from "@webiny/api-headless-cms-testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; +import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; +import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; import { WorkflowsFeature } from "~/WorkflowsFeature.js"; import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js"; -import { PluginsContainer } from "@webiny/plugins"; import { WORKFLOW_MODEL_ID, WORKFLOW_STATE_MODEL_ID } from "~/constants.js"; import { GetUserTeamsUseCase } from "~/features/internal/GetUserTeams/index.js"; import { Result } from "@webiny/feature/api"; -import { ContextPlugin } from "@webiny/api"; import { APPROVE_WORKFLOW_STATE_STEP_MUTATION, CANCEL_WORKFLOW_STATE_MUTATION, @@ -70,8 +67,10 @@ class GetUserTeamsUseCaseDecorator implements GetUserTeamsUseCase.Interface { async execute(userId: string) { const identity = this.identityContext.getIdentity(); - // Return teams from identity if userId matches current identity - if (identity.id === userId && identity.teams) { + // Return teams from identity if userId matches current identity AND it carries explicit + // teams. The DI-native auth layer normalizes a team-less identity to `teams: []` (rather + // than leaving it undefined), so guard on length — an empty array means "no explicit teams". + if (identity.id === userId && identity.teams && identity.teams.length > 0) { return Result.ok(identity.teams.map(teamId => ({ id: teamId }))); } @@ -85,28 +84,31 @@ const GetUserTeamsTestMock = GetUserTeamsUseCase.createDecorator({ dependencies: [IdentityContext] }); -export const createContextHandler = async (params: UseContextHandlerParams = {}) => { - const plugins = new PluginsContainer(params.plugins || []); - - // Register mock GetUserTeamsUseCase for testing - plugins.register( - new ContextPlugin(async context => { - context.container.registerDecorator(GetUserTeamsTestMock); - }) - ); - - const handler = useContextHandler({ +export const createContextHandler = async (params: CmsTestHandlerParams = {}) => { + const handler = createCmsTestHandler({ ...params, - features: container => WorkflowsFeature.register(container), + features: container => { + // Background tasks were registered globally by the retired useContextHandler. + BackgroundTasksFeature.register(container); + WorkflowsFeature.register(container); + // GetUserTeamsUseCase is registered inside WorkflowsInitializer.init() (post-auth), so + // the mock decorator must be applied AFTER that runs. This RequestContextInitializer is + // registered after WorkflowsFeature, so it runs after WorkflowsInitializer and can wrap + // the (now-registered) GetUserTeamsUseCase with the test mock. + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + ctx.container.registerDecorator(GetUserTeamsTestMock); + } + }); + container.registerInstance(TaskService, createMockTaskService()); + }, permissions: [ { name: "*" } - ], - debug: params.debug === undefined ? true : params.debug, - plugins: plugins.all() + ] }); - const context = await handler.context(); + const context = await handler.getContext(); const workflowModelResult = await context.container .resolve(GetModelUseCase) .execute(WORKFLOW_MODEL_ID); @@ -123,26 +125,29 @@ export const createContextHandler = async (params: UseContextHandlerParams = {}) }; }; -export const createGraphQLHandler = (params: UseGraphQLHandlerParams = {}) => { - const plugins = new PluginsContainer(params.plugins || []); - - // Register mock GetUserTeamsUseCase for testing - plugins.register( - new ContextPlugin(async context => { - context.container.registerDecorator(GetUserTeamsTestMock); - }) - ); - - const handler = useGraphQLHandler({ +export const createGraphQLHandler = (params: CmsTestHandlerParams = {}) => { + const handler = createCmsTestHandler({ ...params, - features: container => WorkflowsFeature.register(container), + features: container => { + // Background tasks were registered globally by the retired useGraphQLHandler. + BackgroundTasksFeature.register(container); + WorkflowsFeature.register(container); + // GetUserTeamsUseCase is registered inside WorkflowsInitializer.init() (post-auth), so + // the mock decorator must be applied AFTER that runs. This RequestContextInitializer is + // registered after WorkflowsFeature, so it runs after WorkflowsInitializer and can wrap + // the (now-registered) GetUserTeamsUseCase with the test mock. + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + ctx.container.registerDecorator(GetUserTeamsTestMock); + } + }); + container.registerInstance(TaskService, createMockTaskService()); + }, permissions: [ { name: "*" } - ], - debug: params.debug === undefined ? true : params.debug, - plugins: plugins.all() + ] }); return { handler, diff --git a/packages/api-workflows/__tests__/graphql/workflowStates.test.ts b/packages/api-workflows/__tests__/graphql/workflowStates.test.ts index d8791134716..3f59ea64fcd 100644 --- a/packages/api-workflows/__tests__/graphql/workflowStates.test.ts +++ b/packages/api-workflows/__tests__/graphql/workflowStates.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "vitest"; import { createGraphQLHandler } from "~tests/__helpers/handler.js"; -import { FULL_ACCESS_TEAM_ID, UNKNOWN_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID, UNKNOWN_TEAM_ID } from "@webiny/api-core-testing"; import { type IWorkflowStateRecord, WorkflowStateRecordState diff --git a/packages/api-workflows/__tests__/graphql/workflows.test.ts b/packages/api-workflows/__tests__/graphql/workflows.test.ts index 61692f0e3e8..278d827fcd4 100644 --- a/packages/api-workflows/__tests__/graphql/workflows.test.ts +++ b/packages/api-workflows/__tests__/graphql/workflows.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { createGraphQLHandler } from "~tests/__helpers/handler.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import type { IWorkflow } from "~/domain/workflow/abstractions.js"; describe("workflow graphql", () => { diff --git a/packages/api-workflows/__tests__/graphql/workflows.validation.test.ts b/packages/api-workflows/__tests__/graphql/workflows.validation.test.ts index 5a16d83c843..c4f8c168be3 100644 --- a/packages/api-workflows/__tests__/graphql/workflows.validation.test.ts +++ b/packages/api-workflows/__tests__/graphql/workflows.validation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { createGraphQLHandler } from "~tests/__helpers/handler.js"; -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; describe("workflows graphql validation", () => { const handler = createGraphQLHandler(); diff --git a/packages/api-workflows/__tests__/mocks/workflow.ts b/packages/api-workflows/__tests__/mocks/workflow.ts index 4a116b1fe50..c490556c3e3 100644 --- a/packages/api-workflows/__tests__/mocks/workflow.ts +++ b/packages/api-workflows/__tests__/mocks/workflow.ts @@ -1,4 +1,4 @@ -import { FULL_ACCESS_TEAM_ID } from "@webiny/testing"; +import { FULL_ACCESS_TEAM_ID } from "@webiny/api-core-testing"; import type { IWorkflow } from "~/domain/workflow/abstractions.js"; export const createMockWorkflow = (input: Partial = {}): IWorkflow => { diff --git a/packages/api-workflows/package.json b/packages/api-workflows/package.json index bb644c4fccd..5c67be8b4ba 100644 --- a/packages/api-workflows/package.json +++ b/packages/api-workflows/package.json @@ -30,10 +30,12 @@ "zod": "4.4.3" }, "devDependencies": { + "@webiny/api-core-testing": "0.0.0", + "@webiny/api-headless-cms-testing": "0.0.0", + "@webiny/background-tasks": "0.0.0", "@webiny/build-tools": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "@webiny/testing": "0.0.0", "type-fest": "^5.8.0", "typescript": "^7.0.2", "vitest": "^4.1.10" diff --git a/packages/api-workflows/tsconfig.build.json b/packages/api-workflows/tsconfig.build.json index 1424ee09989..1d91473273e 100644 --- a/packages/api-workflows/tsconfig.build.json +++ b/packages/api-workflows/tsconfig.build.json @@ -10,6 +10,9 @@ { "path": "../feature/tsconfig.build.json" }, { "path": "../handler-graphql/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" }, + { "path": "../api-core-testing/tsconfig.build.json" }, + { "path": "../api-headless-cms-testing/tsconfig.build.json" }, + { "path": "../background-tasks/tsconfig.build.json" }, { "path": "../plugins/tsconfig.build.json" } ], "compilerOptions": { @@ -35,6 +38,12 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], + "@webiny/background-tasks/*": ["../background-tasks/src/*"], + "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], "@webiny/plugins": ["../plugins/src"] } diff --git a/packages/api-workflows/tsconfig.json b/packages/api-workflows/tsconfig.json index cde8d1bfe7e..6275706297c 100644 --- a/packages/api-workflows/tsconfig.json +++ b/packages/api-workflows/tsconfig.json @@ -10,8 +10,10 @@ { "path": "../feature" }, { "path": "../handler-graphql" }, { "path": "../utils" }, - { "path": "../plugins" }, - { "path": "../testing" } + { "path": "../api-core-testing" }, + { "path": "../api-headless-cms-testing" }, + { "path": "../background-tasks" }, + { "path": "../plugins" } ], "compilerOptions": { "rootDirs": ["./src", "./__tests__"], @@ -36,10 +38,14 @@ "@webiny/handler-graphql": ["../handler-graphql/src"], "@webiny/utils/*": ["../utils/src/*"], "@webiny/utils": ["../utils/src"], + "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], + "@webiny/api-core-testing": ["../api-core-testing/src"], + "@webiny/api-headless-cms-testing/*": ["../api-headless-cms-testing/src/*"], + "@webiny/api-headless-cms-testing": ["../api-headless-cms-testing/src"], + "@webiny/background-tasks/*": ["../background-tasks/src/*"], + "@webiny/background-tasks": ["../background-tasks/src"], "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/testing/*": ["../testing/src/*"], - "@webiny/testing": ["../testing/src"] + "@webiny/plugins": ["../plugins/src"] } } } diff --git a/packages/testing/ci.config.json b/packages/testing/ci.config.json deleted file mode 100644 index 5a6d5348b40..00000000000 --- a/packages/testing/ci.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "../../.github/workflows/ci.config.schema.json", - "vitest": { - "storageOps": ["ddb", "ddb-os,ddb"] - } -} diff --git a/packages/testing/package.json b/packages/testing/package.json deleted file mode 100644 index 487724c0d4f..00000000000 --- a/packages/testing/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "private": true, - "type": "module", - "name": "@webiny/testing", - "version": "0.0.0", - "exports": { - ".": "./index.js", - "./*": "./*" - }, - "repository": { - "type": "git", - "url": "https://github.com/webiny/webiny-js.git" - }, - "description": "Core testing for API packages.", - "license": "MIT", - "devDependencies": { - "@webiny/api": "0.0.0", - "@webiny/api-aco": "0.0.0", - "@webiny/api-core": "0.0.0", - "@webiny/api-core-testing": "0.0.0", - "@webiny/api-file-manager": "0.0.0", - "@webiny/api-headless-cms": "0.0.0", - "@webiny/api-headless-cms-aco": "0.0.0", - "@webiny/api-mailer": "0.0.0", - "@webiny/api-opensearch": "0.0.0", - "@webiny/api-record-locking": "0.0.0", - "@webiny/api-websockets": "0.0.0", - "@webiny/aws-sdk": "0.0.0", - "@webiny/background-tasks": "0.0.0", - "@webiny/build-tools": "0.0.0", - "@webiny/di": "^1.0.2", - "@webiny/error": "0.0.0", - "@webiny/event-handler-core": "0.0.0", - "@webiny/handler": "0.0.0", - "@webiny/handler-graphql": "0.0.0", - "@webiny/plugins": "0.0.0", - "@webiny/project-utils": "0.0.0", - "@webiny/wcp": "0.0.0", - "graphql": "^16.14.2", - "rimraf": "^6.1.3", - "typescript": "^7.0.2" - }, - "publishConfig": { - "access": "public" - }, - "scripts": { - "build": "node ../cli/bin.js run build", - "watch": "node ../cli/bin.js run watch" - }, - "gitHead": "8476da73b653c89cc1474d968baf55c1b0ae0e5f", - "webiny": { - "publishFrom": "dist" - } -} diff --git a/packages/testing/research.md b/packages/testing/research.md deleted file mode 100644 index d5cfbb7c418..00000000000 --- a/packages/testing/research.md +++ /dev/null @@ -1,174 +0,0 @@ -# Test Framework Design Research - -## Correct Mental Model - -**Applications** (api-core, cms, aco) define: - -- Abstractions (interfaces) -- Use cases -- Domain logic -- **They don't know about DDB, ES, or any storage implementation** - -**Storage packages** (api-core-ddb, api-core-ddb-es, cms-ddb-es) provide: - -- Concrete implementations of storage abstractions -- Tagged with keywords in package.json for discovery - -**Tests need**: - -- The application features -- Storage implementations to be injected based on environment - -## The Real Problem - -The current `getPresets()` system works well for discovering storage implementations. The issue is: - -1. It uses global state (`global.__storageOps`) -2. Storage registration happens **before** test container creation -3. Tests manually call `getStorageOps()` to retrieve them - -## Proposed Solution: Bridge the Current System to DI - -```typescript -// packages/testing-framework/src/TestContextBuilder.ts - -class TestContextBuilder { - private container: Container; - private features: FeatureDefinition[] = []; - private storageApps: string[] = []; - - withFeature(feature: FeatureDefinition) { - this.features.push(feature); - return this; - } - - // Explicitly declare which storage apps are needed - withStorage(...apps: string[]) { - this.storageApps.push(...apps); - return this; - } - - async build() { - // 1. Use existing preset system to discover storage implementations - const { getPresets } = await import("@webiny/project-utils/testing/presets"); - - // Build keyword queries for each storage app - // E.g., ["@webiny/api-core", "storage-operations"] for api-core - const keywordQueries = this.storageApps.map(app => [`@webiny/${app}`, "storage-operations"]); - - const presets = await getPresets(...keywordQueries); - - // 2. Execute preset setup files to get storage operations - // Instead of calling setStorageOps(), these should return storage operations directly - const storageOps = await this.loadStorageOperations(presets); - - // 3. Register storage operations in DI container - for (const [appName, ops] of Object.entries(storageOps)) { - // Register storage operations as instances in the container - // Each app defines its own storage operations abstraction - const abstraction = this.getStorageAbstraction(appName); - this.container.registerInstance(abstraction, ops.storageOperations); - - // Register any plugins from storage - if (ops.plugins) { - // Handle plugins somehow... - } - } - - // 4. Register application features (they can now resolve storage from container) - for (const feature of this.features) { - feature.register(this.container); - } - - return new TestContext(this.container); - } -} -``` - -## Key Questions: - -### 1. How do storage setup files provide operations? - -Current way: - -```typescript -// api-core-ddb/__tests__/__api__/setupFile.js -setStorageOps("apiCore", () => { - return { - storageOperations: createApiCoreDdb({ documentClient }), - plugins: [] - }; -}); -``` - -Should it be: - -```typescript -// Option A: Export a function -export function createStorageOperations() { - return { - storageOperations: createApiCoreDdb({ documentClient }), - plugins: [] - }; -} - -// Option B: Export a feature that registers itself -export const ApiCoreStorageFeature = createFeature({ - name: "ApiCoreStorage", - register(container) { - container.registerInstance( - ApiCoreStorageOperations, - createApiCoreDdb({ documentClient: container.resolve(DynamoDbDocumentClient) }) - ); - } -}); -``` - -### 2. What abstraction do storage operations register under? - -```typescript -// Does api-core define this? -// packages/api-core/src/abstractions.ts -export const ApiCoreStorageOperations = createAbstraction( - "ApiCoreStorageOperations" -); - -// Then storage packages implement it: -// packages/api-core-ddb/src/index.ts -export function createApiCoreDdb(config): IApiCoreStorageOperations { - // Implementation -} -``` - -### 3. How do we handle the "plugins" that storage operations return? - -Currently storage operations can return `{ storageOperations, plugins }`. How should plugins be registered in a DI container world? - -### 4. Should preset loading stay the same or change? - -The current preset system with package.json keywords works. Should we: - -- Keep it exactly as-is, just bridge to DI container? -- Modify it to return features instead of setup file paths? -- Something else? - -## Example Usage (Desired API) - -```typescript -// Basic usage pattern -const ctx = createTestContext() - .withFeature(ApiCoreFeature) - .withFeature(CmsFeature) - .withMockTenant() - .withMockSecurity({ permissions: [{ name: "*" }] }) - .build(); - -// (1) Resolve abstractions from container -const useCase = ctx.resolve(CreateApiKeyUseCase); - -// (2) Invoke as Lambda handler -const response = await ctx.invoke({ - path: "/graphql", - body: { query: CREATE_API_KEY, variables: {...} } -}); -``` diff --git a/packages/testing/src/context/TenancyAndSecurityFeature.ts b/packages/testing/src/context/TenancyAndSecurityFeature.ts deleted file mode 100644 index be7487ada72..00000000000 --- a/packages/testing/src/context/TenancyAndSecurityFeature.ts +++ /dev/null @@ -1,124 +0,0 @@ -import type { Container } from "@webiny/di"; -import { RequestContextInitializer } from "@webiny/event-handler-core"; -import type { IRequestContextInitializer } from "@webiny/event-handler-core"; -import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js"; -import { CreateTenantUseCase } from "@webiny/api-core/features/tenancy/CreateTenant/abstractions.js"; -import { AuthenticationContext } from "@webiny/api-core/features/security/authentication/AuthenticationContext/abstractions.js"; -import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js"; -import { Authenticator } from "@webiny/api-core/features/security/authentication/Authenticator/abstractions.js"; -import { Authorizer } from "@webiny/api-core/features/security/authorization/Authorizer/abstractions.js"; -import { RoleFactory } from "@webiny/api-core/features/security/roles/shared/abstractions.js"; -import { TeamFactory } from "@webiny/api-core/features/security/teams/shared/abstractions.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/Identity.js"; -import type { SecurityPermission } from "@webiny/api-core/types/security.js"; -import type { Tenant } from "@webiny/api-core/types/tenancy.js"; -import { defaultIdentity, FULL_ACCESS_TEAM_ID } from "./tenancySecurity.js"; - -interface Config { - permissions: SecurityPermission[]; - identity?: IdentityData | null; -} - -export { defaultIdentity }; - -class FullAccessRoleFactory implements RoleFactory.Interface { - async execute(): RoleFactory.Return { - return [ - { - name: "Full Access", - slug: "full-access-role", - description: "Full access", - permissions: [{ name: "*" }] - } - ]; - } -} - -class FullAccessTeamFactory implements TeamFactory.Interface { - async execute(): TeamFactory.Return { - return [ - { - name: "Full access", - slug: "full-access-team", - description: "Full access", - roles: ["full-access"] - } - ]; - } -} - -const TEST_TENANTS = [ - { id: "root", name: "Root", parent: "", description: "Root tenant", tags: [] as string[] }, - { - id: "webiny", - name: "Webiny", - parent: "", - description: "Webiny tenant", - tags: [] as string[] - }, - { id: "dev", name: "Dev", parent: "", description: "Dev tenant", tags: [] as string[] }, - { id: "sales", name: "Sales", parent: "", description: "Sales tenant", tags: [] as string[] } -]; - -class TenancyAndSecurityInitializerImpl implements IRequestContextInitializer { - private initialized = false; - - constructor( - private container: Container, - private config: Config - ) {} - - async init(_ctx: Record): Promise { - await this._maybeInitialize(); - } - - private async _maybeInitialize(): Promise { - if (this.initialized) { - return; - } - this.initialized = true; - - const { permissions, identity } = this.config; - const resolvedIdentity: IdentityData = identity ?? defaultIdentity; - - // Provide role/team definitions for the authorization system. - this.container.registerInstance(RoleFactory, new FullAccessRoleFactory()); - this.container.registerInstance(TeamFactory, new FullAccessTeamFactory()); - - // Register an authenticator that returns the configured test identity. - this.container.registerFactory(Authenticator, () => ({ - authenticate: async (_token: string): Promise => ({ - ...resolvedIdentity, - teams: [FULL_ACCESS_TEAM_ID] - }) - })); - - // Register an authorizer that returns the configured test permissions. - this.container.registerFactory(Authorizer, () => ({ - authorize: async () => permissions || [{ name: "*" }] - })); - - // Seed the canonical test tenants in storage. - const createTenant = this.container.resolve(CreateTenantUseCase); - for (const input of TEST_TENANTS) { - await createTenant.execute(input); - } - - // Set the current tenant to root. - const tenantCtx = this.container.resolve(TenantContext); - tenantCtx.setTenant({ id: "root", name: "Root" } as unknown as Tenant); - - // Authenticate and seat the resolved identity on IdentityContext. - const authCtx = this.container.resolve(AuthenticationContext); - const authedIdentity = await authCtx.authenticate(""); - const identityCtx = this.container.resolve(IdentityContext); - identityCtx.setIdentity(authedIdentity); - } -} - -export const TenancyAndSecurityFeature = { - register(container: Container, config: Config): void { - const initializer = new TenancyAndSecurityInitializerImpl(container, config); - container.registerInstance(RequestContextInitializer, initializer); - } -}; diff --git a/packages/testing/src/context/bridgeLegacyPlugins.ts b/packages/testing/src/context/bridgeLegacyPlugins.ts deleted file mode 100644 index eeb800c1ff0..00000000000 --- a/packages/testing/src/context/bridgeLegacyPlugins.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { RegisterExtensionPlugin } from "@webiny/handler"; -import type { Container } from "@webiny/di"; - -export function processLegacyPlugins(container: Container, plugins: any[]): void { - const flat = [plugins].flat(Infinity as 1); - for (const plugin of flat) { - if (plugin instanceof RegisterExtensionPlugin) { - plugin.apply({ container } as any); - } - } -} diff --git a/packages/testing/src/context/helpers.ts b/packages/testing/src/context/helpers.ts deleted file mode 100644 index 54d1d5c401f..00000000000 --- a/packages/testing/src/context/helpers.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { - AuthenticatedIdentity, - type IdentityData -} from "@webiny/api-core/features/security/IdentityContext/index.js"; - -export interface PermissionsArg { - name: string; - rwd?: string; - pw?: string; - own?: boolean; -} - -export const identity: IdentityData = { - id: "id-12345678", - displayName: "John Doe", - type: "admin" -}; - -const getSecurityIdentity = () => { - return identity; -}; - -export const createPermissions = (permissions?: PermissionsArg[]): PermissionsArg[] => { - if (permissions) { - return permissions; - } - return [ - { - name: "*" - }, - { - name: "cms.settings" - }, - { - name: "cms.contentModel", - rwd: "rwd" - }, - { - name: "cms.contentModelGroup", - rwd: "rwd" - }, - { - name: "cms.contentEntry", - rwd: "rwd", - pw: "rcpu" - }, - { - name: "cms.endpoint.read" - }, - { - name: "cms.endpoint.manage" - }, - { - name: "cms.endpoint.preview" - } - ]; -}; - -export const createIdentity = (identity: IdentityData = getSecurityIdentity()) => { - return new AuthenticatedIdentity(identity); -}; diff --git a/packages/testing/src/context/plugins.ts b/packages/testing/src/context/plugins.ts deleted file mode 100644 index d846d1f8ee3..00000000000 --- a/packages/testing/src/context/plugins.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { Plugin, PluginCollection } from "@webiny/plugins/types.js"; -import { getStorageOps } from "@webiny/project-utils/testing/environment/index.js"; -import { BackgroundTasksFeature, TaskService } from "@webiny/background-tasks/api"; -import type { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types/index.js"; -import { createMockTaskService } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.js"; -import { createTestWcpLicense } from "@webiny/wcp/testing/createTestWcpLicense.js"; -import type { DecryptedWcpProjectLicense } from "@webiny/wcp/types.js"; -import type { IdentityData } from "@webiny/api-core/features/security/IdentityContext/index.js"; -import type { ApiCoreStorageOperations } from "@webiny/api-core/types/core.js"; -import type { PermissionsArg } from "./helpers.js"; -import { createPermissions } from "./helpers.js"; -import { ApiCoreFeature, registerApiCoreStorageOperations } from "@webiny/api-core"; -import { HeadlessCmsFeature } from "@webiny/api-headless-cms"; -import { loadWcpLicense } from "@webiny/api-core/features/wcp/loadWcpLicense.js"; -import { processLegacyPlugins } from "./bridgeLegacyPlugins.js"; -import { TenancyAndSecurityFeature } from "./TenancyAndSecurityFeature.js"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import type { Container } from "@webiny/di"; - -export interface CreateHandlerCoreParams { - setupTenancyAndSecurityGraphQL?: boolean; - permissions?: PermissionsArg[]; - identity?: IdentityData; - topPlugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection; - plugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection; - bottomPlugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection; - path?: `manage/${string}-${string}}` | `read/${string}-${string}}` | string; - testProjectLicense?: DecryptedWcpProjectLicense; -} - -process.env.S3_BUCKET = "my-mock-s3-bucket"; - -export const createHandlerCore = (params: CreateHandlerCoreParams = {}) => { - const tenant = { - id: "root", - name: "Root", - parent: null - }; - const { permissions, identity, plugins = [], topPlugins = [], bottomPlugins = [] } = params; - - const apiCoreStorage = getStorageOps("apiCore"); - const cmsStorage = getStorageOps("cms"); - - const testProjectLicense = params.testProjectLicense || createTestWcpLicense(); - - const setup = async (container: Container, extraPlugins: any[] = []): Promise => { - const wcpLicense = await loadWcpLicense(testProjectLicense); - registerApiCoreStorageOperations(container, apiCoreStorage.storageOperations); - ApiCoreFeature.register(container, { wcpLicense }); - - // Registration order determines contextual-schema execution order: - // 1. ApiCore.build() — registers WcpFeature - // 2. TenancyAndSecurity.build() — seeds tenants, authenticates identity - // 3. cmsStorage.plugins enhancer — ctx.db (runs in the enhance phase, before all build() calls) - // 4. HeadlessCms.build() — sets up ctx.cms - TenancyAndSecurityFeature.register(container, { - permissions: createPermissions(permissions), - identity - }); - - const extraCmsPlugins: any[] = []; - - // RegisterExtensionPlugin instances are pre-registered before HeadlessCms build() runs, - // so private models reach the DI container before AcoContextEnhancer populates ModelCache. - // Static plugins (CmsModelPlugin, GraphQLSchemaPlugin, etc.) are collected for ctx.plugins. - // ContextPlugin instances (e.g. dbPlugins() for ctx.db) run in the enhance phase. - processLegacyPlugins(container, cmsStorage.plugins); - registerLegacyPluginsViaGqlContextualSchema(container, cmsStorage.plugins); - for (const p of [cmsStorage.plugins].flat(Infinity as 1)) { - if (p && typeof (p as any).apply !== "function" && typeof p !== "function") { - extraCmsPlugins.push(p); - } - } - - if (extraPlugins.length > 0) { - processLegacyPlugins(container, extraPlugins); - for (const p of [extraPlugins].flat(Infinity as 1)) { - if (p && typeof (p as any).apply !== "function" && typeof p !== "function") { - extraCmsPlugins.push(p); - } - } - } - - HeadlessCmsFeature.register(container, { type: "manage", extraPlugins: extraCmsPlugins }); - - // Background tasks are DI-native now — the feature registers TasksCrud, the GraphQL - // contextual schema, decorators, etc. The mock TaskService override (below) must come - // AFTER so task triggering in tests goes through the mock transport, not the real facade. - BackgroundTasksFeature.register(container); - container.registerInstance(TaskService, createMockTaskService()); - }; - - const legacyPlugins = [topPlugins, plugins, bottomPlugins]; - - return { - tenant, - setup, - legacyPlugins - }; -}; diff --git a/packages/testing/src/context/tenancySecurity.ts b/packages/testing/src/context/tenancySecurity.ts deleted file mode 100644 index 123b53eee5b..00000000000 --- a/packages/testing/src/context/tenancySecurity.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Shared test tenancy/security constants now live in the base @webiny/api-core-testing package; re-exported - * here for existing consumers. Runtime setup is DI-native via `TenancyAndSecurityFeature`. - */ -export { - defaultIdentity, - FULL_ACCESS_ROLE_ID, - FULL_ACCESS_TEAM_ID, - UNKNOWN_TEAM_ID -} from "@webiny/api-core-testing"; diff --git a/packages/testing/src/context/useContextHandler.ts b/packages/testing/src/context/useContextHandler.ts deleted file mode 100644 index f8aee7000a4..00000000000 --- a/packages/testing/src/context/useContextHandler.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { - registerLegacyPluginsViaGqlContextualSchema, - GraphQLContextualSchema, - GraphQLEngineFeature -} from "@webiny/handler-graphql"; -import { getTestOpenSearchClient } from "@webiny/api-opensearch/testing/index.js"; -import type { CreateHandlerCoreParams } from "./plugins.js"; -import { createHandlerCore } from "./plugins.js"; -import { defaultIdentity } from "./tenancySecurity.js"; -import type { CmsContext } from "@webiny/api-headless-cms/types/index.js"; -import { createTestHttpHandler } from "@webiny/event-handler-core/features/testing"; -import { buildSchema } from "graphql"; -import type { GraphQLSchema } from "graphql"; -import type { Container } from "@webiny/di"; - -export interface HandlerEvent { - path: string; - headers: { - ["x-tenant"]: string; - [key: string]: string; - }; -} - -export interface UseContextHandlerParams extends CreateHandlerCoreParams { - debug?: boolean; - /** Called after core setup to register DI-native features (e.g. WorkflowsFeature). */ - features?: (container: Container) => void; -} - -const STUB_SCHEMA: GraphQLSchema = buildSchema("type Query { _empty: String }"); - -export const useContextHandler = ( - params: UseContextHandlerParams = {} -) => { - const core = createHandlerCore(params); - - const opensearchClient = getTestOpenSearchClient(); - - return { - identity: params.identity || defaultIdentity, - tenant: core.tenant, - opensearch: opensearchClient, - context: async (_input?: HandlerEvent): Promise => { - const capturedCtx: { value?: Record } = {}; - - const handler = createTestHttpHandler({ - root: () => {}, - request: async container => { - await core.setup(container, core.legacyPlugins); - registerLegacyPluginsViaGqlContextualSchema(container, core.legacyPlugins); - params.features?.(container); - // Capture after all features so ctx is fully initialized (ctx.cms etc.) - container.registerInstance(GraphQLContextualSchema, { - async build(ctx: Record): Promise { - capturedCtx.value = ctx; - return STUB_SCHEMA; - } - }); - GraphQLEngineFeature.register(container); - } - }); - - await handler({ - method: "POST", - path: "/graphql", - headers: { - "x-tenant": "root", - "content-type": "application/json" - }, - body: { query: "{ __typename }" } - }); - - return capturedCtx.value as unknown as C; - } - }; -}; diff --git a/packages/testing/src/context/useGraphQLHandler.ts b/packages/testing/src/context/useGraphQLHandler.ts deleted file mode 100644 index 553420af9e9..00000000000 --- a/packages/testing/src/context/useGraphQLHandler.ts +++ /dev/null @@ -1,106 +0,0 @@ -import type { CreateHandlerCoreParams } from "./plugins.js"; -import { createHandlerCore } from "./plugins.js"; -import { registerLegacyPluginsViaGqlContextualSchema } from "@webiny/handler-graphql"; -import { GraphQLEngineFeature } from "@webiny/handler-graphql"; -import { defaultIdentity } from "./tenancySecurity.js"; -import { createTestOpenSearchClient } from "@webiny/api-opensearch/testing"; -import { getIntrospectionQuery } from "graphql"; -import type { GenericRecord } from "@webiny/api/types.js"; -import { createTestHttpHandler } from "@webiny/event-handler-core/features/testing"; -import type { Container } from "@webiny/di"; - -export interface InvokeParams { - httpMethod?: "POST" | "GET" | "OPTIONS"; - body?: { - query: string; - variables?: Record; - }; - headers?: Record; -} - -export interface UseGraphQLHandlerParams extends CreateHandlerCoreParams { - debug?: boolean; - /** Called after core setup to register DI-native features (e.g. WorkflowsFeature). */ - features?: (container: Container) => void; -} -export const useGraphQLHandler = (params: UseGraphQLHandlerParams = {}) => { - const { path } = params; - const core = createHandlerCore(params); - - const handler = createTestHttpHandler({ - root: () => {}, - request: async container => { - await core.setup(container, core.legacyPlugins); - registerLegacyPluginsViaGqlContextualSchema(container, core.legacyPlugins); - params.features?.(container); - GraphQLEngineFeature.register(container); - } - }); - - const invoke = async ({ - httpMethod = "POST", - body, - headers = {} - }: InvokeParams = {}): Promise<[T, any]> => { - const response = await handler({ - path: path ? `/cms/${path}` : "/graphql", - method: httpMethod, - headers: { - ["x-tenant"]: "root", - ["Content-Type"]: "application/json", - ...headers - }, - body - }); - return [response.body as T, response]; - }; - - const elasticsearchClient = createTestOpenSearchClient(); - - const createQuery = < - T extends GenericRecord = GenericRecord, - R extends GenericRecord = GenericRecord - >( - query: string - ) => { - return (variables: T, headers: GenericRecord = {}) => { - return invoke({ - body: { - query, - variables: variables || undefined - }, - headers - }); - }; - }; - - const createMutation = < - T extends GenericRecord = GenericRecord, - R extends GenericRecord = GenericRecord - >( - mutation: string - ) => { - return (variables: T, headers: GenericRecord = {}) => { - return invoke({ - body: { - query: mutation, - variables: variables || undefined - }, - headers - }); - }; - }; - - return { - invoke, - identity: params.identity || defaultIdentity, - tenant: core.tenant, - handler, - elasticsearch: elasticsearchClient, - async introspect() { - return invoke({ body: { query: getIntrospectionQuery() } }); - }, - createQuery, - createMutation - }; -}; diff --git a/packages/testing/src/index.ts b/packages/testing/src/index.ts deleted file mode 100644 index 167c3c4f9fd..00000000000 --- a/packages/testing/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { useContextHandler } from "./context/useContextHandler.js"; -export type { HandlerEvent, UseContextHandlerParams } from "./context/useContextHandler.js"; -export { useGraphQLHandler } from "./context/useGraphQLHandler.js"; -export type { InvokeParams, UseGraphQLHandlerParams } from "./context/useGraphQLHandler.js"; -export { - FULL_ACCESS_ROLE_ID, - FULL_ACCESS_TEAM_ID, - UNKNOWN_TEAM_ID -} from "./context/tenancySecurity.js"; diff --git a/packages/testing/tsconfig.build.json b/packages/testing/tsconfig.build.json deleted file mode 100644 index 92284b3744e..00000000000 --- a/packages/testing/tsconfig.build.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "include": ["src"], - "references": [ - { "path": "../api/tsconfig.build.json" }, - { "path": "../api-aco/tsconfig.build.json" }, - { "path": "../api-core/tsconfig.build.json" }, - { "path": "../api-core-testing/tsconfig.build.json" }, - { "path": "../api-file-manager/tsconfig.build.json" }, - { "path": "../api-headless-cms/tsconfig.build.json" }, - { "path": "../api-headless-cms-aco/tsconfig.build.json" }, - { "path": "../api-mailer/tsconfig.build.json" }, - { "path": "../api-opensearch/tsconfig.build.json" }, - { "path": "../api-record-locking/tsconfig.build.json" }, - { "path": "../api-websockets/tsconfig.build.json" }, - { "path": "../aws-sdk/tsconfig.build.json" }, - { "path": "../background-tasks/tsconfig.build.json" }, - { "path": "../error/tsconfig.build.json" }, - { "path": "../event-handler-core/tsconfig.build.json" }, - { "path": "../handler/tsconfig.build.json" }, - { "path": "../handler-graphql/tsconfig.build.json" }, - { "path": "../plugins/tsconfig.build.json" }, - { "path": "../wcp/tsconfig.build.json" } - ], - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist", - "declarationDir": "./dist", - "paths": { - "~/*": ["./src/*"], - "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], - "@webiny/api-aco/*": ["../api-aco/src/*"], - "@webiny/api-aco": ["../api-aco/src"], - "@webiny/api-core/*": ["../api-core/src/*"], - "@webiny/api-core": ["../api-core/src"], - "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], - "@webiny/api-core-testing": ["../api-core-testing/src"], - "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], - "@webiny/api-file-manager": ["../api-file-manager/src"], - "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], - "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-headless-cms-aco/*": ["../api-headless-cms-aco/src/*"], - "@webiny/api-headless-cms-aco": ["../api-headless-cms-aco/src"], - "@webiny/api-mailer/*": ["../api-mailer/src/*"], - "@webiny/api-mailer": ["../api-mailer/src"], - "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], - "@webiny/api-opensearch": ["../api-opensearch/src"], - "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], - "@webiny/api-record-locking": ["../api-record-locking/src"], - "@webiny/api-websockets/*": ["../api-websockets/src/*"], - "@webiny/api-websockets": ["../api-websockets/src"], - "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], - "@webiny/aws-sdk": ["../aws-sdk/src"], - "@webiny/background-tasks/*": ["../background-tasks/src/*"], - "@webiny/background-tasks": ["../background-tasks/src"], - "@webiny/error/*": ["../error/src/*"], - "@webiny/error": ["../error/src"], - "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], - "@webiny/event-handler-core": ["../event-handler-core/src"], - "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/wcp/*": ["../wcp/src/*"], - "@webiny/wcp": ["../wcp/src"] - } - } -} diff --git a/packages/testing/tsconfig.json b/packages/testing/tsconfig.json deleted file mode 100644 index 4e3b1329b15..00000000000 --- a/packages/testing/tsconfig.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src", "__tests__"], - "references": [ - { "path": "../api" }, - { "path": "../api-aco" }, - { "path": "../api-core" }, - { "path": "../api-core-testing" }, - { "path": "../api-file-manager" }, - { "path": "../api-headless-cms" }, - { "path": "../api-headless-cms-aco" }, - { "path": "../api-mailer" }, - { "path": "../api-opensearch" }, - { "path": "../api-record-locking" }, - { "path": "../api-websockets" }, - { "path": "../aws-sdk" }, - { "path": "../background-tasks" }, - { "path": "../error" }, - { "path": "../event-handler-core" }, - { "path": "../handler" }, - { "path": "../handler-graphql" }, - { "path": "../plugins" }, - { "path": "../wcp" } - ], - "compilerOptions": { - "rootDirs": ["./src", "./__tests__"], - "outDir": "./dist", - "declarationDir": "./dist", - "paths": { - "~/*": ["./src/*"], - "~tests/*": ["./__tests__/*"], - "@webiny/api/*": ["../api/src/*"], - "@webiny/api": ["../api/src"], - "@webiny/api-aco/*": ["../api-aco/src/*"], - "@webiny/api-aco": ["../api-aco/src"], - "@webiny/api-core/*": ["../api-core/src/*"], - "@webiny/api-core": ["../api-core/src"], - "@webiny/api-core-testing/*": ["../api-core-testing/src/*"], - "@webiny/api-core-testing": ["../api-core-testing/src"], - "@webiny/api-file-manager/*": ["../api-file-manager/src/*"], - "@webiny/api-file-manager": ["../api-file-manager/src"], - "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"], - "@webiny/api-headless-cms": ["../api-headless-cms/src"], - "@webiny/api-headless-cms-aco/*": ["../api-headless-cms-aco/src/*"], - "@webiny/api-headless-cms-aco": ["../api-headless-cms-aco/src"], - "@webiny/api-mailer/*": ["../api-mailer/src/*"], - "@webiny/api-mailer": ["../api-mailer/src"], - "@webiny/api-opensearch/*": ["../api-opensearch/src/*"], - "@webiny/api-opensearch": ["../api-opensearch/src"], - "@webiny/api-record-locking/*": ["../api-record-locking/src/*"], - "@webiny/api-record-locking": ["../api-record-locking/src"], - "@webiny/api-websockets/*": ["../api-websockets/src/*"], - "@webiny/api-websockets": ["../api-websockets/src"], - "@webiny/aws-sdk/*": ["../aws-sdk/src/*"], - "@webiny/aws-sdk": ["../aws-sdk/src"], - "@webiny/background-tasks/*": ["../background-tasks/src/*"], - "@webiny/background-tasks": ["../background-tasks/src"], - "@webiny/error/*": ["../error/src/*"], - "@webiny/error": ["../error/src"], - "@webiny/event-handler-core/*": ["../event-handler-core/src/*"], - "@webiny/event-handler-core": ["../event-handler-core/src"], - "@webiny/handler/*": ["../handler/src/*"], - "@webiny/handler": ["../handler/src"], - "@webiny/handler-graphql/*": ["../handler-graphql/src/*"], - "@webiny/handler-graphql": ["../handler-graphql/src"], - "@webiny/plugins/*": ["../plugins/src/*"], - "@webiny/plugins": ["../plugins/src"], - "@webiny/wcp/*": ["../wcp/src/*"], - "@webiny/wcp": ["../wcp/src"] - } - } -} diff --git a/packages/testing/vitest.setup.ts b/packages/testing/vitest.setup.ts deleted file mode 100644 index ff7f36e0e79..00000000000 --- a/packages/testing/vitest.setup.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createTestConfig } from "../../testing"; - -export default async () => { - const { getPresets } = await import("@webiny/project-utils/testing/presets/index.js"); - const presets = await getPresets( - ["@webiny/api-headless-cms", "storage-operations"], - ["@webiny/api-core", "storage-operations"] - ); - - return createTestConfig({ - path: import.meta.dirname, - presets - }); -}; diff --git a/packages/testing/webiny.config.js b/packages/testing/webiny.config.js deleted file mode 100644 index 4f5e3db04b9..00000000000 --- a/packages/testing/webiny.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import { createWatchPackage, createBuildPackage } from "@webiny/build-tools"; - -export default { - commands: { - build: createBuildPackage({ cwd: import.meta.dirname }), - watch: createWatchPackage({ cwd: import.meta.dirname }) - } -}; diff --git a/scripts/checkTsConfigs.js b/scripts/checkTsConfigs.js index 7210e7845d5..fd143c04493 100644 --- a/scripts/checkTsConfigs.js +++ b/scripts/checkTsConfigs.js @@ -26,13 +26,13 @@ const TSCONFIG = { BUILD: "tsconfig.build.json" }; -// `tsconfig.build.json` compiles only `src`, never `__tests__`. Test-only packages (e.g. -// `@webiny/testing`) are never imported from `src`, and because they depend back on the very -// packages that consume them, including them as build references creates a circular project -// reference that breaks the `composite` build with TS6305. They are therefore intentionally -// excluded from the build config (see `scripts/generateTsConfigsInPackages.js`), so the check -// must not require them in `tsconfig.build.json` "references". -const BUILD_EXCLUDED_PACKAGES = ["@webiny/testing"]; +// `tsconfig.build.json` compiles only `src`, never `__tests__`. Test-only packages that are never +// imported from `src` — and that depend back on the very packages consuming them — would create a +// circular project reference that breaks the `composite` build with TS6305, so they are excluded +// from the build config (see `scripts/generateTsConfigsInPackages.js`) and the check must not +// require them in `tsconfig.build.json` "references". (Currently none; the former `@webiny/testing` +// harness has been retired in favor of `@webiny/api-core-testing` / `@webiny/api-headless-cms-testing`.) +const BUILD_EXCLUDED_PACKAGES = []; /** * This is a small tool that checks if all TS configs in all packages in order. In other words, diff --git a/scripts/generateTsConfigsInPackages.js b/scripts/generateTsConfigsInPackages.js index 43f4e2558f2..83f889e5704 100644 --- a/scripts/generateTsConfigsInPackages.js +++ b/scripts/generateTsConfigsInPackages.js @@ -70,11 +70,13 @@ function readExistingExclude(target) { .filter(name => workspaces.find(pkg => pkg.packageJson.name === name).isTs) .map(name => workspaces.find(pkg => pkg.packageJson.name === name)); - // `tsconfig.build.json` compiles only `src`, never `__tests__`. Test-only packages (e.g. - // `@webiny/testing`) are never imported from `src`, and because they depend back on the very - // packages that consume them, including them as build references creates a circular project - // reference that breaks the `composite` build with TS6305. Exclude them from the build config. - const buildExcludedPackages = ["@webiny/testing"]; + // `tsconfig.build.json` compiles only `src`, never `__tests__`. Test-only packages that are + // never imported from `src` — and that depend back on the very packages consuming them — + // would create a circular project reference that breaks the `composite` build with TS6305, so + // they are excluded from the build config. (Currently none; the former `@webiny/testing` + // harness has been retired in favor of the `@webiny/api-core-testing` / + // `@webiny/api-headless-cms-testing` packages.) + const buildExcludedPackages = []; const buildDependencies = dependencies.filter( dep => !buildExcludedPackages.includes(dep.name) ); diff --git a/yarn.lock b/yarn.lock index 430d9bc82b5..e57c7119bf4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10526,8 +10526,10 @@ __metadata: "@webiny/api-core": "npm:0.0.0" "@webiny/api-file-manager": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-mailer": "npm:0.0.0" "@webiny/api-website-builder": "npm:0.0.0" + "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/common-audit-logs": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" @@ -10539,7 +10541,6 @@ __metadata: "@webiny/handler-graphql": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" "@webiny/wcp": "npm:0.0.0" graphql: "npm:^16.14.2" @@ -10683,6 +10684,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" "@webiny/api-dynamodb-to-elasticsearch": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" "@webiny/aws-sdk": "npm:0.0.0" "@webiny/background-tasks": "npm:0.0.0" @@ -10694,7 +10696,6 @@ __metadata: "@webiny/handler": "npm:0.0.0" "@webiny/handler-aws": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" rimraf: "npm:^6.1.3" type-fest: "npm:^5.8.0" @@ -11101,7 +11102,6 @@ __metadata: "@webiny/feature": "npm:0.0.0" "@webiny/handler-graphql": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" typescript: "npm:^7.0.2" vitest: "npm:^4.1.10" @@ -11121,7 +11121,6 @@ __metadata: "@webiny/build-tools": "npm:0.0.0" "@webiny/feature": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" typescript: "npm:^7.0.2" vitest: "npm:^4.1.10" languageName: unknown @@ -11198,7 +11197,6 @@ __metadata: "@webiny/handler-graphql": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" graphql: "npm:^16.14.2" typescript: "npm:^7.0.2" @@ -11233,6 +11231,7 @@ __metadata: "@webiny/api": "npm:0.0.0" "@webiny/api-aco": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-opensearch": "npm:0.0.0" @@ -11244,7 +11243,6 @@ __metadata: "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/shared-aco": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/wcp": "npm:0.0.0" typescript: "npm:^7.0.2" vitest: "npm:^4.1.10" @@ -11486,7 +11484,6 @@ __metadata: "@webiny/di": "npm:^1.0.2" "@webiny/feature": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" typescript: "npm:^7.0.2" vitest: "npm:^4.1.10" languageName: unknown @@ -11510,7 +11507,6 @@ __metadata: "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/shared-aco": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" typescript: "npm:^7.0.2" vitest: "npm:^4.1.10" languageName: unknown @@ -11538,7 +11534,6 @@ __metadata: "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" "@webiny/tenant-manager": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" "@webiny/wcp": "npm:0.0.0" graphql: "npm:^16.14.2" @@ -11667,8 +11662,11 @@ __metadata: dependencies: "@webiny/api": "npm:0.0.0" "@webiny/api-core": "npm:0.0.0" + "@webiny/api-core-testing": "npm:0.0.0" "@webiny/api-headless-cms": "npm:0.0.0" + "@webiny/api-headless-cms-testing": "npm:0.0.0" "@webiny/api-mailer": "npm:0.0.0" + "@webiny/background-tasks": "npm:0.0.0" "@webiny/build-tools": "npm:0.0.0" "@webiny/di": "npm:^1.0.2" "@webiny/event-handler-core": "npm:0.0.0" @@ -11676,7 +11674,6 @@ __metadata: "@webiny/handler-graphql": "npm:0.0.0" "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - "@webiny/testing": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" graphql: "npm:^16.14.2" type-fest: "npm:^5.8.0" @@ -13566,38 +13563,6 @@ __metadata: languageName: unknown linkType: soft -"@webiny/testing@npm:0.0.0, @webiny/testing@workspace:packages/testing": - version: 0.0.0-use.local - resolution: "@webiny/testing@workspace:packages/testing" - dependencies: - "@webiny/api": "npm:0.0.0" - "@webiny/api-aco": "npm:0.0.0" - "@webiny/api-core": "npm:0.0.0" - "@webiny/api-core-testing": "npm:0.0.0" - "@webiny/api-file-manager": "npm:0.0.0" - "@webiny/api-headless-cms": "npm:0.0.0" - "@webiny/api-headless-cms-aco": "npm:0.0.0" - "@webiny/api-mailer": "npm:0.0.0" - "@webiny/api-opensearch": "npm:0.0.0" - "@webiny/api-record-locking": "npm:0.0.0" - "@webiny/api-websockets": "npm:0.0.0" - "@webiny/aws-sdk": "npm:0.0.0" - "@webiny/background-tasks": "npm:0.0.0" - "@webiny/build-tools": "npm:0.0.0" - "@webiny/di": "npm:^1.0.2" - "@webiny/error": "npm:0.0.0" - "@webiny/event-handler-core": "npm:0.0.0" - "@webiny/handler": "npm:0.0.0" - "@webiny/handler-graphql": "npm:0.0.0" - "@webiny/plugins": "npm:0.0.0" - "@webiny/project-utils": "npm:0.0.0" - "@webiny/wcp": "npm:0.0.0" - graphql: "npm:^16.14.2" - rimraf: "npm:^6.1.3" - typescript: "npm:^7.0.2" - languageName: unknown - linkType: soft - "@webiny/utils@npm:0.0.0, @webiny/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@webiny/utils@workspace:packages/utils" From 0b30115921ec3e6d72162ab04f7776ce289cef83 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 15 Jul 2026 06:49:20 +0200 Subject: [PATCH 29/31] refactor(headless-cms): remove ContextPlugin from tests (#40) Converts api-headless-cms test ContextPlugins to DI: - pure container.register/registerFactory ContextPlugins -> plain container => {} function plugins (the test helpers call function plugins directly, pre-auth); lifecycle-hook mocks, model/group providers. - benchmark.test + httpOptions -> a RequestContextInitializer (post-auth timing: benchmark resolves BenchmarkAbstraction which HeadlessCmsFeature registers after the plugins loop; httpOptions must not run on OPTIONS). - Deleted two dead, unused benchmark test helpers. api-headless-cms tests are now ContextPlugin-free (only comments remain). Part of #40 (toward deleting the legacy bridge, #39). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../__tests__/contentAPI/benchmark.test.ts | 26 ++++++--- .../contentModelGroup.extension.test.ts | 7 +-- .../contentAPI/dynamicZoneField.test.ts | 16 +++--- .../__tests__/contentAPI/httpOptions.test.ts | 16 ++++-- .../contentAPI/mocks/lifecycleHooks.ts | 55 +++++++++---------- .../onBeforeEntryPublish.test.ts | 8 +-- .../enableBenchmarkOnEnvironmentVariable.ts | 9 --- .../testHelpers/outputBenchmarkLogs.ts | 33 ----------- 8 files changed, 69 insertions(+), 101 deletions(-) delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/enableBenchmarkOnEnvironmentVariable.ts delete mode 100644 packages/api-headless-cms/__tests__/testHelpers/outputBenchmarkLogs.ts diff --git a/packages/api-headless-cms/__tests__/contentAPI/benchmark.test.ts b/packages/api-headless-cms/__tests__/contentAPI/benchmark.test.ts index e9dc674726a..c73fde453be 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/benchmark.test.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/benchmark.test.ts @@ -1,6 +1,8 @@ import { describe, it, expect, beforeEach, vi } from "vitest"; import { useGraphQLHandler } from "~tests/testHelpers/useGraphQLHandler"; -import { BenchmarkAbstraction, ContextPlugin } from "@webiny/api"; +import { BenchmarkAbstraction } from "@webiny/api"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import type { Container } from "@webiny/di"; import { createIcon } from "~tests/__helpers/icon.js"; describe("benchmark points", () => { @@ -9,16 +11,22 @@ describe("benchmark points", () => { const { createContentModelGroupMutation } = useGraphQLHandler({ path: "manage", topPlugins: [ - new ContextPlugin(async context => { - // Benchmark moved from `context.benchmark` to the DI container during the - // DI migration; resolve the same instance createCmsRoute flushes per request. - const benchmark = context.container.resolve(BenchmarkAbstraction); - benchmark.enable(); + (container: Container) => { + // Benchmark moved from `context.benchmark` to the DI container during the DI + // migration; resolve the same instance createCmsRoute flushes per request. It's + // registered by HeadlessCmsFeature (after the plugins loop), so enable it from a + // post-auth initializer where the abstraction is resolvable. + container.registerInstance(RequestContextInitializer, { + async init(ctx: Record) { + const benchmark = ctx.container.resolve(BenchmarkAbstraction); + benchmark.enable(); - benchmark.onOutput(async ({ benchmark }) => { - elapsed = benchmark.elapsed; + benchmark.onOutput(async ({ benchmark }: any) => { + elapsed = benchmark.elapsed; + }); + } }); - }) + } ] }); beforeEach(async () => { diff --git a/packages/api-headless-cms/__tests__/contentAPI/contentModelGroup.extension.test.ts b/packages/api-headless-cms/__tests__/contentAPI/contentModelGroup.extension.test.ts index 10525bf8715..92512cc2e41 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/contentModelGroup.extension.test.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/contentModelGroup.extension.test.ts @@ -1,5 +1,4 @@ import { describe, expect, test } from "vitest"; -import { createContextPlugin } from "@webiny/api"; import { useGraphQLHandler } from "../testHelpers/useGraphQLHandler"; import { ModelGroupFactory } from "~/features/contentModelGroup/shared/abstractions.js"; @@ -28,9 +27,9 @@ describe("ModelGroupFactory test", () => { const { listContentModelGroupsQuery } = useGraphQLHandler({ path: "manage", plugins: [ - createContextPlugin(context => { - context.container.register(MyGroupsFactory); - }) + container => { + container.register(MyGroupsFactory); + } ] }); diff --git a/packages/api-headless-cms/__tests__/contentAPI/dynamicZoneField.test.ts b/packages/api-headless-cms/__tests__/contentAPI/dynamicZoneField.test.ts index b689dd551bc..d0252cb6740 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/dynamicZoneField.test.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/dynamicZoneField.test.ts @@ -5,8 +5,8 @@ import { usePageManageHandler } from "../testHelpers/usePageManageHandler"; import { usePageReadHandler } from "../testHelpers/usePageReadHandler"; import { useAuthorManageHandler } from "~tests/testHelpers/useAuthorManageHandler"; import type { TestCmsModel } from "~tests/types"; -import { ContextPlugin } from "@webiny/api"; -import type { CmsContext, CmsEntry } from "~/types"; +import type { Container } from "@webiny/di"; +import type { CmsEntry } from "~/types"; import { EntryAfterCreateEventHandler, EntryBeforeCreateEventHandler @@ -326,8 +326,8 @@ describe("dynamicZone field", () => { afterUpdate: undefined }; - const lifecycleEvents = new ContextPlugin(async (context: CmsContext) => { - context.container.registerFactory(EntryBeforeCreateEventHandler, () => ({ + const lifecycleEvents = async (container: Container) => { + container.registerFactory(EntryBeforeCreateEventHandler, () => ({ async handle(event) { eventEntryContent.beforeCreate = structuredClone( event.payload.entry @@ -335,7 +335,7 @@ describe("dynamicZone field", () => { } })); - context.container.registerFactory(EntryAfterCreateEventHandler, () => ({ + container.registerFactory(EntryAfterCreateEventHandler, () => ({ async handle(event) { eventEntryContent.afterCreate = structuredClone( event.payload.entry @@ -343,7 +343,7 @@ describe("dynamicZone field", () => { } })); - context.container.registerFactory(EntryBeforeUpdateEventHandler, () => ({ + container.registerFactory(EntryBeforeUpdateEventHandler, () => ({ async handle(event) { eventEntryContent.beforeUpdate = structuredClone( event.payload.entry @@ -351,14 +351,14 @@ describe("dynamicZone field", () => { } })); - context.container.registerFactory(EntryAfterUpdateEventHandler, () => ({ + container.registerFactory(EntryAfterUpdateEventHandler, () => ({ async handle(event) { eventEntryContent.afterUpdate = structuredClone( event.payload.entry ) as CmsEntry; } })); - }); + }; const manage = usePageManageHandler({ ...manageOpts, bottomPlugins: [lifecycleEvents] }); diff --git a/packages/api-headless-cms/__tests__/contentAPI/httpOptions.test.ts b/packages/api-headless-cms/__tests__/contentAPI/httpOptions.test.ts index d7830ef7724..c97e4f746e2 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/httpOptions.test.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/httpOptions.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { ContextPlugin } from "@webiny/api"; -import type { CmsContext } from "~/types/index.js"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import type { Container } from "@webiny/di"; import { useCategoryManageHandler } from "../testHelpers/useCategoryManageHandler.js"; /** @@ -15,9 +15,15 @@ describe("HTTP Options request", () => { const manageOpts = { path: "manage", plugins: [ - new ContextPlugin(async () => { - throw new Error("This should not register."); - }) + // A post-auth initializer that must NOT run for an OPTIONS preflight (which short- + // circuits before the request context is initialized). If it runs, the test fails. + (container: Container) => { + container.registerInstance(RequestContextInitializer, { + async init() { + throw new Error("This should not register."); + } + }); + } ] }; diff --git a/packages/api-headless-cms/__tests__/contentAPI/mocks/lifecycleHooks.ts b/packages/api-headless-cms/__tests__/contentAPI/mocks/lifecycleHooks.ts index 819e53e0b28..693e9d2cc3b 100644 --- a/packages/api-headless-cms/__tests__/contentAPI/mocks/lifecycleHooks.ts +++ b/packages/api-headless-cms/__tests__/contentAPI/mocks/lifecycleHooks.ts @@ -1,5 +1,4 @@ -import type { CmsContext } from "~/types"; -import { ContextPlugin } from "@webiny/api"; +import type { Container } from "@webiny/di"; import { ModelBeforeCreateEventHandler, ModelAfterCreateEventHandler @@ -71,141 +70,141 @@ class PubSubTracker { export const pubSubTracker = new PubSubTracker(); export const assignModelEvents = () => { - return new ContextPlugin(async context => { - context.container.registerFactory(ModelBeforeCreateEventHandler, () => ({ + return async (container: Container) => { + container.registerFactory(ModelBeforeCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:beforeCreate"); } })); - context.container.registerFactory(ModelAfterCreateEventHandler, () => ({ + container.registerFactory(ModelAfterCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:afterCreate"); } })); - context.container.registerFactory(ModelBeforeCreateFromEventHandler, () => ({ + container.registerFactory(ModelBeforeCreateFromEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:beforeCreateFrom"); } })); - context.container.registerFactory(ModelAfterCreateFromEventHandler, () => ({ + container.registerFactory(ModelAfterCreateFromEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:afterCreateFrom"); } })); - context.container.registerFactory(ModelBeforeUpdateEventHandler, () => ({ + container.registerFactory(ModelBeforeUpdateEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:beforeUpdate"); } })); - context.container.registerFactory(ModelAfterUpdateEventHandler, () => ({ + container.registerFactory(ModelAfterUpdateEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:afterUpdate"); } })); - context.container.registerFactory(ModelBeforeDeleteEventHandler, () => ({ + container.registerFactory(ModelBeforeDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:beforeDelete"); } })); - context.container.registerFactory(ModelAfterDeleteEventHandler, () => ({ + container.registerFactory(ModelAfterDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentModel:afterDelete"); } })); - }); + }; }; export const assignEntryEvents = () => { - return new ContextPlugin(async (context: CmsContext) => { - context.container.registerFactory(EntryBeforeCreateEventHandler, () => ({ + return async (container: Container) => { + container.registerFactory(EntryBeforeCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeCreate"); } })); - context.container.registerFactory(EntryAfterCreateEventHandler, () => ({ + container.registerFactory(EntryAfterCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterCreate"); } })); - context.container.registerFactory(EntryRevisionBeforeCreateEventHandler, () => ({ + container.registerFactory(EntryRevisionBeforeCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeCreateRevisionFrom"); } })); - context.container.registerFactory(EntryRevisionAfterCreateEventHandler, () => ({ + container.registerFactory(EntryRevisionAfterCreateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterCreateRevisionFrom"); } })); - context.container.registerFactory(EntryBeforeUpdateEventHandler, () => ({ + container.registerFactory(EntryBeforeUpdateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeUpdate"); } })); - context.container.registerFactory(EntryAfterUpdateEventHandler, () => ({ + container.registerFactory(EntryAfterUpdateEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterUpdate"); } })); - context.container.registerFactory(EntryBeforeDeleteEventHandler, () => ({ + container.registerFactory(EntryBeforeDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeDelete"); } })); - context.container.registerFactory(EntryAfterDeleteEventHandler, () => ({ + container.registerFactory(EntryAfterDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterDelete"); } })); - context.container.registerFactory(EntryRevisionBeforeDeleteEventHandler, () => ({ + container.registerFactory(EntryRevisionBeforeDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeDeleteRevision"); } })); - context.container.registerFactory(EntryRevisionAfterDeleteEventHandler, () => ({ + container.registerFactory(EntryRevisionAfterDeleteEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterDeleteRevision"); } })); - context.container.registerFactory(EntryBeforePublishEventHandler, () => ({ + container.registerFactory(EntryBeforePublishEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforePublish"); } })); - context.container.registerFactory(EntryAfterPublishEventHandler, () => ({ + container.registerFactory(EntryAfterPublishEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterPublish"); } })); - context.container.registerFactory(EntryBeforeUnpublishEventHandler, () => ({ + container.registerFactory(EntryBeforeUnpublishEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:beforeUnpublish"); } })); - context.container.registerFactory(EntryAfterUnpublishEventHandler, () => ({ + container.registerFactory(EntryAfterUnpublishEventHandler, () => ({ async handle() { pubSubTracker.track("contentEntry:afterUnpublish"); } })); - }); + }; }; diff --git a/packages/api-headless-cms/__tests__/lifecycleHooks/onBeforeEntryPublish.test.ts b/packages/api-headless-cms/__tests__/lifecycleHooks/onBeforeEntryPublish.test.ts index 3fab9752e34..717c624c3a3 100644 --- a/packages/api-headless-cms/__tests__/lifecycleHooks/onBeforeEntryPublish.test.ts +++ b/packages/api-headless-cms/__tests__/lifecycleHooks/onBeforeEntryPublish.test.ts @@ -1,9 +1,7 @@ import { HeadlessCms } from "~/features/shared/abstractions.js"; import { describe, expect, it } from "vitest"; -import { ContextPlugin } from "@webiny/handler"; import { useHandler } from "~tests/testHelpers/useHandler"; import { articleModel } from "./mocks/article.model"; -import type { CmsContext } from "~/types"; import { EntryBeforePublishEventHandler } from "~/features/contentEntry/PublishEntry/index.js"; describe("onEntryBeforePublish", () => { @@ -11,8 +9,8 @@ describe("onEntryBeforePublish", () => { const { handler, tenant } = useHandler({ plugins: [ articleModel, - new ContextPlugin(context => { - context.container.registerFactory(EntryBeforePublishEventHandler, () => ({ + container => { + container.registerFactory(EntryBeforePublishEventHandler, () => ({ async handle(event) { const { model, entry } = event.payload; @@ -26,7 +24,7 @@ describe("onEntryBeforePublish", () => { } } })); - }) + } ] }); diff --git a/packages/api-headless-cms/__tests__/testHelpers/enableBenchmarkOnEnvironmentVariable.ts b/packages/api-headless-cms/__tests__/testHelpers/enableBenchmarkOnEnvironmentVariable.ts deleted file mode 100644 index 3533f1ea6da..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/enableBenchmarkOnEnvironmentVariable.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ContextPlugin } from "@webiny/api"; - -export const enableBenchmarkOnEnvironmentVariable = () => { - return new ContextPlugin(async context => { - context.benchmark.enableOn(async () => { - return process.env.BENCHMARK_ENABLE === "true"; - }); - }); -}; diff --git a/packages/api-headless-cms/__tests__/testHelpers/outputBenchmarkLogs.ts b/packages/api-headless-cms/__tests__/testHelpers/outputBenchmarkLogs.ts deleted file mode 100644 index 9c302cb3d87..00000000000 --- a/packages/api-headless-cms/__tests__/testHelpers/outputBenchmarkLogs.ts +++ /dev/null @@ -1,33 +0,0 @@ -import pathPackage from "path"; -import { writeJsonFileSync } from "write-json-file"; -import { ContextPlugin } from "@webiny/handler"; - -/** - * Do not use in the CI as this will generate logs in it. - * Use the required environment variable to turn on the logs. - */ -export const createOutputBenchmarkLogs = () => { - if (process.env.WEBINY_API_TEST_OUTPUT_CMS_BENCHMARK_LOGS !== "true") { - return []; - } - return [ - new ContextPlugin(async context => { - context.benchmark.onOutput(async ({ benchmark, stop }) => { - const target = pathPackage.join( - __dirname, - "../logs", - `${new Date().toISOString()}.json` - ); - writeJsonFileSync( - target, - { - elapsed: benchmark.elapsed, - measurements: benchmark.measurements - }, - { indent: 4 } - ); - return stop(); - }); - }) - ]; -}; From 3ba35877ace531717ab97bddb3b7f37d30509c47 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 15 Jul 2026 07:05:57 +0200 Subject: [PATCH 30/31] refactor(handler-graphql): remove ContextPlugin from tests (#40) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converts handler-graphql test ContextPlugins to DI: - pure container.register ContextPlugins (booksSchemaPlugin, decoratorsPlugin) -> plain container => {} function plugins; - booksCrudPlugin (set ctx.getBooks, read by the Query.books resolver) -> a RequestContextInitializer that augments the context post-auth; - useGqlHandler now calls function plugins directly, still bridging the remaining legacy graphql-schema plugins (bridge removal is #39); - deleted disableIntrospectionQuery.test.ts (fully it.skip'd; relied on the legacy context.reply.hijack pattern unavailable in the DI handler). The legacy graphql-schema path (createGraphQLSchemaPlugin) is left intact — it is still used by prod schemas (api-file-manager-s3, api-record-locking) and its removal belongs to #39. handler-graphql tests are now ContextPlugin-free. 45 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- .../disableIntrospectionQuery.test.ts | 60 ------------------- .../handler-graphql/__tests__/graphql.test.ts | 9 ++- .../__tests__/mocks/booksSchema.legacy.ts | 24 +++++--- .../__tests__/mocks/booksSchema.ts | 32 ++++++---- .../__tests__/useGqlHandler.ts | 12 +++- 5 files changed, 49 insertions(+), 88 deletions(-) delete mode 100644 packages/handler-graphql/__tests__/disableIntrospectionQuery.test.ts diff --git a/packages/handler-graphql/__tests__/disableIntrospectionQuery.test.ts b/packages/handler-graphql/__tests__/disableIntrospectionQuery.test.ts deleted file mode 100644 index 6e575d33466..00000000000 --- a/packages/handler-graphql/__tests__/disableIntrospectionQuery.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { describe, it, expect } from "vitest"; -import { ContextPlugin } from "@webiny/api"; -import useGqlHandler from "./useGqlHandler"; - -import { booksCrudPlugin, booksSchema } from "~tests/mocks/booksSchema.legacy.js"; - -const disableIntrospectionPlugin = new ContextPlugin(async context => { - // Check in the context.request.body if there is an introspection query. - const body = context.request.body as unknown as Record; - if (!body?.query) { - return; - } else if ((body.query as string).includes("__schema") === false) { - return; - } - - // Then you can end the request with reply hijacking. - context.reply - .send({ - message: "Forbidden to execute introspection queries." - }) - .status(403) - .hijack(); -}); -describe("disable introspection query", () => { - // TODO: context.reply.hijack() is a legacy Fastify/Lambda pattern not available in the - // DI-native handler. Disabling introspection now requires a different mechanism. - it.skip("should not allow to run introspection query", async () => { - const { introspect: enabledIntrospect } = useGqlHandler({ - plugins: [booksSchema] - }); - - const [enabledIntrospectResponse] = await enabledIntrospect(); - - expect(enabledIntrospectResponse).toMatchObject({ - data: { - __schema: expect.any(Object) - } - }); - - const { introspect: disabledIntrospect, invoke: disabledIntrospectInvoke } = useGqlHandler({ - plugins: [booksCrudPlugin, booksSchema, disableIntrospectionPlugin] - }); - - const [response, rawResponse] = await disabledIntrospect(); - - expect(rawResponse).toMatchObject({ - statusCode: 403 - }); - - expect(response).toEqual({ - message: "Forbidden to execute introspection queries." - }); - - const [booksResponse] = await disabledIntrospectInvoke({ - body: { query: `{ books { name } }` } - }); - expect(booksResponse.errors).toBeFalsy(); - expect(booksResponse.data.books.length).toBe(2); - }); -}); diff --git a/packages/handler-graphql/__tests__/graphql.test.ts b/packages/handler-graphql/__tests__/graphql.test.ts index 9a07b4e13a7..506e1b5b3ac 100644 --- a/packages/handler-graphql/__tests__/graphql.test.ts +++ b/packages/handler-graphql/__tests__/graphql.test.ts @@ -3,8 +3,7 @@ import useGqlHandler from "./useGqlHandler"; import { booksSchemaPlugin, booksCrudPlugin } from "~tests/mocks/booksSchema"; import { CoreGraphQLSchemaFactory } from "~/graphql/abstractions"; import type { GraphQLSchemaBuilder } from "~/features/GraphQLSchemaBuilder/abstractions"; -import { createContextPlugin } from "@webiny/handler"; -import type { Context } from "./types"; +import type { Container } from "@webiny/di"; describe("GraphQL Handler", () => { test("should return errors if schema doesn't exist", async () => { @@ -62,9 +61,9 @@ describe("GraphQL Handler", () => { dependencies: [] }); - const decoratorsPlugin = createContextPlugin(context => { - context.container.register(DecoratorsSchemaImpl); - }); + const decoratorsPlugin = (container: Container) => { + container.register(DecoratorsSchemaImpl); + }; const { invoke } = useGqlHandler({ plugins: [booksCrudPlugin, booksSchemaPlugin, decoratorsPlugin] diff --git a/packages/handler-graphql/__tests__/mocks/booksSchema.legacy.ts b/packages/handler-graphql/__tests__/mocks/booksSchema.legacy.ts index 16113082052..07185246829 100644 --- a/packages/handler-graphql/__tests__/mocks/booksSchema.legacy.ts +++ b/packages/handler-graphql/__tests__/mocks/booksSchema.legacy.ts @@ -1,4 +1,5 @@ -import { createContextPlugin } from "@webiny/handler"; +import type { Container } from "@webiny/di"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; import type { Book, Context } from "~tests/types"; import { createGraphQLSchemaPlugin } from "~/plugins"; @@ -11,14 +12,19 @@ export const books: Book[] = [ } ]; -export const booksCrudPlugin = createContextPlugin(async context => { - context.getBooks = async () => { - console.log("getBooks"); - console.table(books); - console.warn("Your store is quite empty!"); - return books; - }; -}); +// Augments the request context with `getBooks` post-auth (the Query.books resolver reads it). +export const booksCrudPlugin = (container: Container) => { + container.registerInstance(RequestContextInitializer, { + async init(context: Record) { + context.getBooks = async () => { + console.log("getBooks"); + console.table(books); + console.warn("Your store is quite empty!"); + return books; + }; + } + }); +}; export const booksSchema = createGraphQLSchemaPlugin({ typeDefs: /* GraphQL */ ` diff --git a/packages/handler-graphql/__tests__/mocks/booksSchema.ts b/packages/handler-graphql/__tests__/mocks/booksSchema.ts index 27b8d5bd139..58e8eed7a7c 100644 --- a/packages/handler-graphql/__tests__/mocks/booksSchema.ts +++ b/packages/handler-graphql/__tests__/mocks/booksSchema.ts @@ -1,5 +1,6 @@ -import { createContextPlugin } from "@webiny/handler"; -import type { Book, Context } from "~tests/types"; +import type { Container } from "@webiny/di"; +import { RequestContextInitializer } from "@webiny/event-handler-core"; +import type { Book } from "~tests/types"; import { CoreGraphQLSchemaFactory } from "~/graphql/abstractions.js"; import type { GraphQLSchemaBuilder } from "~/features/GraphQLSchemaBuilder/abstractions.js"; @@ -90,15 +91,20 @@ export const BooksSchemaImpl = CoreGraphQLSchemaFactory.createImplementation({ dependencies: [] }); -export const booksCrudPlugin = createContextPlugin(async context => { - context.getBooks = async () => { - console.log("getBooks"); - console.table(books); - console.warn("Your store is quite empty!"); - return books; - }; -}); +// Augments the request context with `getBooks` post-auth (the Query.books resolver reads it). +export const booksCrudPlugin = (container: Container) => { + container.registerInstance(RequestContextInitializer, { + async init(context: Record) { + context.getBooks = async () => { + console.log("getBooks"); + console.table(books); + console.warn("Your store is quite empty!"); + return books; + }; + } + }); +}; -export const booksSchemaPlugin = createContextPlugin(context => { - context.container.register(BooksSchemaImpl); -}); +export const booksSchemaPlugin = (container: Container) => { + container.register(BooksSchemaImpl); +}; diff --git a/packages/handler-graphql/__tests__/useGqlHandler.ts b/packages/handler-graphql/__tests__/useGqlHandler.ts index 42c46363bc9..6a6810350c4 100644 --- a/packages/handler-graphql/__tests__/useGqlHandler.ts +++ b/packages/handler-graphql/__tests__/useGqlHandler.ts @@ -12,7 +12,17 @@ export default ({ plugins = [] }: Params = {}) => { root: () => {}, request: async container => { const flat = [plugins].flat(Infinity as 1).filter(Boolean); - registerLegacyPluginsViaGqlContextualSchema(container, flat); + // DI-native plugins are plain `container => {}` functions (they register features / + // request-context initializers directly). Call them here; everything else (legacy + // `graphql-schema` plugins) still goes through the bridge until #39 removes it. + const isFn = (p: any) => typeof p === "function" && !p.prototype; + for (const plugin of flat.filter(isFn)) { + (plugin as (container: any) => void)(container); + } + registerLegacyPluginsViaGqlContextualSchema( + container, + flat.filter(p => !isFn(p)) + ); GraphQLEngineFeature.register(container); } From 5e3ce110afe7ccd94529ccc22707d972b12769e2 Mon Sep 17 00:00:00 2001 From: adrians5j Date: Wed, 15 Jul 2026 16:57:45 +0200 Subject: [PATCH 31/31] chore: sync-dependencies (drop stale @webiny/testing refs from references.json) Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rg3MRCToopzWSTPWqU9Lga --- packages/cli-core/files/references.json | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/cli-core/files/references.json b/packages/cli-core/files/references.json index 1f7552c7b48..5a094aac43f 100644 --- a/packages/cli-core/files/references.json +++ b/packages/cli-core/files/references.json @@ -3042,7 +3042,6 @@ "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", "/packages/api-websockets-aws/package.json", - "/packages/testing/package.json", "/packages/api-aco/package.json", "/packages/api-audit-logs/package.json", "/packages/api-file-manager-aco/package.json", @@ -3054,8 +3053,7 @@ "/packages/api-scheduler-aws/package.json", "/packages/api-website-builder/package.json", "/packages/api-websockets/package.json", - "/packages/api-websockets-aws/package.json", - "/packages/testing/package.json" + "/packages/api-websockets-aws/package.json" ] }, { @@ -3258,7 +3256,6 @@ "/packages/pulumi/package.json", "/packages/pulumi-sdk/package.json", "/packages/tenant-manager/package.json", - "/packages/testing/package.json", "/packages/utils/package.json", "/packages/validation/package.json", "/packages/wcp/package.json", @@ -3350,7 +3347,6 @@ "/packages/pulumi/package.json", "/packages/pulumi-sdk/package.json", "/packages/tenant-manager/package.json", - "/packages/testing/package.json", "/packages/utils/package.json", "/packages/validation/package.json", "/packages/wcp/package.json", @@ -3532,7 +3528,6 @@ "/packages/sdk/package.json", "/packages/shared-aco/package.json", "/packages/tenant-manager/package.json", - "/packages/testing/package.json", "/packages/utils/package.json", "/packages/validation/package.json", "/packages/wcp/package.json", @@ -3663,7 +3658,6 @@ "/packages/sdk/package.json", "/packages/shared-aco/package.json", "/packages/tenant-manager/package.json", - "/packages/testing/package.json", "/packages/utils/package.json", "/packages/validation/package.json", "/packages/wcp/package.json", @@ -4436,7 +4430,6 @@ { "file": "/packages/handler-graphql/package.json", "types": ["dependencies"] }, { "file": "/packages/languages/package.json", "types": ["dependencies"] }, { "file": "/packages/self-hosted-auth/package.json", "types": ["dependencies"] }, - { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/webhooks/package.json", "types": ["dependencies"] } ] } @@ -5055,7 +5048,6 @@ { "file": "/packages/sdk/package.json", "types": ["devDependencies"] }, { "file": "/packages/shared-aco/package.json", "types": ["devDependencies"] }, { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, - { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, { "file": "/packages/wcp/package.json", "types": ["devDependencies"] }, @@ -5883,7 +5875,6 @@ { "file": "/packages/pulumi/package.json", "types": ["devDependencies"] }, { "file": "/packages/pulumi-sdk/package.json", "types": ["devDependencies"] }, { "file": "/packages/tenant-manager/package.json", "types": ["devDependencies"] }, - { "file": "/packages/testing/package.json", "types": ["devDependencies"] }, { "file": "/packages/utils/package.json", "types": ["devDependencies"] }, { "file": "/packages/validation/package.json", "types": ["devDependencies"] }, { "file": "/packages/wcp/package.json", "types": ["devDependencies"] },