From e5fe2dbceffd8060769bcf3f3041c5e250426320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Zori=C4=87?= Date: Fri, 27 Dec 2024 14:50:18 +0100 Subject: [PATCH] chore: lock to typescript 5.3.3 --- cypress-tests/package.json | 2 +- package.json | 8 +- packages/api-aco/package.json | 2 +- packages/api-admin-settings/package.json | 2 +- packages/api-admin-users-so-ddb/package.json | 2 +- packages/api-admin-users/package.json | 2 +- .../api-apw-scheduler-so-ddb/package.json | 2 +- packages/api-apw/package.json | 2 +- packages/api-audit-logs/package.json | 2 +- .../api-authentication-cognito/package.json | 2 +- packages/api-authentication/package.json | 2 +- .../api-background-tasks-ddb/package.json | 2 +- packages/api-background-tasks-es/package.json | 2 +- packages/api-background-tasks-os/package.json | 2 +- .../api-cognito-authenticator/package.json | 2 +- .../package.json | 2 +- packages/api-elasticsearch-tasks/package.json | 2 +- packages/api-elasticsearch/package.json | 2 +- packages/api-file-manager-ddb/package.json | 2 +- packages/api-file-manager-s3/package.json | 2 +- packages/api-file-manager/package.json | 2 +- .../api-form-builder-so-ddb-es/package.json | 2 +- packages/api-form-builder-so-ddb/package.json | 2 +- packages/api-form-builder/package.json | 2 +- packages/api-headless-cms-aco/package.json | 2 +- .../package.json | 2 +- packages/api-headless-cms-ddb-es/package.json | 2 +- packages/api-headless-cms-ddb/package.json | 2 +- .../api-headless-cms-es-tasks/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/api-headless-cms-tasks/package.json | 2 +- packages/api-headless-cms/package.json | 2 +- packages/api-i18n-content/package.json | 2 +- packages/api-i18n-ddb/package.json | 2 +- packages/api-i18n/package.json | 2 +- packages/api-log/package.json | 2 +- packages/api-mailer/package.json | 2 +- packages/api-page-builder-aco/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../api-page-builder-so-ddb-es/package.json | 2 +- packages/api-page-builder-so-ddb/package.json | 2 +- packages/api-page-builder/package.json | 2 +- .../api-prerendering-service-aws/package.json | 2 +- .../package.json | 2 +- .../api-prerendering-service/package.json | 2 +- packages/api-record-locking/package.json | 2 +- packages/api-security-auth0/package.json | 2 +- packages/api-security-cognito/package.json | 2 +- packages/api-security-okta/package.json | 2 +- packages/api-security-so-ddb/package.json | 2 +- packages/api-security/package.json | 2 +- packages/api-serverless-cms/package.json | 2 +- packages/api-tenancy-so-ddb/package.json | 2 +- packages/api-tenancy/package.json | 2 +- packages/api-tenant-manager/package.json | 2 +- packages/api-theme-manager/package.json | 2 +- packages/api-wcp/package.json | 2 +- packages/api-websockets/package.json | 2 +- packages/api/package.json | 2 +- packages/app-aco/package.json | 2 +- packages/app-admin-auth0/package.json | 2 +- packages/app-admin-cognito/package.json | 2 +- packages/app-admin-okta/package.json | 2 +- packages/app-admin-rmwc/package.json | 2 +- packages/app-admin-users-cognito/package.json | 2 +- packages/app-admin/package.json | 2 +- packages/app-apw/package.json | 2 +- packages/app-audit-logs/package.json | 2 +- .../app-cognito-authenticator/package.json | 2 +- packages/app-file-manager-s3/package.json | 2 +- packages/app-file-manager/package.json | 2 +- packages/app-form-builder/package.json | 2 +- packages/app-graphql-playground/package.json | 2 +- packages/app-headless-cms-common/package.json | 2 +- packages/app-headless-cms/package.json | 2 +- packages/app-i18n-content/package.json | 2 +- packages/app-i18n/package.json | 2 +- packages/app-mailer/package.json | 2 +- .../app-page-builder-elements/package.json | 2 +- packages/app-page-builder/package.json | 2 +- .../package.json | 2 +- packages/app-record-locking/package.json | 2 +- .../package.json | 2 +- packages/app-security/package.json | 2 +- packages/app-serverless-cms/package.json | 2 +- packages/app-tenancy/package.json | 2 +- packages/app-tenant-manager/package.json | 2 +- packages/app-theme-manager/package.json | 2 +- packages/app-theme/package.json | 2 +- packages/app-trash-bin/package.json | 2 +- packages/app-utils/package.json | 2 +- packages/app-wcp/package.json | 2 +- packages/app-website/package.json | 2 +- packages/app-websockets/package.json | 2 +- packages/app/package.json | 2 +- packages/aws-sdk/package.json | 2 +- packages/cli-plugin-dependencies/package.json | 2 +- packages/cli-plugin-extensions/package.json | 2 +- .../package.json | 2 +- packages/cli-plugin-scaffold-ci/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../template/package.json | 2 +- .../package.json | 2 +- packages/cli-plugin-scaffold/package.json | 2 +- packages/cli/files/references.json | 2 +- packages/cli/package.json | 2 +- .../template/ddb-es/dependencies.json | 6 +- .../template/ddb-os/dependencies.json | 6 +- .../template/ddb/dependencies.json | 6 +- packages/data-migration/package.json | 2 +- packages/data-migration/src/index.ts | 1 - packages/db-dynamodb/package.json | 2 +- packages/db/package.json | 2 +- packages/di-container/package.json | 2 +- packages/error/package.json | 2 +- packages/feature-flags/package.json | 2 +- packages/form/package.json | 2 +- packages/handler-aws/package.json | 2 +- packages/handler-client/package.json | 2 +- packages/handler-db/package.json | 2 +- packages/handler-graphql/package.json | 2 +- packages/handler-logs/package.json | 2 +- packages/handler/package.json | 2 +- packages/i18n-react/package.json | 2 +- packages/i18n/package.json | 2 +- packages/ioc/package.json | 2 +- packages/logger/package.json | 2 +- packages/migrations/package.json | 2 +- .../5.35.0/001/FileSettingsMigration.ts | 104 --- .../5.35.0/001/ddb-es/FileDataMigration.ts | 198 ------ .../src/migrations/5.35.0/001/ddb-es/index.ts | 58 -- .../5.35.0/001/ddb/FileDataMigration.ts | 185 ------ .../src/migrations/5.35.0/001/ddb/index.ts | 52 -- .../5.35.0/001/entities/createFileEntity.ts | 54 -- .../5.35.0/001/entities/createLocaleEntity.ts | 45 -- .../001/entities/createSettingsEntity.ts | 30 - .../5.35.0/001/entities/createTenantEntity.ts | 62 -- .../src/migrations/5.35.0/001/types.ts | 20 - .../5.35.0/002/createLocaleEntity.ts | 25 - .../5.35.0/002/createSettingsEntity.ts | 54 -- .../5.35.0/002/createTenantEntity.ts | 39 -- .../src/migrations/5.35.0/002/index.ts | 132 ---- .../5.35.0/003/createTenantEntity.ts | 39 -- .../migrations/5.35.0/003/createUserEntity.ts | 48 -- .../src/migrations/5.35.0/003/index.ts | 98 --- .../5.35.0/004/createTenantEntity.ts | 50 -- .../src/migrations/5.35.0/004/index.ts | 85 --- .../5.35.0/005/createLocaleEntity.ts | 25 - .../5.35.0/005/createModelEntity.ts | 95 --- .../5.35.0/005/createTenantEntity.ts | 6 - .../src/migrations/5.35.0/005/index.ts | 145 ----- .../src/migrations/5.35.0/005/types.ts | 44 -- .../src/migrations/5.35.0/006/constants.ts | 3 - .../5.35.0/006/ddb-es/PageDataMigration.ts | 471 -------------- .../src/migrations/5.35.0/006/ddb-es/index.ts | 60 -- .../5.35.0/006/ddb/PageDataMigration.ts | 283 --------- .../src/migrations/5.35.0/006/ddb/index.ts | 48 -- .../5.35.0/006/entities/createEntryEntity.ts | 101 --- .../5.35.0/006/entities/createLocaleEntity.ts | 25 - .../5.35.0/006/entities/createPageEntity.ts | 108 ---- .../5.35.0/006/entities/createTenantEntity.ts | 6 - .../src/migrations/5.35.0/006/types.ts | 94 --- .../5.35.0/006/utils/getCompressedData.ts | 13 - .../5.35.0/006/utils/getLexicalContentText.ts | 24 - .../5.35.0/006/utils/getSearchableContent.ts | 53 -- .../5.35.0/006/utils/processors/button.ts | 9 - .../5.35.0/006/utils/processors/image.ts | 9 - .../5.35.0/006/utils/processors/images.ts | 20 - .../5.35.0/006/utils/processors/index.ts | 6 - .../5.35.0/006/utils/processors/paragraph.ts | 21 - .../src/migrations/5.36.0/001/constants.ts | 3 - .../5.36.0/001/ddb-es/FileDataMigration.ts | 473 -------------- .../src/migrations/5.36.0/001/ddb-es/index.ts | 60 -- .../5.36.0/001/ddb/FileDataMigration.ts | 280 -------- .../src/migrations/5.36.0/001/ddb/index.ts | 48 -- .../5.36.0/001/entities/createEntryEntity.ts | 101 --- .../5.36.0/001/entities/createFileEntity.ts | 27 - .../5.36.0/001/entities/createLocaleEntity.ts | 25 - .../5.36.0/001/entities/createTenantEntity.ts | 6 - .../src/migrations/5.36.0/001/types.ts | 75 --- .../5.36.0/001/utils/createMimeTag.ts | 1 - .../5.36.0/001/utils/getCompressedData.ts | 13 - .../5.37.0/001/TenantLinkDataMigration.ts | 115 ---- .../5.37.0/001/entities/createTenantEntity.ts | 6 - .../001/entities/createTenantLinkEntity.ts | 6 - .../src/migrations/5.37.0/001/index.ts | 48 -- .../src/migrations/5.37.0/001/types.ts | 33 - .../5.37.0/001/utils/isMigratedTenantLink.ts | 5 - .../src/migrations/5.37.0/002/constants.ts | 1 - .../src/migrations/5.37.0/002/ddb-es/index.ts | 426 ------------- .../src/migrations/5.37.0/002/ddb/index.ts | 166 ----- .../5.37.0/002/entities/createEntryEntity.ts | 104 --- .../5.37.0/002/entities/createLocaleEntity.ts | 25 - .../5.37.0/002/entities/createTenantEntity.ts | 6 - .../src/migrations/5.37.0/002/types.ts | 61 -- .../5.37.0/002/utils/getCompressedData.ts | 13 - .../5.37.0/002/utils/getDecompressedData.ts | 25 - .../src/migrations/5.37.0/003/constants.ts | 3 - .../5.37.0/003/ddb-es/AcoFolderMigration.ts | 392 ------------ .../src/migrations/5.37.0/003/ddb-es/index.ts | 63 -- .../003/ddb-es/latestElasticsearchData.ts | 25 - .../5.37.0/003/ddb/AcoFolderMigration.ts | 212 ------- .../src/migrations/5.37.0/003/ddb/index.ts | 48 -- .../5.37.0/003/entities/createEntryEntity.ts | 104 --- .../5.37.0/003/entities/createLocaleEntity.ts | 25 - .../5.37.0/003/entities/createTenantEntity.ts | 6 - .../src/migrations/5.37.0/003/types.ts | 53 -- .../5.37.0/003/utils/getCompressedData.ts | 13 - .../5.37.0/003/utils/getDecompressedData.ts | 25 - .../src/migrations/5.37.0/004/constants.ts | 7 - .../5.37.0/004/ddb-es/PageDataMigration.ts | 418 ------------ .../src/migrations/5.37.0/004/ddb-es/index.ts | 61 -- .../5.37.0/004/ddb/PageDataMigration.ts | 301 --------- .../src/migrations/5.37.0/004/ddb/index.ts | 48 -- .../5.37.0/004/entities/createEntryEntity.ts | 104 --- .../5.37.0/004/entities/createLocaleEntity.ts | 25 - .../5.37.0/004/entities/createPageEntity.ts | 108 ---- .../5.37.0/004/entities/createTenantEntity.ts | 6 - .../src/migrations/5.37.0/004/types.ts | 155 ----- .../5.37.0/004/utils/getCompressedData.ts | 13 - .../src/migrations/5.37.0/005/constants.ts | 3 - .../src/migrations/5.37.0/005/ddb-es/index.ts | 461 -------------- .../src/migrations/5.37.0/005/ddb/index.ts | 300 --------- .../5.37.0/005/entities/createEntryEntity.ts | 104 --- .../5.37.0/005/entities/createFileEntity.ts | 27 - .../5.37.0/005/entities/createLocaleEntity.ts | 25 - .../5.37.0/005/entities/createTenantEntity.ts | 6 - .../005/entities/createTenantLinkEntity.ts | 6 - .../src/migrations/5.37.0/005/types.ts | 119 ---- .../src/migrations/5.38.0/001/ddb-es/index.ts | 239 ------- .../src/migrations/5.38.0/001/ddb/index.ts | 121 ---- .../5.38.0/001/entities/createFormEntity.ts | 85 --- .../src/migrations/5.38.0/001/types.ts | 9 - .../src/migrations/5.38.0/002/ddb-es/index.ts | 329 ---------- .../src/migrations/5.38.0/002/ddb/index.ts | 175 ----- .../5.38.0/002/entities/createFormEntity.ts | 85 --- .../createFormSubmissionDdbEsEntity.ts | 23 - .../entities/createFormSubmissionEntity.ts | 49 -- .../src/migrations/5.38.0/002/types.ts | 19 - .../5.38.0/003/ddb/compressContent.ts | 10 - .../src/migrations/5.38.0/003/ddb/index.ts | 165 ----- .../003/entities/createPageBlockEntity.ts | 60 -- .../src/migrations/5.38.0/003/types.ts | 8 - .../src/migrations/5.39.0/001/ddb-es/index.ts | 354 ----------- .../src/migrations/5.39.0/001/ddb/index.ts | 168 ----- .../5.39.0/001/entities/createEntryEntity.ts | 127 ---- .../src/migrations/5.39.0/001/types.ts | 153 ----- .../5.39.0/001/utils/assignNewMetaFields.ts | 56 -- .../001/utils/ensureAllNonNullableValues.ts | 60 -- .../5.39.0/001/utils/fixTypeFieldValue.ts | 33 - .../5.39.0/001/utils/getCompressedData.ts | 13 - .../5.39.0/001/utils/getDecompressedData.ts | 25 - .../5.39.0/001/utils/getFallbackIdentity.ts | 65 -- .../001/utils/getFirstLastPublishedOn.ts | 55 -- .../getNonNullableFieldsWithMissingValues.ts | 21 - .../001/utils/getOldestRevisionCreatedOn.ts | 44 -- .../001/utils/hasAllNonNullableValues.ts | 20 - .../001/utils/hasValidTypeFieldValue.ts | 18 - .../5.39.0/001/utils/isMigratedEntry.ts | 5 - .../002/ddb-es/FileManager_5_39_0_002.ts | 212 ------- .../src/migrations/5.39.0/002/ddb-es/index.ts | 1 - .../5.39.0/002/ddb/FileManager_5_39_0_002.ts | 157 ----- .../src/migrations/5.39.0/002/ddb/index.ts | 1 - .../5.39.0/002/utils/FileMetadata.ts | 60 -- .../5.39.0/002/utils/createFileEntity.ts | 56 -- .../5.39.0/002/utils/createLocaleEntity.ts | 25 - .../5.39.0/002/utils/createTenantEntity.ts | 6 - .../src/migrations/5.39.2/001/ddb-es/index.ts | 373 ----------- .../5.39.6/001/ddb-es/MetaFieldsMigration.ts | 244 ------- .../5.39.6/001/ddb-es/SegmentProcessor.ts | 70 -- .../src/migrations/5.39.6/001/ddb-es/bin.ts | 78 --- ...teMetaFieldsDataMigrationDeploymentHook.ts | 102 --- .../src/migrations/5.39.6/001/ddb-es/index.ts | 460 -------------- .../src/migrations/5.39.6/001/ddb-es/utils.ts | 64 -- .../migrations/5.39.6/001/ddb-es/worker.ts | 596 ------------------ .../migrations/5.40.0/001/ddb/compression.ts | 35 - .../5.40.0/001/ddb/createBlockEntity.ts | 48 -- .../src/migrations/5.40.0/001/ddb/index.ts | 180 ------ .../src/migrations/5.40.0/001/ddb/types.ts | 22 - .../src/migrations/5.41.0/001/index.ts | 7 +- .../src/utils/forEachTenantLocale.ts | 12 +- packages/plugins/package.json | 2 +- packages/project-utils/package.json | 2 +- packages/pubsub/package.json | 2 +- packages/pulumi-aws/package.json | 2 +- packages/pulumi-sdk/package.json | 2 +- packages/pulumi/package.json | 2 +- packages/react-composition/package.json | 2 +- .../react-rich-text-renderer/package.json | 2 +- packages/react-router/package.json | 2 +- packages/serverless-cms-aws/package.json | 2 +- packages/tasks/package.json | 2 +- packages/theme/package.json | 2 +- packages/ui-composer/package.json | 2 +- packages/ui/package.json | 2 +- packages/utils/package.json | 2 +- packages/validation/package.json | 2 +- packages/wcp/package.json | 2 +- packages/wcp/src/types.ts | 7 + yarn.lock | 498 +++++++++------ 307 files changed, 477 insertions(+), 14217 deletions(-) delete mode 100644 packages/migrations/src/migrations/5.35.0/001/FileSettingsMigration.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/ddb-es/FileDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/ddb/FileDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/entities/createFileEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/entities/createSettingsEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/001/types.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/002/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/002/createSettingsEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/002/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/002/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/003/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/003/createUserEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/003/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/004/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/004/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/005/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/005/createModelEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/005/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/005/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/005/types.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/constants.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/entities/createPageEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/types.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/getLexicalContentText.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/getSearchableContent.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/processors/button.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/processors/image.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/processors/images.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/processors/index.ts delete mode 100644 packages/migrations/src/migrations/5.35.0/006/utils/processors/paragraph.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/constants.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/ddb-es/FileDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/ddb/FileDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/entities/createFileEntity.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/types.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/utils/createMimeTag.ts delete mode 100644 packages/migrations/src/migrations/5.36.0/001/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/TenantLinkDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/entities/createTenantLinkEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/types.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/001/utils/isMigratedTenantLink.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/constants.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/types.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/002/utils/getDecompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/constants.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/ddb-es/AcoFolderMigration.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/ddb-es/latestElasticsearchData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/ddb/AcoFolderMigration.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/types.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/003/utils/getDecompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/constants.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/ddb-es/PageDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/ddb/PageDataMigration.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/entities/createPageEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/types.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/004/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/constants.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/entities/createFileEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/entities/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/entities/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/entities/createTenantLinkEntity.ts delete mode 100644 packages/migrations/src/migrations/5.37.0/005/types.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/001/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/001/entities/createFormEntity.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/001/types.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/entities/createFormEntity.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionDdbEsEntity.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionEntity.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/002/types.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/003/ddb/compressContent.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/003/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/003/entities/createPageBlockEntity.ts delete mode 100644 packages/migrations/src/migrations/5.38.0/003/types.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/types.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/assignNewMetaFields.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/fixTypeFieldValue.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getCompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getDecompressedData.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getFirstLastPublishedOn.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/ddb-es/FileManager_5_39_0_002.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/ddb/FileManager_5_39_0_002.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/utils/FileMetadata.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/utils/createFileEntity.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/utils/createLocaleEntity.ts delete mode 100644 packages/migrations/src/migrations/5.39.0/002/utils/createTenantEntity.ts delete mode 100644 packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts delete mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts delete mode 100644 packages/migrations/src/migrations/5.40.0/001/ddb/compression.ts delete mode 100644 packages/migrations/src/migrations/5.40.0/001/ddb/createBlockEntity.ts delete mode 100644 packages/migrations/src/migrations/5.40.0/001/ddb/index.ts delete mode 100644 packages/migrations/src/migrations/5.40.0/001/ddb/types.ts diff --git a/cypress-tests/package.json b/cypress-tests/package.json index d90dc44a034..8df2c19a226 100644 --- a/cypress-tests/package.json +++ b/cypress-tests/package.json @@ -19,7 +19,7 @@ "lodash": "^4.17.21", "nanoid": "^3.3.8", "node-fetch": "2.6.7", - "typescript": "5.7.2", + "typescript": "5.3.3", "uniqid": "^5.4.0" }, "scripts": { diff --git a/package.json b/package.json index 8067200c0c9..05ddd4deb69 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,8 @@ "@types/prettier": "^2.7.3", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "adio": "^1.0.1", "axios": "^1.7.9", "babel-jest": "29.7.0", @@ -116,7 +116,7 @@ "ts-expect": "^1.3.0", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", - "typescript": "5.7.2", + "typescript": "5.3.3", "typescript-transform-paths": "^3.5.3", "verdaccio": "^5.29.1", "write-json-file": "^4.3.0", @@ -229,7 +229,7 @@ "@emotion/react": "11.10.8", "@octokit/rest": "^20.0.2", "braces": "^3.0.3", - "typescript": "5.7.2", + "typescript": "5.3.3", "@types/jsdom": "link:./typings/void", "@types/webpack": "^5.28.0", "browserify-sign": "^4.2.2", diff --git a/packages/api-aco/package.json b/packages/api-aco/package.json index 32ecb2f2f51..5128b62d227 100644 --- a/packages/api-aco/package.json +++ b/packages/api-aco/package.json @@ -51,6 +51,6 @@ "graphql": "^15.9.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" } } diff --git a/packages/api-admin-settings/package.json b/packages/api-admin-settings/package.json index 0e60d32b336..822f06f2e88 100644 --- a/packages/api-admin-settings/package.json +++ b/packages/api-admin-settings/package.json @@ -34,7 +34,7 @@ "jest-dynalite": "^3.6.1", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-admin-users-so-ddb/package.json b/packages/api-admin-users-so-ddb/package.json index e679c11289d..3f226c7c6c8 100644 --- a/packages/api-admin-users-so-ddb/package.json +++ b/packages/api-admin-users-so-ddb/package.json @@ -28,7 +28,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-admin-users/package.json b/packages/api-admin-users/package.json index 33ba9cd5317..065e6b0acac 100644 --- a/packages/api-admin-users/package.json +++ b/packages/api-admin-users/package.json @@ -32,7 +32,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-apw-scheduler-so-ddb/package.json b/packages/api-apw-scheduler-so-ddb/package.json index 97e736528d2..c93a2fe2b83 100644 --- a/packages/api-apw-scheduler-so-ddb/package.json +++ b/packages/api-apw-scheduler-so-ddb/package.json @@ -35,7 +35,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-apw/package.json b/packages/api-apw/package.json index fd7eb28b4cc..ec7d31697f8 100644 --- a/packages/api-apw/package.json +++ b/packages/api-apw/package.json @@ -47,7 +47,7 @@ "jest": "^29.7.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-audit-logs/package.json b/packages/api-audit-logs/package.json index bfa86eb470e..35184ab451f 100644 --- a/packages/api-audit-logs/package.json +++ b/packages/api-audit-logs/package.json @@ -32,7 +32,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "graphql": "^15.9.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "dependencies": { "@webiny/api": "0.0.0", diff --git a/packages/api-authentication-cognito/package.json b/packages/api-authentication-cognito/package.json index cfcbe874f75..d44e7782b83 100644 --- a/packages/api-authentication-cognito/package.json +++ b/packages/api-authentication-cognito/package.json @@ -20,7 +20,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-authentication/package.json b/packages/api-authentication/package.json index 22d15b5a79c..576a520ed9a 100644 --- a/packages/api-authentication/package.json +++ b/packages/api-authentication/package.json @@ -19,7 +19,7 @@ "@webiny/project-utils": "0.0.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-background-tasks-ddb/package.json b/packages/api-background-tasks-ddb/package.json index 565ac79e277..e0a0ddea7db 100644 --- a/packages/api-background-tasks-ddb/package.json +++ b/packages/api-background-tasks-ddb/package.json @@ -17,7 +17,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-background-tasks-es/package.json b/packages/api-background-tasks-es/package.json index e00e51de9da..28a5dadf5fd 100644 --- a/packages/api-background-tasks-es/package.json +++ b/packages/api-background-tasks-es/package.json @@ -19,7 +19,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-background-tasks-os/package.json b/packages/api-background-tasks-os/package.json index 4540b0a8168..12cf7837045 100644 --- a/packages/api-background-tasks-os/package.json +++ b/packages/api-background-tasks-os/package.json @@ -19,7 +19,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-cognito-authenticator/package.json b/packages/api-cognito-authenticator/package.json index 91cba7ce52a..0d97c478743 100644 --- a/packages/api-cognito-authenticator/package.json +++ b/packages/api-cognito-authenticator/package.json @@ -23,7 +23,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-dynamodb-to-elasticsearch/package.json b/packages/api-dynamodb-to-elasticsearch/package.json index 34e8a668e4b..b92e4186e7d 100644 --- a/packages/api-dynamodb-to-elasticsearch/package.json +++ b/packages/api-dynamodb-to-elasticsearch/package.json @@ -22,7 +22,7 @@ "@webiny/cli": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-elasticsearch-tasks/package.json b/packages/api-elasticsearch-tasks/package.json index 02221d10100..2f0cbeb6bf0 100644 --- a/packages/api-elasticsearch-tasks/package.json +++ b/packages/api-elasticsearch-tasks/package.json @@ -39,7 +39,7 @@ "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", "type-fest": "^3.13.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-elasticsearch/package.json b/packages/api-elasticsearch/package.json index 2d0d0a6d64b..3f1fcdfcd88 100644 --- a/packages/api-elasticsearch/package.json +++ b/packages/api-elasticsearch/package.json @@ -24,7 +24,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-file-manager-ddb/package.json b/packages/api-file-manager-ddb/package.json index 54454b24ff0..490e26f8519 100644 --- a/packages/api-file-manager-ddb/package.json +++ b/packages/api-file-manager-ddb/package.json @@ -33,7 +33,7 @@ "jest-dynalite": "^3.6.1", "jsonpack": "^1.1.5", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-file-manager-s3/package.json b/packages/api-file-manager-s3/package.json index 8477c2c3c38..acd542dc483 100644 --- a/packages/api-file-manager-s3/package.json +++ b/packages/api-file-manager-s3/package.json @@ -35,7 +35,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-file-manager/package.json b/packages/api-file-manager/package.json index 6c00dd99f1b..068e2035a17 100644 --- a/packages/api-file-manager/package.json +++ b/packages/api-file-manager/package.json @@ -42,7 +42,7 @@ "@webiny/utils": "0.0.0", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-form-builder-so-ddb-es/package.json b/packages/api-form-builder-so-ddb-es/package.json index c5d53ce08f5..9388efdaf3e 100644 --- a/packages/api-form-builder-so-ddb-es/package.json +++ b/packages/api-form-builder-so-ddb-es/package.json @@ -46,7 +46,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-form-builder-so-ddb/package.json b/packages/api-form-builder-so-ddb/package.json index ae5b87aa32b..ad055880967 100644 --- a/packages/api-form-builder-so-ddb/package.json +++ b/packages/api-form-builder-so-ddb/package.json @@ -36,7 +36,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-form-builder/package.json b/packages/api-form-builder/package.json index 0d762394117..481d8f02e22 100644 --- a/packages/api-form-builder/package.json +++ b/packages/api-form-builder/package.json @@ -51,7 +51,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-headless-cms-aco/package.json b/packages/api-headless-cms-aco/package.json index 1ede20f9933..8b615d10041 100644 --- a/packages/api-headless-cms-aco/package.json +++ b/packages/api-headless-cms-aco/package.json @@ -34,7 +34,7 @@ "@webiny/project-utils": "0.0.0", "@webiny/wcp": "0.0.0", "graphql": "^15.9.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "dependencies": { "@webiny/api": "0.0.0", diff --git a/packages/api-headless-cms-bulk-actions/package.json b/packages/api-headless-cms-bulk-actions/package.json index 2fa1d69b91e..65f2d4e54d4 100644 --- a/packages/api-headless-cms-bulk-actions/package.json +++ b/packages/api-headless-cms-bulk-actions/package.json @@ -32,7 +32,7 @@ "@webiny/project-utils": "0.0.0", "@webiny/wcp": "0.0.0", "graphql": "^15.9.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/api-headless-cms-ddb-es/package.json b/packages/api-headless-cms-ddb-es/package.json index 438ed3a6e83..1bdb055e747 100644 --- a/packages/api-headless-cms-ddb-es/package.json +++ b/packages/api-headless-cms-ddb-es/package.json @@ -58,7 +58,7 @@ "jest-dynalite": "^3.6.1", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-headless-cms-ddb/package.json b/packages/api-headless-cms-ddb/package.json index 3e480e10e02..e4a75ca5809 100644 --- a/packages/api-headless-cms-ddb/package.json +++ b/packages/api-headless-cms-ddb/package.json @@ -41,7 +41,7 @@ "@webiny/project-utils": "0.0.0", "jest": "^29.7.0", "jest-dynalite": "^3.6.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-headless-cms-es-tasks/package.json b/packages/api-headless-cms-es-tasks/package.json index 8a11723ef32..174b4a66893 100644 --- a/packages/api-headless-cms-es-tasks/package.json +++ b/packages/api-headless-cms-es-tasks/package.json @@ -32,7 +32,7 @@ "@webiny/handler-graphql": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/api-headless-cms-import-export/package.json b/packages/api-headless-cms-import-export/package.json index 9a452c20a66..9eb2982f96d 100644 --- a/packages/api-headless-cms-import-export/package.json +++ b/packages/api-headless-cms-import-export/package.json @@ -46,7 +46,7 @@ "adm-zip": "^0.5.14", "aws-sdk-client-mock": "^4.1.0", "graphql": "^15.9.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/api-headless-cms-tasks-ddb-es/package.json b/packages/api-headless-cms-tasks-ddb-es/package.json index 06ad77012a6..528ce4fc058 100644 --- a/packages/api-headless-cms-tasks-ddb-es/package.json +++ b/packages/api-headless-cms-tasks-ddb-es/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/api-headless-cms-tasks/package.json b/packages/api-headless-cms-tasks/package.json index 373b4397045..cc31a78e43c 100644 --- a/packages/api-headless-cms-tasks/package.json +++ b/packages/api-headless-cms-tasks/package.json @@ -35,7 +35,7 @@ "@webiny/handler-aws": "0.0.0", "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/api-headless-cms/package.json b/packages/api-headless-cms/package.json index 3a6eb980c82..e6a530aa81d 100644 --- a/packages/api-headless-cms/package.json +++ b/packages/api-headless-cms/package.json @@ -60,7 +60,7 @@ "jest": "^29.7.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2", + "typescript": "5.3.3", "write-json-file": "^4.3.0" }, "publishConfig": { diff --git a/packages/api-i18n-content/package.json b/packages/api-i18n-content/package.json index c87f77a7ac7..bdb6f94e124 100644 --- a/packages/api-i18n-content/package.json +++ b/packages/api-i18n-content/package.json @@ -19,7 +19,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-i18n-ddb/package.json b/packages/api-i18n-ddb/package.json index a9a5977a655..193ae45888b 100644 --- a/packages/api-i18n-ddb/package.json +++ b/packages/api-i18n-ddb/package.json @@ -37,7 +37,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-i18n/package.json b/packages/api-i18n/package.json index e2c91b5dc60..f4593528e6b 100644 --- a/packages/api-i18n/package.json +++ b/packages/api-i18n/package.json @@ -31,7 +31,7 @@ "@webiny/project-utils": "0.0.0", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-log/package.json b/packages/api-log/package.json index e64a59fb336..8aee17c2688 100644 --- a/packages/api-log/package.json +++ b/packages/api-log/package.json @@ -33,7 +33,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-mailer/package.json b/packages/api-mailer/package.json index 66e091a5cc6..3d7ebfb93c2 100644 --- a/packages/api-mailer/package.json +++ b/packages/api-mailer/package.json @@ -41,7 +41,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-page-builder-aco/package.json b/packages/api-page-builder-aco/package.json index 493bda9519b..45dcb66ea14 100644 --- a/packages/api-page-builder-aco/package.json +++ b/packages/api-page-builder-aco/package.json @@ -35,7 +35,7 @@ "@webiny/project-utils": "0.0.0", "@webiny/wcp": "0.0.0", "graphql": "^15.9.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "dependencies": { "@webiny/api": "0.0.0", diff --git a/packages/api-page-builder-import-export-so-ddb/package.json b/packages/api-page-builder-import-export-so-ddb/package.json index fa7a9daf275..27392990cf3 100644 --- a/packages/api-page-builder-import-export-so-ddb/package.json +++ b/packages/api-page-builder-import-export-so-ddb/package.json @@ -33,7 +33,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-page-builder-import-export/package.json b/packages/api-page-builder-import-export/package.json index 71e9ba86e9d..668580f2dfd 100644 --- a/packages/api-page-builder-import-export/package.json +++ b/packages/api-page-builder-import-export/package.json @@ -53,7 +53,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-page-builder-so-ddb-es/package.json b/packages/api-page-builder-so-ddb-es/package.json index 860fc8d18ac..bdb103c1a47 100644 --- a/packages/api-page-builder-so-ddb-es/package.json +++ b/packages/api-page-builder-so-ddb-es/package.json @@ -60,7 +60,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-page-builder-so-ddb/package.json b/packages/api-page-builder-so-ddb/package.json index a0874813fd5..25cce596548 100644 --- a/packages/api-page-builder-so-ddb/package.json +++ b/packages/api-page-builder-so-ddb/package.json @@ -38,7 +38,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-page-builder/package.json b/packages/api-page-builder/package.json index 5c745931663..d8c4be7afcc 100644 --- a/packages/api-page-builder/package.json +++ b/packages/api-page-builder/package.json @@ -52,7 +52,7 @@ "bytes": "^3.1.2", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-prerendering-service-aws/package.json b/packages/api-prerendering-service-aws/package.json index e257a53aa5d..b6ef9ba3bb3 100644 --- a/packages/api-prerendering-service-aws/package.json +++ b/packages/api-prerendering-service-aws/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-prerendering-service-so-ddb/package.json b/packages/api-prerendering-service-so-ddb/package.json index 7591323af48..73782c5df5a 100644 --- a/packages/api-prerendering-service-so-ddb/package.json +++ b/packages/api-prerendering-service-so-ddb/package.json @@ -31,7 +31,7 @@ "jest-dynalite": "^3.6.1", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-prerendering-service/package.json b/packages/api-prerendering-service/package.json index 481a1ba8193..24e5750ed6b 100644 --- a/packages/api-prerendering-service/package.json +++ b/packages/api-prerendering-service/package.json @@ -40,7 +40,7 @@ "@webiny/project-utils": "0.0.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-record-locking/package.json b/packages/api-record-locking/package.json index b77dfe9b538..d70234d3343 100644 --- a/packages/api-record-locking/package.json +++ b/packages/api-record-locking/package.json @@ -33,7 +33,7 @@ "graphql": "^15.9.0", "rimraf": "^6.0.1", "type-fest": "^3.13.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-security-auth0/package.json b/packages/api-security-auth0/package.json index 84f4f28b1a9..9ffd7834d2a 100644 --- a/packages/api-security-auth0/package.json +++ b/packages/api-security-auth0/package.json @@ -29,7 +29,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-security-cognito/package.json b/packages/api-security-cognito/package.json index ad639aed588..60e6bc9724c 100644 --- a/packages/api-security-cognito/package.json +++ b/packages/api-security-cognito/package.json @@ -33,7 +33,7 @@ "@webiny/project-utils": "0.0.0", "md5": "^2.3.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-security-okta/package.json b/packages/api-security-okta/package.json index 819a7c05060..4f46177df8a 100644 --- a/packages/api-security-okta/package.json +++ b/packages/api-security-okta/package.json @@ -27,7 +27,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-security-so-ddb/package.json b/packages/api-security-so-ddb/package.json index 7c3460fc4da..a37165135de 100644 --- a/packages/api-security-so-ddb/package.json +++ b/packages/api-security-so-ddb/package.json @@ -28,7 +28,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-security/package.json b/packages/api-security/package.json index 93e8fa532a1..cbe231c81c6 100644 --- a/packages/api-security/package.json +++ b/packages/api-security/package.json @@ -34,7 +34,7 @@ "@webiny/project-utils": "0.0.0", "@webiny/wcp": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-serverless-cms/package.json b/packages/api-serverless-cms/package.json index 32f3ad4e61f..d225217ca00 100644 --- a/packages/api-serverless-cms/package.json +++ b/packages/api-serverless-cms/package.json @@ -45,7 +45,7 @@ "@webiny/tasks": "0.0.0", "graphql": "^15.9.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-tenancy-so-ddb/package.json b/packages/api-tenancy-so-ddb/package.json index abc93c1629d..32b1d3a980d 100644 --- a/packages/api-tenancy-so-ddb/package.json +++ b/packages/api-tenancy-so-ddb/package.json @@ -28,7 +28,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-tenancy/package.json b/packages/api-tenancy/package.json index e50b5d96874..3a89f53a3b1 100644 --- a/packages/api-tenancy/package.json +++ b/packages/api-tenancy/package.json @@ -26,7 +26,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-tenant-manager/package.json b/packages/api-tenant-manager/package.json index 92c3d5fecbf..179fbb497ee 100644 --- a/packages/api-tenant-manager/package.json +++ b/packages/api-tenant-manager/package.json @@ -25,7 +25,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-theme-manager/package.json b/packages/api-theme-manager/package.json index 6cf42f86eea..750161a19f7 100644 --- a/packages/api-theme-manager/package.json +++ b/packages/api-theme-manager/package.json @@ -19,7 +19,7 @@ "@webiny/project-utils": "0.0.0", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-wcp/package.json b/packages/api-wcp/package.json index bda9cb81b57..f8783c0a1ef 100644 --- a/packages/api-wcp/package.json +++ b/packages/api-wcp/package.json @@ -22,7 +22,7 @@ "@webiny/project-utils": "0.0.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api-websockets/package.json b/packages/api-websockets/package.json index f5f65c91af5..db96f1a0cef 100644 --- a/packages/api-websockets/package.json +++ b/packages/api-websockets/package.json @@ -35,7 +35,7 @@ "@webiny/project-utils": "0.0.0", "graphql": "^15.9.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/api/package.json b/packages/api/package.json index 0e4de9e99e0..8c9bd072357 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -19,7 +19,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-aco/package.json b/packages/app-aco/package.json index be49fbad777..977a778dd59 100644 --- a/packages/app-aco/package.json +++ b/packages/app-aco/package.json @@ -50,7 +50,7 @@ "apollo-client": "^2.6.10", "apollo-link": "^1.2.14", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin-auth0/package.json b/packages/app-admin-auth0/package.json index 5ec6811970b..b65a015985b 100644 --- a/packages/app-admin-auth0/package.json +++ b/packages/app-admin-auth0/package.json @@ -38,7 +38,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin-cognito/package.json b/packages/app-admin-cognito/package.json index 2b4bfc5778b..97bff6698e5 100644 --- a/packages/app-admin-cognito/package.json +++ b/packages/app-admin-cognito/package.json @@ -34,7 +34,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin-okta/package.json b/packages/app-admin-okta/package.json index 1318f590f3c..43b5ce55158 100644 --- a/packages/app-admin-okta/package.json +++ b/packages/app-admin-okta/package.json @@ -39,7 +39,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin-rmwc/package.json b/packages/app-admin-rmwc/package.json index 55749924848..01f8df0e8ad 100644 --- a/packages/app-admin-rmwc/package.json +++ b/packages/app-admin-rmwc/package.json @@ -39,7 +39,7 @@ "@webiny/project-utils": "0.0.0", "babel-plugin-named-asset-import": "^1.0.0-next.3e165448", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin-users-cognito/package.json b/packages/app-admin-users-cognito/package.json index 929438a1c9a..fec434d4843 100644 --- a/packages/app-admin-users-cognito/package.json +++ b/packages/app-admin-users-cognito/package.json @@ -38,7 +38,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-admin/package.json b/packages/app-admin/package.json index f3609008376..846c5ea6e49 100644 --- a/packages/app-admin/package.json +++ b/packages/app-admin/package.json @@ -71,7 +71,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-apw/package.json b/packages/app-apw/package.json index 873a64ad9db..ca8c9a0d67e 100644 --- a/packages/app-apw/package.json +++ b/packages/app-apw/package.json @@ -47,7 +47,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-audit-logs/package.json b/packages/app-audit-logs/package.json index 09ccf6f1c13..1c107aed0c0 100644 --- a/packages/app-audit-logs/package.json +++ b/packages/app-audit-logs/package.json @@ -38,7 +38,7 @@ "@webiny/project-utils": "0.0.0", "execa": "^5.1.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-cognito-authenticator/package.json b/packages/app-cognito-authenticator/package.json index 9cdbeaaa2c0..ef685baf1d7 100644 --- a/packages/app-cognito-authenticator/package.json +++ b/packages/app-cognito-authenticator/package.json @@ -22,7 +22,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-file-manager-s3/package.json b/packages/app-file-manager-s3/package.json index 9c919c95ded..668b3105173 100644 --- a/packages/app-file-manager-s3/package.json +++ b/packages/app-file-manager-s3/package.json @@ -18,7 +18,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-file-manager/package.json b/packages/app-file-manager/package.json index 577d6adcc6d..7365d8ac92c 100644 --- a/packages/app-file-manager/package.json +++ b/packages/app-file-manager/package.json @@ -62,7 +62,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-form-builder/package.json b/packages/app-form-builder/package.json index d063a601784..3d3271904d5 100644 --- a/packages/app-form-builder/package.json +++ b/packages/app-form-builder/package.json @@ -65,7 +65,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-graphql-playground/package.json b/packages/app-graphql-playground/package.json index 1d1a852e2fd..f0ecbfb65bf 100644 --- a/packages/app-graphql-playground/package.json +++ b/packages/app-graphql-playground/package.json @@ -33,7 +33,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-headless-cms-common/package.json b/packages/app-headless-cms-common/package.json index 8301f342e7e..911245e387e 100644 --- a/packages/app-headless-cms-common/package.json +++ b/packages/app-headless-cms-common/package.json @@ -31,7 +31,7 @@ "@webiny/project-utils": "0.0.0", "babel-plugin-module-resolver": "^5.0.2", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-headless-cms/package.json b/packages/app-headless-cms/package.json index a7dd9556ced..35fb5e5909e 100644 --- a/packages/app-headless-cms/package.json +++ b/packages/app-headless-cms/package.json @@ -83,7 +83,7 @@ "@webiny/project-utils": "0.0.0", "babel-plugin-module-resolver": "^5.0.2", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-i18n-content/package.json b/packages/app-i18n-content/package.json index e6e6de101e7..65ccccba6e6 100644 --- a/packages/app-i18n-content/package.json +++ b/packages/app-i18n-content/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-i18n/package.json b/packages/app-i18n/package.json index 8f4e92f37dc..731b5184678 100644 --- a/packages/app-i18n/package.json +++ b/packages/app-i18n/package.json @@ -42,7 +42,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-mailer/package.json b/packages/app-mailer/package.json index 62460b6a4d4..04bcb2b6eb8 100644 --- a/packages/app-mailer/package.json +++ b/packages/app-mailer/package.json @@ -34,7 +34,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-page-builder-elements/package.json b/packages/app-page-builder-elements/package.json index 1ba1ba1f480..7ea12376368 100644 --- a/packages/app-page-builder-elements/package.json +++ b/packages/app-page-builder-elements/package.json @@ -57,7 +57,7 @@ "@webiny/project-utils": "0.0.0", "execa": "^5.1.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-page-builder/package.json b/packages/app-page-builder/package.json index 3c349c087bb..7a125874ed8 100644 --- a/packages/app-page-builder/package.json +++ b/packages/app-page-builder/package.json @@ -97,7 +97,7 @@ "@webiny/project-utils": "0.0.0", "execa": "^5.1.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-plugin-admin-welcome-screen/package.json b/packages/app-plugin-admin-welcome-screen/package.json index db5059891e0..89c35b1fedd 100644 --- a/packages/app-plugin-admin-welcome-screen/package.json +++ b/packages/app-plugin-admin-welcome-screen/package.json @@ -21,7 +21,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-record-locking/package.json b/packages/app-record-locking/package.json index 0749a88b715..a65a4d64059 100644 --- a/packages/app-record-locking/package.json +++ b/packages/app-record-locking/package.json @@ -38,7 +38,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-security-access-management/package.json b/packages/app-security-access-management/package.json index 9865848c133..7b4e99cff46 100644 --- a/packages/app-security-access-management/package.json +++ b/packages/app-security-access-management/package.json @@ -37,7 +37,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-security/package.json b/packages/app-security/package.json index 66dcb93d90f..e6c2687c085 100644 --- a/packages/app-security/package.json +++ b/packages/app-security/package.json @@ -24,7 +24,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-serverless-cms/package.json b/packages/app-serverless-cms/package.json index 6bfff4684b1..edc8041d636 100644 --- a/packages/app-serverless-cms/package.json +++ b/packages/app-serverless-cms/package.json @@ -49,7 +49,7 @@ "@webiny/project-utils": "0.0.0", "babel-plugin-named-asset-import": "^1.0.0-next.3e165448", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-tenancy/package.json b/packages/app-tenancy/package.json index c2a9c4bd48c..e8806c8e021 100644 --- a/packages/app-tenancy/package.json +++ b/packages/app-tenancy/package.json @@ -31,7 +31,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-tenant-manager/package.json b/packages/app-tenant-manager/package.json index b73dd90b379..67d81f6d59d 100644 --- a/packages/app-tenant-manager/package.json +++ b/packages/app-tenant-manager/package.json @@ -38,7 +38,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-theme-manager/package.json b/packages/app-theme-manager/package.json index 6ae7d675444..d8b4d40e469 100644 --- a/packages/app-theme-manager/package.json +++ b/packages/app-theme-manager/package.json @@ -39,7 +39,7 @@ "@webiny/project-utils": "0.0.0", "babel-plugin-named-asset-import": "^1.0.0-next.3e165448", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-theme/package.json b/packages/app-theme/package.json index 2123c258297..039cb3dc76b 100644 --- a/packages/app-theme/package.json +++ b/packages/app-theme/package.json @@ -23,7 +23,7 @@ "@webiny/project-utils": "0.0.0", "execa": "^5.1.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-trash-bin/package.json b/packages/app-trash-bin/package.json index d28be3eabb9..59471320075 100644 --- a/packages/app-trash-bin/package.json +++ b/packages/app-trash-bin/package.json @@ -33,7 +33,7 @@ "apollo-client": "^2.6.10", "apollo-link": "^1.2.14", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-utils/package.json b/packages/app-utils/package.json index bc6e937fb64..412868262fc 100644 --- a/packages/app-utils/package.json +++ b/packages/app-utils/package.json @@ -16,7 +16,7 @@ "devDependencies": { "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-wcp/package.json b/packages/app-wcp/package.json index b8a7d6627bf..cbcb70ee8b6 100644 --- a/packages/app-wcp/package.json +++ b/packages/app-wcp/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-website/package.json b/packages/app-website/package.json index bc9775598e7..3a13fbc4098 100644 --- a/packages/app-website/package.json +++ b/packages/app-website/package.json @@ -34,7 +34,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app-websockets/package.json b/packages/app-websockets/package.json index 9441d1d32da..8956e3ba7d9 100644 --- a/packages/app-websockets/package.json +++ b/packages/app-websockets/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/app/package.json b/packages/app/package.json index 2b1690b5afc..762256609c8 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -49,7 +49,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/aws-sdk/package.json b/packages/aws-sdk/package.json index 578365c5e67..95a761378d7 100644 --- a/packages/aws-sdk/package.json +++ b/packages/aws-sdk/package.json @@ -35,7 +35,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/cli-plugin-dependencies/package.json b/packages/cli-plugin-dependencies/package.json index 6abbdb930ac..583268f7c29 100644 --- a/packages/cli-plugin-dependencies/package.json +++ b/packages/cli-plugin-dependencies/package.json @@ -27,7 +27,7 @@ "prettier": "^2.8.8", "rimraf": "^6.0.1", "type-fest": "^3.13.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "license": "MIT", "publishConfig": { diff --git a/packages/cli-plugin-extensions/package.json b/packages/cli-plugin-extensions/package.json index ebdebc68f8a..56a9dd0d8fd 100644 --- a/packages/cli-plugin-extensions/package.json +++ b/packages/cli-plugin-extensions/package.json @@ -42,7 +42,7 @@ "find-up": "^5.0.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "license": "MIT", "publishConfig": { diff --git a/packages/cli-plugin-scaffold-admin-app-module/package.json b/packages/cli-plugin-scaffold-admin-app-module/package.json index 5880436adad..ad5ff9f6424 100644 --- a/packages/cli-plugin-scaffold-admin-app-module/package.json +++ b/packages/cli-plugin-scaffold-admin-app-module/package.json @@ -34,7 +34,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-ci/package.json b/packages/cli-plugin-scaffold-ci/package.json index cac85a563e9..44d13385b26 100644 --- a/packages/cli-plugin-scaffold-ci/package.json +++ b/packages/cli-plugin-scaffold-ci/package.json @@ -38,7 +38,7 @@ "@types/validate-npm-package-name": "^3.0.3", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-extensions/package.json b/packages/cli-plugin-scaffold-extensions/package.json index f189da6cc39..baf095389bf 100644 --- a/packages/cli-plugin-scaffold-extensions/package.json +++ b/packages/cli-plugin-scaffold-extensions/package.json @@ -30,7 +30,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-full-stack-app/package.json b/packages/cli-plugin-scaffold-full-stack-app/package.json index c6dead220ee..f3a7deaf4c4 100644 --- a/packages/cli-plugin-scaffold-full-stack-app/package.json +++ b/packages/cli-plugin-scaffold-full-stack-app/package.json @@ -32,7 +32,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-graphql-api/package.json b/packages/cli-plugin-scaffold-graphql-api/package.json index 72a2149e247..e06464da44d 100644 --- a/packages/cli-plugin-scaffold-graphql-api/package.json +++ b/packages/cli-plugin-scaffold-graphql-api/package.json @@ -36,7 +36,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-graphql-service/package.json b/packages/cli-plugin-scaffold-graphql-service/package.json index 3e41a0b36cc..ab2fadc8f0b 100644 --- a/packages/cli-plugin-scaffold-graphql-service/package.json +++ b/packages/cli-plugin-scaffold-graphql-service/package.json @@ -37,7 +37,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-react-app/package.json b/packages/cli-plugin-scaffold-react-app/package.json index a2b0d6a1f69..2d1839aad35 100644 --- a/packages/cli-plugin-scaffold-react-app/package.json +++ b/packages/cli-plugin-scaffold-react-app/package.json @@ -35,7 +35,7 @@ "@webiny/plugins": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-react-component/package.json b/packages/cli-plugin-scaffold-react-component/package.json index 1e7a50f894f..c3955f2d8e9 100644 --- a/packages/cli-plugin-scaffold-react-component/package.json +++ b/packages/cli-plugin-scaffold-react-component/package.json @@ -40,7 +40,7 @@ "@types/validate-npm-package-name": "^3.0.3", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold-react-component/template/package.json b/packages/cli-plugin-scaffold-react-component/template/package.json index 4db2d8cb687..0dae3441e77 100644 --- a/packages/cli-plugin-scaffold-react-component/template/package.json +++ b/packages/cli-plugin-scaffold-react-component/template/package.json @@ -19,7 +19,7 @@ "@webiny/cli": "^5.0.0", "@webiny/project-utils": "^5.0.0", "rimraf": "^6.0.1", - "typescript": "5.1.6" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/cli-plugin-scaffold-workspaces/package.json b/packages/cli-plugin-scaffold-workspaces/package.json index 05e25832a1f..b1ceec4065d 100644 --- a/packages/cli-plugin-scaffold-workspaces/package.json +++ b/packages/cli-plugin-scaffold-workspaces/package.json @@ -37,7 +37,7 @@ "@types/validate-npm-package-name": "^3.0.3", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/cli-plugin-scaffold/package.json b/packages/cli-plugin-scaffold/package.json index 3f5b65a7aeb..dab38d04bdf 100644 --- a/packages/cli-plugin-scaffold/package.json +++ b/packages/cli-plugin-scaffold/package.json @@ -30,7 +30,7 @@ "find-up": "^5.0.0", "prettier": "^2.8.8", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "license": "MIT", "publishConfig": { diff --git a/packages/cli/files/references.json b/packages/cli/files/references.json index 3623295f76d..d702a00af0c 100644 --- a/packages/cli/files/references.json +++ b/packages/cli/files/references.json @@ -1 +1 @@ -{"dependencies":[{"name":"@apollo/react-common","version":"3.1.4","files":["/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@apollo/react-components","version":"3.1.5","files":["/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"@apollo/react-hooks","version":"3.1.5","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"@auth0/auth0-react","version":"2.2.4","files":["/packages/app-admin-auth0/package.json"]},{"name":"@aws-amplify/auth","version":"5.1.9","files":["/packages/app-admin-cognito/package.json","/packages/app-cognito-authenticator/package.json"]},{"name":"@aws-sdk/client-apigatewaymanagementapi","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudfront","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-events","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-logs","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cognito-identity-provider","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb-streams","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-eventbridge","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iam","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iot","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-lambda","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-s3","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sfn","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sqs","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sts","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/credential-providers","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-storage","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-presigned-post","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-request-presigner","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/util-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@babel/cli","version":"7.26.4","files":["/packages/project-utils/package.json"]},{"name":"@babel/code-frame","version":"7.26.2","files":["/packages/api-headless-cms/package.json"]},{"name":"@babel/core","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-class-properties","version":"7.18.6","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-object-rest-spread","version":"7.20.7","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-throw-expressions","version":"7.25.9","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-syntax-object-rest-spread","version":"7.8.3","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-env","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-react","version":"7.26.3","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-typescript","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/runtime","version":"7.26.0","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/project-utils/package.json"]},{"name":"@dnd-kit/core","version":"6.1.0","files":["/packages/app-form-builder/package.json"]},{"name":"@dnd-kit/sortable","version":"8.0.0","files":["/packages/app-form-builder/package.json"]},{"name":"@dnd-kit/utilities","version":"3.2.2","files":["/packages/app-form-builder/package.json"]},{"name":"@editorjs/delimiter","version":"1.2.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/editorjs","version":"2.26.5","files":["/packages/app-admin/package.json","/packages/app-form-builder/package.json","/packages/react-rich-text-renderer/package.json","/packages/ui/package.json"]},{"name":"@editorjs/list","version":"1.6.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/quote","version":"2.4.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/underline","version":"1.0.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@elastic/elasticsearch","version":"7.12.0","files":["/packages/api-elasticsearch/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/data-migration/package.json","/packages/migrations/package.json"]},{"name":"@emotion/cache","version":"11.10.5","files":["/packages/app-website/package.json"]},{"name":"@emotion/is-prop-valid","version":"1.1.1","files":["/packages/app-apw/package.json"]},{"name":"@emotion/react","version":"11.10.8","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor/package.json","/packages/lexical-theme/package.json","/packages/theme/package.json","/packages/ui/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"@emotion/styled","version":"11.10.6","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/package.json","/packages/ui/package.json","/extensions/theme/package.json"]},{"name":"@fastify/aws-lambda","version":"3.1.3","files":["/packages/handler-aws/package.json"]},{"name":"@fastify/compress","version":"6.2.0","files":["/packages/handler/package.json"]},{"name":"@fastify/cookie","version":"8.3.0","files":["/packages/handler/package.json"]},{"name":"@fortawesome/fontawesome-common-types","version":"0.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/fontawesome-svg-core","version":"1.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-brands-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-regular-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-solid-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/react-fontawesome","version":"0.1.17","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@graphql-tools/merge","version":"9.0.4","files":["/packages/api-headless-cms/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/resolvers-composition","version":"7.0.1","files":["/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/schema","version":"10.0.6","files":["/packages/api-headless-cms/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/utils","version":"10.3.1","files":["/packages/handler-graphql/package.json"]},{"name":"@iconify/json","version":"2.2.142","files":["/packages/app-admin/package.json"]},{"name":"@lexical/code","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/hashtag","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/headless","version":"0.16.1","files":["/packages/lexical-converter/package.json"]},{"name":"@lexical/history","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/html","version":"0.16.1","files":["/packages/lexical-converter/package.json"]},{"name":"@lexical/list","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/mark","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/overflow","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/react","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/rich-text","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/selection","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/text","version":"0.16.1","files":["/packages/lexical-editor/package.json"]},{"name":"@lexical/utils","version":"0.16.1","files":["/packages/app-headless-cms/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-pb-element/package.json","/packages/lexical-nodes/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.3","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-trash-bin/package.json","/packages/lexical-editor-pb-element/package.json","/packages/ui/package.json"]},{"name":"@material-symbols/svg-400","version":"0.4.1","files":["/packages/app-aco/package.json","/packages/app-form-builder/package.json"]},{"name":"@minoru/react-dnd-treeview","version":"3.2.1","files":["/packages/app-aco/package.json"]},{"name":"@okta/okta-auth-js","version":"5.3.1","files":["/packages/app-admin-okta/package.json"]},{"name":"@okta/okta-react","version":"6.1.0","files":["/packages/app-admin-okta/package.json"]},{"name":"@okta/okta-signin-widget","version":"5.9.4","files":["/packages/app-admin-okta/package.json"]},{"name":"@pmmmwh/react-refresh-webpack-plugin","version":"0.5.15","files":["/packages/project-utils/package.json"]},{"name":"@pulumi/aws","version":"6.64.0","files":["/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"@pulumi/pulumi","version":"3.142.0","files":["/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"@pulumi/random","version":"4.16.7","files":["/packages/pulumi-aws/package.json"]},{"name":"@rmwc/base","version":"14.2.2","files":["/packages/app-admin-rmwc/package.json"]},{"name":"@rmwc/button","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/checkbox","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/chip","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/data-table","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/dialog","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/drawer","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/elevation","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/fab","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/grid","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/icon-button","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/list","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/menu","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/provider","version":"14.2.2","files":["/packages/app-admin-rmwc/package.json"]},{"name":"@rmwc/radio","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/ripple","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/select","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/slider","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/snackbar","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/switch","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/tabs","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/textfield","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/top-app-bar","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/touch-target","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/typography","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@smithy/node-http-handler","version":"2.1.6","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"@sparticuz/chromium","version":"123.0.1","files":["/packages/api-prerendering-service/package.json"]},{"name":"@svgr/webpack","version":"6.1.1","files":["/packages/app-admin/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/project-utils/package.json","/packages/ui/package.json"]},{"name":"@tanstack/react-table","version":"8.5.22","files":["/packages/ui/package.json"]},{"name":"@types/aws-lambda","version":"8.10.145","files":["/packages/aws-helpers/package.json","/packages/aws-sdk/package.json"]},{"name":"@types/hoist-non-react-statics","version":"3.3.5","files":["/package.json"]},{"name":"@types/medium-editor","version":"5.0.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/mime","version":"2.0.3","files":["/packages/app-admin/package.json"]},{"name":"@types/prismjs","version":"1.26.4","files":["/packages/lexical-nodes/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/react-rich-text-renderer/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"@types/webpack-env","version":"1.18.5","files":["/packages/project-utils/package.json"]},{"name":"accept-language-parser","version":"1.5.0","files":["/packages/api-i18n/package.json"]},{"name":"accounting","version":"0.4.1","files":["/packages/i18n/package.json"]},{"name":"aos","version":"2.3.4","files":["/packages/app-page-builder/package.json"]},{"name":"apollo-cache","version":"1.3.5","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-cache-inmemory","version":"1.6.6","files":["/packages/app/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-client","version":"2.6.10","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/react-router/package.json","/apps/website/package.json"]},{"name":"apollo-link","version":"1.2.14","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/website/package.json"]},{"name":"apollo-link-batch-http","version":"1.2.14","files":["/packages/app-serverless-cms/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-link-context","version":"1.0.20","files":["/packages/app/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-graphql-playground/package.json","/packages/app-i18n/package.json"]},{"name":"apollo-link-error","version":"1.1.13","files":["/packages/app/package.json"]},{"name":"apollo-link-http-common","version":"0.2.16","files":["/packages/app/package.json"]},{"name":"apollo-utilities","version":"1.3.4","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"archiver","version":"7.0.1","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"archy","version":"1.0.0","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"assert-browserify","version":"2.0.0","files":["/packages/project-utils/package.json"]},{"name":"aws-elasticsearch-connector","version":"9.2.0","files":["/packages/api-elasticsearch/package.json"]},{"name":"aws-lambda","version":"1.0.7","files":["/packages/aws-sdk/package.json"]},{"name":"babel-loader","version":"9.2.1","files":["/packages/project-utils/package.json"]},{"name":"body-parser","version":"1.20.3","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"boolean","version":"3.2.0","files":["/packages/app/package.json","/packages/cli/package.json","/packages/handler-graphql/package.json"]},{"name":"brace","version":"0.11.1","files":["/packages/ui/package.json"]},{"name":"buffer","version":"6.0.3","files":["/packages/project-utils/package.json"]},{"name":"bytes","version":"3.1.2","files":["/packages/api-headless-cms-import-export/package.json","/packages/app/package.json","/packages/app-file-manager/package.json"]},{"name":"cache-control-parser","version":"2.0.6","files":["/packages/api-file-manager/package.json"]},{"name":"camelcase","version":"6.3.0","files":["/packages/cli/package.json","/packages/project-utils/package.json"]},{"name":"case","version":"1.6.3","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"case-sensitive-paths-webpack-plugin","version":"2.4.0","files":["/packages/project-utils/package.json"]},{"name":"center-align","version":"1.0.1","files":["/packages/data-migration/package.json"]},{"name":"chalk","version":"4.1.2","files":["/packages/aws-layers/package.json","/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/data-migration/package.json","/packages/project-utils/package.json","/packages/serverless-cms-aws/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"cheerio","version":"1.0.0-rc.10","files":["/packages/aws-helpers/package.json"]},{"name":"classnames","version":"2.5.1","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/react-rich-text-renderer/package.json","/packages/ui/package.json"]},{"name":"color","version":"4.2.3","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"core-js","version":"3.0.1","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"cropperjs","version":"1.4.3","files":["/packages/ui/package.json"]},{"name":"cross-fetch","version":"3.0.4","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"crypto-browserify","version":"3.12.0","files":["/packages/project-utils/package.json"]},{"name":"crypto-hash","version":"3.0.0","files":["/packages/app-record-locking/package.json"]},{"name":"crypto-js","version":"4.2.0","files":["/packages/api-mailer/package.json"]},{"name":"css-loader","version":"6.10.0","files":["/packages/project-utils/package.json"]},{"name":"css-minimizer-webpack-plugin","version":"7.0.0","files":["/packages/project-utils/package.json"]},{"name":"dataloader","version":"2.2.2","files":["/packages/api-admin-users/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-tenancy/package.json"]},{"name":"dataurl-to-blob","version":"0.0.1","files":["/packages/app-file-manager/package.json"]},{"name":"date-fns","version":"2.22.1","files":["/packages/api-form-builder/package.json","/packages/app-audit-logs/package.json","/packages/db-dynamodb/package.json"]},{"name":"dayjs","version":"1.11.13","files":["/packages/api-apw/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json"]},{"name":"decompress","version":"4.2.1","files":["/packages/pulumi-sdk/package.json"]},{"name":"deep-equal","version":"2.2.3","files":["/packages/api-security/package.json","/packages/api-security-cognito/package.json","/packages/tasks/package.json"]},{"name":"dnd-core","version":"16.0.1","files":["/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-page-builder/package.json"]},{"name":"dnd-kit-sortable-tree","version":"0.1.73","files":["/packages/app-page-builder/package.json"]},{"name":"dot-prop","version":"6.0.1","files":["/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/db-dynamodb/package.json"]},{"name":"dot-prop-immutable","version":"2.1.1","files":["/packages/api-page-builder-import-export/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/ui/package.json"]},{"name":"dotenv","version":"8.2.0","files":["/packages/cli/package.json"]},{"name":"downshift","version":"3.1.2","files":["/packages/app-admin/package.json"]},{"name":"downshift","version":"2.1.5","files":["/packages/ui/package.json"]},{"name":"dynamodb-toolbox","version":"0.9.2","files":["/packages/db-dynamodb/package.json"]},{"name":"elastic-ts","version":"0.12.0","files":["/packages/api-elasticsearch/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-page-builder-so-ddb-es/package.json"]},{"name":"emotion","version":"10.0.27","files":["/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n-content/package.json","/packages/app-page-builder/package.json","/packages/app-security-access-management/package.json","/packages/app-tenant-manager/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-theme/package.json","/packages/ui/package.json"]},{"name":"eslint","version":"8.57.1","files":["/packages/project-utils/package.json"]},{"name":"eslint-config-react-app","version":"6.0.0","files":["/packages/project-utils/package.json"]},{"name":"eslint-webpack-plugin","version":"4.2.0","files":["/packages/project-utils/package.json"]},{"name":"execa","version":"5.1.1","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/cli-plugin-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/migrations/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json"]},{"name":"exit-hook","version":"4.0.0","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"express","version":"4.21.2","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"extract-zip","version":"1.6.7","files":["/packages/api-page-builder/package.json"]},{"name":"facepaint","version":"1.2.1","files":["/packages/app-page-builder-elements/package.json"]},{"name":"fast-glob","version":"3.2.7","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cwp-template-aws/package.json","/packages/migrations/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"fastify","version":"4.15.0","files":["/packages/handler/package.json","/packages/handler-aws/package.json"]},{"name":"fecha","version":"2.3.3","files":["/packages/i18n/package.json"]},{"name":"file-loader","version":"6.2.0","files":["/packages/project-utils/package.json"]},{"name":"find-up","version":"5.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/create-webiny-project/package.json","/packages/pulumi/package.json","/packages/serverless-cms-aws/package.json","/scripts/prepublishOnly/package.json"]},{"name":"folder-hash","version":"4.0.4","files":["/scripts/buildPackages/package.json"]},{"name":"fork-ts-checker-webpack-plugin","version":"9.0.2","files":["/packages/project-utils/package.json"]},{"name":"form-data","version":"4.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/pulumi-aws/package.json"]},{"name":"fs-extra","version":"11.2.0","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/cli/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"fuse.js","version":"7.0.0","files":["/packages/db-dynamodb/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/packages/cli-plugin-dependencies/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/scripts/prepublishOnly/package.json"]},{"name":"glob","version":"7.2.3","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/project-utils/package.json"]},{"name":"graphlib","version":"2.1.8","files":["/packages/app-admin/package.json","/packages/cli-plugin-workspaces/package.json"]},{"name":"graphql","version":"15.9.0","files":["/packages/api-headless-cms/package.json","/packages/api-i18n-content/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/handler-graphql/package.json","/packages/react-router/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"graphql-request","version":"3.7.0","files":["/packages/cli/package.json"]},{"name":"graphql-scalars","version":"1.12.0","files":["/packages/handler-graphql/package.json"]},{"name":"graphql-tag","version":"2.12.6","files":["/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/handler-graphql/package.json"]},{"name":"history","version":"5.3.0","files":["/packages/app-form-builder/package.json","/packages/app-page-builder/package.json","/packages/react-router/package.json"]},{"name":"html-webpack-plugin","version":"5.6.3","files":["/packages/project-utils/package.json"]},{"name":"humanize-duration","version":"3.32.1","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"i18n-locales","version":"0.0.5","files":["/packages/api-i18n/package.json"]},{"name":"indent-string","version":"5.0.0","files":["/packages/cli-plugin-scaffold-react-component/package.json"]},{"name":"inquirer","version":"8.2.6","files":["/packages/cli/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cwp-template-aws/package.json"]},{"name":"invariant","version":"2.2.4","files":["/packages/app/package.json","/packages/app-page-builder/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"inversify","version":"6.1.6","files":["/packages/ioc/package.json"]},{"name":"is-ci","version":"3.0.1","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/packages/telemetry/package.json"]},{"name":"is-hotkey","version":"0.2.0","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"isnumeric","version":"0.3.3","files":["/packages/validation/package.json"]},{"name":"js-base64","version":"3.7.7","files":["/packages/cli-plugin-scaffold-ci/package.json"]},{"name":"js-yaml","version":"3.14.1","files":["/packages/create-webiny-project/package.json"]},{"name":"jsdom","version":"25.0.1","files":["/packages/api-headless-cms/package.json"]},{"name":"jsesc","version":"3.0.2","files":["/packages/telemetry/package.json"]},{"name":"json2csv","version":"4.5.4","files":["/packages/api-form-builder/package.json","/packages/app-form-builder/package.json"]},{"name":"jsonpack","version":"1.1.5","files":["/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder/package.json","/packages/migrations/package.json"]},{"name":"jsonwebtoken","version":"9.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json"]},{"name":"jwk-to-pem","version":"2.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json"]},{"name":"keycode","version":"2.2.0","files":["/packages/ui/package.json"]},{"name":"lexical","version":"0.16.1","files":["/packages/lexical-converter/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-theme/package.json"]},{"name":"listr","version":"0.14.3","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/create-webiny-project/package.json"]},{"name":"listr2","version":"5.0.8","files":["/scripts/buildPackages/package.json"]},{"name":"load-json-file","version":"6.2.0","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/global-config/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"load-script","version":"1.0.0","files":["/packages/app-graphql-playground/package.json","/packages/ui/package.json"]},{"name":"localtunnel","version":"2.0.2","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"lodash","version":"4.17.21","files":["/packages/api-aco/package.json","/packages/api-admin-users/package.json","/packages/api-apw/package.json","/packages/api-file-manager/package.json","/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-security-access-management/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cwp-template-aws/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/migrations/package.json","/packages/project-utils/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/tasks/package.json","/packages/ui/package.json","/packages/validation/package.json","/scripts/prepublishOnly/package.json"]},{"name":"log-update","version":"4.0.0","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"material-components-web","version":"14.0.0","files":["/packages/ui/package.json"]},{"name":"md5","version":"2.3.0","files":["/packages/api-admin-users/package.json"]},{"name":"mdbid","version":"1.0.0","files":["/packages/utils/package.json"]},{"name":"medium-editor","version":"5.23.3","files":["/packages/app-page-builder/package.json"]},{"name":"mime","version":"3.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/app-file-manager/package.json","/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"mini-css-extract-plugin","version":"2.4.5","files":["/packages/project-utils/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/packages/api-security/package.json","/packages/app/package.json","/packages/app-file-manager/package.json","/packages/app-security/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/data-migration/package.json"]},{"name":"mobx","version":"6.9.0","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-trash-bin/package.json","/packages/app-utils/package.json"]},{"name":"mobx-react-lite","version":"3.4.3","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-trash-bin/package.json"]},{"name":"mqtt","version":"5.10.3","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"multimatch","version":"5.0.0","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"nanoid","version":"3.3.8","files":["/packages/app/package.json","/packages/app-page-builder/package.json","/packages/react-properties/package.json","/packages/utils/package.json"]},{"name":"nanoid-dictionary","version":"4.3.0","files":["/packages/utils/package.json"]},{"name":"ncp","version":"2.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"node-fetch","version":"2.6.7","files":["/packages/api-cognito-authenticator/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json","/packages/api-wcp/package.json","/packages/create-webiny-project/package.json","/packages/handler-logs/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json","/packages/wcp/package.json"]},{"name":"node-notifier","version":"10.0.1","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"nodemailer","version":"6.9.16","files":["/packages/api-mailer/package.json"]},{"name":"nprogress","version":"0.2.0","files":["/packages/ui/package.json"]},{"name":"nuka-carousel","version":"4.7.1","files":["/packages/ui/package.json"]},{"name":"null-loader","version":"4.0.1","files":["/packages/project-utils/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-prerendering-service/package.json"]},{"name":"object-merge-advanced","version":"12.1.0","files":["/packages/tasks/package.json"]},{"name":"object-sizeof","version":"2.6.4","files":["/packages/tasks/package.json"]},{"name":"octokit","version":"3.1.2","files":["/packages/cli-plugin-scaffold-ci/package.json"]},{"name":"open","version":"8.4.2","files":["/packages/cli/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cwp-template-aws/package.json"]},{"name":"ora","version":"4.1.1","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"os","version":"0.1.1","files":["/packages/create-webiny-project/package.json"]},{"name":"os-browserify","version":"0.3.0","files":["/packages/project-utils/package.json"]},{"name":"p-map","version":"4.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json","/packages/cli-plugin-workspaces/package.json"]},{"name":"p-reduce","version":"2.1.0","files":["/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json"]},{"name":"p-retry","version":"4.6.2","files":["/packages/api-dynamodb-to-elasticsearch/package.json","/packages/app-file-manager-s3/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/create-webiny-project/package.json","/packages/utils/package.json"]},{"name":"p-wait-for","version":"4.1.0","files":["/packages/ui-composer/package.json"]},{"name":"pako","version":"2.1.0","files":["/packages/app-page-builder/package.json"]},{"name":"path-browserify","version":"1.0.1","files":["/packages/project-utils/package.json"]},{"name":"pino-pretty","version":"9.4.0","files":["/packages/data-migration/package.json","/packages/migrations/package.json"]},{"name":"pirates","version":"4.0.6","files":["/packages/cli/package.json"]},{"name":"platform","version":"1.3.5","files":["/packages/app-page-builder/package.json"]},{"name":"pluralize","version":"8.0.0","files":["/packages/api-headless-cms/package.json","/packages/api-prerendering-service/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/migrations/package.json"]},{"name":"postcss-flexbugs-fixes","version":"5.0.2","files":["/packages/project-utils/package.json"]},{"name":"postcss-loader","version":"6.2.1","files":["/packages/project-utils/package.json"]},{"name":"postcss-normalize","version":"10.0.1","files":["/packages/project-utils/package.json"]},{"name":"postcss-preset-env","version":"9.4.0","files":["/packages/project-utils/package.json"]},{"name":"posthtml","version":"0.15.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"posthtml-noopener","version":"1.0.5","files":["/packages/api-prerendering-service/package.json"]},{"name":"posthtml-plugin-link-preload","version":"1.0.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"process","version":"0.11.10","files":["/packages/project-utils/package.json"]},{"name":"prop-types","version":"15.7.2","files":["/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"puppeteer-core","version":"23.9.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"raw-loader","version":"4.0.2","files":["/packages/project-utils/package.json"]},{"name":"raw.macro","version":"0.4.2","files":["/packages/app-headless-cms/package.json"]},{"name":"rc-tooltip","version":"5.3.1","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/cli-plugin-extensions/templates/admin/package.json","/packages/cli-plugin-extensions/templates/pbElement/package.json","/packages/cli-plugin-extensions/templates/website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/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/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/ui-composer/package.json","/apps/admin/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"react-ace","version":"6.1.4","files":["/packages/ui/package.json"]},{"name":"react-butterfiles","version":"1.3.3","files":["/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/ui/package.json"]},{"name":"react-color","version":"2.19.3","files":["/packages/app-page-builder/package.json","/packages/lexical-editor-actions/package.json","/packages/ui/package.json"]},{"name":"react-columned","version":"1.1.3","files":["/packages/ui/package.json"]},{"name":"react-custom-scrollbars","version":"4.2.1","files":["/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/ui/package.json"]},{"name":"react-dev-utils","version":"12.0.1","files":["/packages/project-utils/package.json"]},{"name":"react-dnd","version":"16.0.1","files":["/packages/app-aco/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"react-dnd-html5-backend","version":"16.0.1","files":["/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/package.json","/packages/project-utils/package.json","/packages/react-composition/package.json","/packages/react-router/package.json","/packages/ui-composer/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"react-google-recaptcha","version":"1.1.0","files":["/packages/app-form-builder/package.json"]},{"name":"react-hamburger-menu","version":"1.1.1","files":["/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"react-helmet","version":"6.1.0","files":["/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-headless-cms/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-security-access-management/package.json","/packages/app-website/package.json"]},{"name":"react-hotkeyz","version":"1.0.4","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json"]},{"name":"react-images","version":"0.5.19","files":["/packages/app-page-builder/package.json"]},{"name":"react-in-viewport","version":"1.0.0-alpha.30","files":["/packages/app-page-builder/package.json"]},{"name":"react-lazy-load","version":"3.1.14","files":["/packages/app-file-manager/package.json"]},{"name":"react-loading-skeleton","version":"3.1.0","files":["/packages/ui/package.json"]},{"name":"react-refresh","version":"0.11.0","files":["/packages/project-utils/package.json"]},{"name":"react-resizable-panels","version":"2.0.19","files":["/packages/app-admin/package.json"]},{"name":"react-router-dom","version":"6.3.0","files":["/packages/react-router/package.json"]},{"name":"react-sortable","version":"2.0.0","files":["/packages/app-page-builder/package.json"]},{"name":"react-spinner-material","version":"1.1.4","files":["/packages/app-apw/package.json","/packages/ui/package.json"]},{"name":"react-style-object-to-css","version":"1.1.2","files":["/packages/lexical-theme/package.json"]},{"name":"react-transition-group","version":"4.4.5","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/ui/package.json"]},{"name":"react-virtualized","version":"9.22.5","files":["/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"read-json-sync","version":"2.0.1","files":["/packages/project-utils/package.json"]},{"name":"recoil","version":"0.7.7","files":["/packages/app-page-builder/package.json"]},{"name":"reflect-metadata","version":"0.2.2","files":["/packages/di-container/package.json","/packages/ioc/package.json"]},{"name":"regenerator-runtime","version":"0.13.5","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"replace-in-path","version":"1.1.0","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"reset-css","version":"5.0.1","files":["/packages/app-admin/package.json","/packages/app-website/package.json"]},{"name":"resolve","version":"1.22.8","files":["/packages/project-utils/package.json"]},{"name":"resolve-url-loader","version":"5.0.0","files":["/packages/project-utils/package.json"]},{"name":"rimraf","version":"6.0.1","files":["/packages/create-webiny-project/package.json","/packages/project-utils/package.json"]},{"name":"sanitize-filename","version":"1.6.3","files":["/packages/api-file-manager-s3/package.json"]},{"name":"sanitize-html","version":"2.12.1","files":["/packages/react-rich-text-renderer/package.json"]},{"name":"sass","version":"1.44.0","files":["/packages/project-utils/package.json"]},{"name":"sass-loader","version":"12.3.0","files":["/packages/project-utils/package.json"]},{"name":"scheduler","version":"0.19.1","files":["/packages/project-utils/package.json"]},{"name":"semver","version":"7.6.3","files":["/packages/api-headless-cms/package.json","/packages/cli/package.json","/packages/cli-plugin-dependencies/package.json","/packages/create-webiny-project/package.json","/packages/data-migration/package.json","/packages/pulumi-sdk/package.json"]},{"name":"sharp","version":"0.32.6","files":["/packages/api-file-manager-s3/package.json"]},{"name":"short-hash","version":"1.0.0","files":["/packages/i18n/package.json"]},{"name":"slugify","version":"1.6.6","files":["/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-page-builder/package.json"]},{"name":"source-map-loader","version":"1.1.3","files":["/packages/project-utils/package.json"]},{"name":"source-map-support","version":"0.5.21","files":["/packages/project-utils/package.json"]},{"name":"srcset","version":"4.0.0","files":["/packages/api-prerendering-service/package.json","/packages/aws-helpers/package.json"]},{"name":"store","version":"2.0.12","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-page-builder/package.json","/packages/app-tenancy/package.json"]},{"name":"stream","version":"0.0.3","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"strip-ansi","version":"6.0.1","files":["/packages/telemetry/package.json"]},{"name":"style-loader","version":"3.3.1","files":["/packages/project-utils/package.json"]},{"name":"swiper","version":"9.3.2","files":["/packages/app-page-builder/package.json"]},{"name":"tar","version":"6.2.1","files":["/packages/pulumi-sdk/package.json"]},{"name":"terminal-link","version":"2.1.1","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json"]},{"name":"terser-webpack-plugin","version":"5.3.10","files":["/packages/project-utils/package.json"]},{"name":"theme","version":"1.0.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"timeago-react","version":"3.0.6","files":["/packages/ui/package.json"]},{"name":"ts-invariant","version":"0.10.3","files":["/packages/app/package.json"]},{"name":"ts-morph","version":"11.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json"]},{"name":"tslib","version":"2.8.1","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"ttypescript","version":"1.5.15","files":["/packages/project-utils/package.json"]},{"name":"type-fest","version":"3.13.1","files":["/packages/api-websockets/package.json","/packages/db/package.json"]},{"name":"typescript","version":"4.9.5","files":["/packages/cli/package.json","/packages/project-utils/package.json"]},{"name":"unicode-emoji-json","version":"0.4.0","files":["/packages/app-admin/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/app-page-builder/package.json","/packages/cli/package.json","/packages/plugins/package.json"]},{"name":"unzipper","version":"0.12.3","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"url","version":"0.11.4","files":["/packages/project-utils/package.json"]},{"name":"url-loader","version":"4.1.1","files":["/packages/project-utils/package.json"]},{"name":"use-deep-compare-effect","version":"1.6.1","files":["/packages/app-headless-cms/package.json"]},{"name":"uuid","version":"8.3.2","files":["/packages/create-webiny-project/package.json","/packages/global-config/package.json"]},{"name":"validate-npm-package-name","version":"3.0.0","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json"]},{"name":"vm-browserify","version":"1.1.2","files":["/packages/project-utils/package.json"]},{"name":"warning","version":"4.0.2","files":["/packages/app/package.json"]},{"name":"webpack","version":"5.97.0","files":["/packages/project-utils/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"webpack-dev-server","version":"5.1.0","files":["/packages/project-utils/package.json"]},{"name":"webpack-manifest-plugin","version":"5.0.0","files":["/packages/project-utils/package.json"]},{"name":"webpackbar","version":"7.0.0","files":["/packages/project-utils/package.json"]},{"name":"write-json-file","version":"4.3.0","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/global-config/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"wts-client","version":"1.0.1","files":["/packages/telemetry/package.json"]},{"name":"yargs","version":"17.7.2","files":["/packages/cli/package.json","/packages/create-webiny-project/package.json","/packages/i18n/package.json","/packages/migrations/package.json","/scripts/buildPackages/package.json"]},{"name":"yauzl","version":"2.10.0","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"yesno","version":"0.4.0","files":["/packages/create-webiny-project/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/api-admin-users/package.json","/packages/api-apw/package.json","/packages/api-file-manager/package.json","/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-import-export/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security/package.json","/packages/api-websockets/package.json","/packages/app-aco/package.json","/packages/app-file-manager/package.json","/packages/tasks/package.json"]}],"devDependencies":[{"name":"@4tw/cypress-drag-drop","version":"1.4.0","files":["/cypress-tests/package.json"]},{"name":"@babel/cli","version":"7.26.4","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/code-frame","version":"7.26.2","files":["/package.json"]},{"name":"@babel/compat-data","version":"7.26.3","files":["/package.json"]},{"name":"@babel/core","version":"7.26.0","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/helper-define-polyfill-provider","version":"0.6.3","files":["/package.json"]},{"name":"@babel/helper-environment-visitor","version":"7.24.7","files":["/package.json"]},{"name":"@babel/parser","version":"7.26.3","files":["/package.json"]},{"name":"@babel/plugin-proposal-class-properties","version":"7.18.6","files":["/package.json"]},{"name":"@babel/plugin-proposal-object-rest-spread","version":"7.20.7","files":["/package.json"]},{"name":"@babel/plugin-proposal-throw-expressions","version":"7.25.9","files":["/package.json"]},{"name":"@babel/plugin-syntax-object-rest-spread","version":"7.8.3","files":["/package.json"]},{"name":"@babel/plugin-transform-modules-commonjs","version":"7.26.3","files":["/package.json"]},{"name":"@babel/plugin-transform-runtime","version":"7.25.9","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/preset-env","version":"7.26.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/preset-react","version":"7.26.3","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json"]},{"name":"@babel/preset-typescript","version":"7.26.0","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/register","version":"7.25.9","files":["/package.json","/packages/i18n/package.json"]},{"name":"@babel/runtime","version":"7.26.0","files":["/package.json"]},{"name":"@babel/template","version":"7.25.9","files":["/package.json"]},{"name":"@babel/traverse","version":"7.26.4","files":["/package.json"]},{"name":"@babel/types","version":"7.26.3","files":["/package.json"]},{"name":"@commitlint/cli","version":"11.0.0","files":["/package.json"]},{"name":"@commitlint/config-conventional","version":"11.0.0","files":["/package.json"]},{"name":"@elastic/elasticsearch","version":"7.12.0","files":["/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/project-utils/package.json"]},{"name":"@emotion/babel-plugin","version":"11.11.0","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-apw/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"@emotion/react","version":"11.10.8","files":["/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"@faker-js/faker","version":"9.3.0","files":["/packages/api-headless-cms-es-tasks/package.json"]},{"name":"@grpc/grpc-js","version":"1.11.1","files":["/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.3","files":["/packages/app-audit-logs/package.json"]},{"name":"@material-symbols/svg-400","version":"0.4.1","files":["/packages/app-audit-logs/package.json"]},{"name":"@octokit/rest","version":"20.0.2","files":["/package.json"]},{"name":"@svgr/webpack","version":"6.1.1","files":["/packages/app-file-manager/package.json"]},{"name":"@testing-library/cypress","version":"10.0.0","files":["/cypress-tests/package.json"]},{"name":"@testing-library/react","version":"15.0.7","files":["/packages/form/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/ui/package.json"]},{"name":"@testing-library/user-event","version":"14.5.2","files":["/packages/form/package.json"]},{"name":"@types/accept-language-parser","version":"1.5.3","files":["/packages/api-i18n/package.json"]},{"name":"@types/accounting","version":"0.4.2","files":["/packages/i18n/package.json"]},{"name":"@types/adm-zip","version":"0.5.5","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"@types/aos","version":"3.0.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/archiver","version":"5.3.1","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"@types/babel__code-frame","version":"7.0.6","files":["/packages/api-headless-cms/package.json"]},{"name":"@types/bytes","version":"3.1.4","files":["/packages/app-admin/package.json"]},{"name":"@types/center-align","version":"1.0.0","files":["/packages/data-migration/package.json"]},{"name":"@types/crypto-js","version":"4.2.2","files":["/packages/api-mailer/package.json"]},{"name":"@types/extract-zip","version":"1.6.2","files":["/packages/api-page-builder/package.json"]},{"name":"@types/facepaint","version":"1.2.2","files":["/packages/app-page-builder-elements/package.json"]},{"name":"@types/folder-hash","version":"4.0.4","files":["/scripts/buildPackages/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"]},{"name":"@types/gtag.js","version":"0.0.20","files":["/packages/app-form-builder/package.json"]},{"name":"@types/inquirer","version":"8.2.10","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/invariant","version":"2.2.35","files":["/packages/form/package.json"]},{"name":"@types/is-hotkey","version":"0.1.10","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"@types/is-number","version":"7.0.5","files":["/packages/db-dynamodb/package.json"]},{"name":"@types/jest","version":"29.5.14","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/jsdom","version":"21.1.6","files":["/packages/lexical-converter/package.json"]},{"name":"@types/json2csv","version":"4.5.1","files":["/packages/api-form-builder/package.json","/packages/app-form-builder/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"]},{"name":"@types/jsonwebtoken","version":"9.0.2","files":["/packages/api-admin-users/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json"]},{"name":"@types/jwk-to-pem","version":"2.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security-auth0/package.json"]},{"name":"@types/lodash","version":"4.17.13","files":["/packages/app/package.json","/packages/app-cognito-authenticator/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/validation/package.json"]},{"name":"@types/md5","version":"2.3.2","files":["/packages/api-admin-users/package.json"]},{"name":"@types/ncp","version":"2.0.4","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/node","version":"22.10.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/node-fetch","version":"2.6.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json","/packages/handler-logs/package.json"]},{"name":"@types/nodemailer","version":"6.4.17","files":["/packages/api-mailer/package.json"]},{"name":"@types/nprogress","version":"0.2.0","files":["/packages/ui/package.json"]},{"name":"@types/object-hash","version":"2.2.1","files":["/packages/api-prerendering-service/package.json"]},{"name":"@types/pako","version":"2.0.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/platform","version":"1.3.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/pluralize","version":"0.0.29","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/prettier","version":"2.7.3","files":["/package.json"]},{"name":"@types/puppeteer-core","version":"7.0.4","files":["/packages/api-prerendering-service/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/package.json","/packages/app-aco/package.json","/packages/app-audit-logs/package.json","/packages/app-mailer/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/app-trash-bin/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/theme/package.json"]},{"name":"@types/react-color","version":"2.17.11","files":["/packages/lexical-editor-actions/package.json","/packages/ui/package.json"]},{"name":"@types/react-custom-scrollbars","version":"4.0.10","files":["/packages/ui/package.json"]},{"name":"@types/react-dom","version":"18.2.25","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/react-google-recaptcha","version":"1.1.2","files":["/packages/app-form-builder/package.json"]},{"name":"@types/react-hamburger-menu","version":"0.0.4","files":["/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"@types/react-helmet","version":"6.1.11","files":["/packages/app-admin-rmwc/package.json","/packages/app-security-access-management/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/website/package.json"]},{"name":"@types/react-images","version":"0.5.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/react-transition-group","version":"4.4.4","files":["/packages/ui/package.json"]},{"name":"@types/react-virtualized","version":"9.21.16","files":["/packages/app-page-builder/package.json"]},{"name":"@types/resize-observer-browser","version":"0.1.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/rimraf","version":"3.0.2","files":["/packages/api-page-builder/package.json"]},{"name":"@types/sanitize-html","version":"2.9.0","files":["/packages/react-rich-text-renderer/package.json"]},{"name":"@types/semver","version":"7.3.4","files":["/packages/data-migration/package.json"]},{"name":"@types/sharp","version":"0.32.0","files":["/packages/api-file-manager/package.json"]},{"name":"@types/store","version":"2.0.2","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"@types/uniqid","version":"5.3.2","files":["/packages/feature-flags/package.json","/packages/plugins/package.json"]},{"name":"@types/unzipper","version":"0.10.10","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"@types/validate-npm-package-name","version":"3.0.3","files":["/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/warning","version":"3.0.0","files":["/packages/app/package.json"]},{"name":"@types/yargs","version":"17.0.8","files":["/scripts/buildPackages/package.json"]},{"name":"@types/yauzl","version":"2.9.2","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"@typescript-eslint/eslint-plugin","version":"5.5.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@typescript-eslint/parser","version":"5.5.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"adio","version":"1.0.1","files":["/package.json"]},{"name":"adm-zip","version":"0.5.14","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"amazon-cognito-identity-js","version":"4.5.3","files":["/cypress-tests/package.json"]},{"name":"apollo-client","version":"2.6.10","files":["/packages/app-aco/package.json","/packages/app-trash-bin/package.json"]},{"name":"apollo-graphql","version":"0.9.5","files":["/packages/api-admin-settings/package.json","/packages/api-headless-cms/package.json"]},{"name":"apollo-link","version":"1.2.14","files":["/packages/app-aco/package.json","/packages/app-trash-bin/package.json"]},{"name":"aws-sdk-client-mock","version":"4.1.0","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"axios","version":"1.7.9","files":["/package.json"]},{"name":"babel-jest","version":"29.7.0","files":["/package.json"]},{"name":"babel-loader","version":"9.2.1","files":["/package.json","/packages/ui/package.json"]},{"name":"babel-plugin-dynamic-import-node","version":"2.3.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"babel-plugin-macros","version":"3.1.0","files":["/package.json"]},{"name":"babel-plugin-module-resolver","version":"5.0.2","files":["/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"babel-plugin-named-asset-import","version":"1.0.0-next.3e165448","files":["/packages/app-admin-rmwc/package.json","/packages/app-serverless-cms/package.json","/packages/app-theme-manager/package.json"]},{"name":"bytes","version":"3.1.2","files":["/packages/api-page-builder/package.json"]},{"name":"chalk","version":"4.1.2","files":["/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/pulumi-aws/package.json"]},{"name":"cross-env","version":"5.2.1","files":["/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"cross-spawn","version":"6.0.6","files":["/package.json"]},{"name":"csvtojson","version":"2.0.10","files":["/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json"]},{"name":"cypress","version":"13.16.0","files":["/cypress-tests/package.json"]},{"name":"cypress-image-snapshot","version":"4.0.1","files":["/cypress-tests/package.json"]},{"name":"cypress-mailosaur","version":"2.7.0","files":["/cypress-tests/package.json"]},{"name":"cypress-wait-until","version":"1.7.1","files":["/cypress-tests/package.json"]},{"name":"deepmerge","version":"4.3.1","files":["/package.json"]},{"name":"del","version":"6.0.0","files":["/cypress-tests/package.json"]},{"name":"dotenv","version":"8.2.0","files":["/packages/cwp-template-aws/package.json"]},{"name":"elastic-ts","version":"0.12.0","files":["/packages/migrations/package.json"]},{"name":"elliptic","version":"6.6.1","files":["/package.json"]},{"name":"env-ci","version":"2.0.1","files":["/package.json"]},{"name":"eslint","version":"8.57.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-config-standard","version":"16.0.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-import-resolver-babel-module","version":"5.3.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-import","version":"2.25.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-jest","version":"25.3.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-lodash","version":"7.4.0","files":["/package.json"]},{"name":"eslint-plugin-node","version":"11.1.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-promise","version":"5.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-react","version":"7.27.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-standard","version":"5.0.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"execa","version":"5.1.1","files":["/package.json","/packages/app-audit-logs/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"fast-glob","version":"3.2.7","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json"]},{"name":"find-up","version":"5.0.0","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json"]},{"name":"folder-hash","version":"4.0.4","files":["/package.json"]},{"name":"fs-extra","version":"11.2.0","files":["/package.json","/packages/api-form-builder/package.json"]},{"name":"get-stream","version":"3.0.0","files":["/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/package.json"]},{"name":"git-cz","version":"1.7.1","files":["/package.json"]},{"name":"github-actions-wac","version":"1.4.1","files":["/package.json"]},{"name":"glob","version":"7.2.3","files":["/package.json","/packages/i18n/package.json"]},{"name":"graphql","version":"15.9.0","files":["/package.json","/packages/api-aco/package.json","/packages/api-apw/package.json","/packages/api-audit-logs/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-import-export/package.json","/packages/api-mailer/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-record-locking/package.json","/packages/api-serverless-cms/package.json","/packages/api-websockets/package.json"]},{"name":"graphql-request","version":"3.7.0","files":["/cypress-tests/package.json","/apps/api/graphql/package.json"]},{"name":"husky","version":"4.2.5","files":["/package.json"]},{"name":"identity-obj-proxy","version":"3.0.0","files":["/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"inquirer","version":"8.2.6","files":["/package.json"]},{"name":"inquirer-autocomplete-prompt","version":"1.0.1","files":["/package.json"]},{"name":"inquirer-checkbox-plus-prompt","version":"1.0.1","files":["/package.json"]},{"name":"inquirer-maxlength-input-prompt","version":"1.0.0","files":["/package.json"]},{"name":"invariant","version":"2.2.4","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"jest","version":"29.7.0","files":["/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-security-so-ddb/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/data-migration/package.json","/packages/db-dynamodb/package.json","/packages/handler-client/package.json","/packages/handler-graphql/package.json","/packages/validation/package.json"]},{"name":"jest-dynalite","version":"3.6.1","files":["/packages/api-admin-settings/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-authentication/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-security-so-ddb/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-wcp/package.json","/packages/data-migration/package.json","/packages/db-dynamodb/package.json","/packages/migrations/package.json","/packages/project-utils/package.json"]},{"name":"jest-environment-jsdom","version":"29.7.0","files":["/package.json"]},{"name":"jest-extended","version":"4.0.2","files":["/package.json"]},{"name":"jest-mock-console","version":"2.0.0","files":["/packages/data-migration/package.json","/packages/handler-graphql/package.json"]},{"name":"jsdom","version":"25.0.1","files":["/packages/lexical-converter/package.json"]},{"name":"jsonpack","version":"1.1.5","files":["/packages/api-file-manager-ddb/package.json"]},{"name":"lerna","version":"8.1.2","files":["/package.json"]},{"name":"lint-staged","version":"15.2.2","files":["/package.json"]},{"name":"listr","version":"0.14.3","files":["/package.json"]},{"name":"listr2","version":"5.0.8","files":["/packages/project-utils/package.json"]},{"name":"load-json-file","version":"6.2.0","files":["/package.json","/packages/project-utils/package.json"]},{"name":"lodash","version":"4.17.21","files":["/package.json","/packages/pulumi-aws/package.json","/cypress-tests/package.json"]},{"name":"longest","version":"2.0.1","files":["/package.json"]},{"name":"md5","version":"2.3.0","files":["/packages/api-security-cognito/package.json"]},{"name":"merge","version":"2.0.0","files":["/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"mime","version":"3.0.0","files":["/packages/pulumi-aws/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/package.json"]},{"name":"mobx","version":"6.9.0","files":["/packages/form/package.json"]},{"name":"mobx-react-lite","version":"3.4.3","files":["/packages/form/package.json"]},{"name":"nanoid","version":"3.3.8","files":["/package.json","/cypress-tests/package.json"]},{"name":"ncp","version":"2.0.0","files":["/packages/ui/package.json"]},{"name":"node-fetch","version":"2.6.7","files":["/package.json","/cypress-tests/package.json"]},{"name":"pino","version":"8.21.0","files":["/packages/logger/package.json","/packages/project-utils/package.json"]},{"name":"pino-pretty","version":"9.4.0","files":["/packages/project-utils/package.json"]},{"name":"pm2","version":"5.4.3","files":["/package.json"]},{"name":"prettier","version":"2.8.8","files":["/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-apw/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"raw-loader","version":"4.0.2","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/lexical-nodes/package.json"]},{"name":"rimraf","version":"6.0.1","files":["/packages/api/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-authentication/package.json","/packages/api-authentication-cognito/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-es/package.json","/packages/api-background-tasks-os/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-content/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-record-locking/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json","/packages/api-security-okta/package.json","/packages/api-security-so-ddb/package.json","/packages/api-serverless-cms/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/api-wcp/package.json","/packages/api-websockets/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/aws-sdk/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/data-migration/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/error/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-client/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/handler-logs/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/logger/package.json","/packages/plugins/package.json","/packages/pubsub/package.json","/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/tasks/package.json","/packages/theme/package.json","/packages/ui/package.json","/packages/ui-composer/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json"]},{"name":"semver","version":"7.6.3","files":["/package.json"]},{"name":"source-map-explorer","version":"2.5.3","files":["/apps/website/package.json"]},{"name":"ts-expect","version":"1.3.0","files":["/package.json"]},{"name":"ts-jest","version":"29.1.2","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"ts-node","version":"10.9.2","files":["/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"ttypescript","version":"1.5.15","files":["/packages/api/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-audit-logs/package.json","/packages/api-authentication/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-es/package.json","/packages/api-background-tasks-os/package.json","/packages/api-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/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-import-export/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-tasks-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-record-locking/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-so-ddb/package.json","/packages/api-serverless-cms/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/api-wcp/package.json","/packages/api-websockets/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-utils/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/db-dynamodb/package.json","/packages/di-container/package.json","/packages/error/package.json","/packages/feature-flags/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/ioc/package.json","/packages/logger/package.json","/packages/migrations/package.json","/packages/plugins/package.json","/packages/pubsub/package.json","/packages/pulumi-aws/package.json","/packages/react-composition/package.json","/packages/react-router/package.json","/packages/serverless-cms-aws/package.json","/packages/tasks/package.json","/packages/theme/package.json","/packages/ui/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json"]},{"name":"type-fest","version":"3.13.1","files":["/packages/api-elasticsearch-tasks/package.json","/packages/api-record-locking/package.json","/packages/cli-plugin-dependencies/package.json","/packages/tasks/package.json","/scripts/prepublishOnly/package.json"]},{"name":"typescript","version":"4.9.5","files":["/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-audit-logs/package.json","/packages/api-authentication/package.json","/packages/api-authentication-cognito/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-es/package.json","/packages/api-background-tasks-os/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-dynamodb-to-elasticsearch/package.json","/packages/api-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/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-import-export/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-tasks-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-content/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-record-locking/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json","/packages/api-security-okta/package.json","/packages/api-security-so-ddb/package.json","/packages/api-serverless-cms/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/api-wcp/package.json","/packages/api-websockets/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-utils/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/aws-sdk/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/data-migration/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/di-container/package.json","/packages/error/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-client/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/handler-logs/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/ioc/package.json","/packages/logger/package.json","/packages/migrations/package.json","/packages/plugins/package.json","/packages/pubsub/package.json","/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/react-composition/package.json","/packages/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/serverless-cms-aws/package.json","/packages/tasks/package.json","/packages/theme/package.json","/packages/ui/package.json","/packages/ui-composer/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/cypress-tests/package.json"]},{"name":"typescript-transform-paths","version":"3.4.6","files":["/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/cypress-tests/package.json"]},{"name":"verdaccio","version":"5.29.1","files":["/package.json"]},{"name":"write-json-file","version":"4.3.0","files":["/package.json","/packages/api-headless-cms/package.json"]},{"name":"yargs","version":"17.7.2","files":["/package.json","/packages/project-utils/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/ioc/package.json"]}],"peerDependencies":[{"name":"@editorjs/editorjs","version":"2.26.5","files":["/packages/app-page-builder-elements/package.json"]},{"name":"aos","version":"2.3.4","files":["/packages/app-page-builder-elements/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/app-audit-logs/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/react-router/package.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"react-columned","version":"1.1.3","files":["/packages/app-page-builder-elements/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/packages/ui/package.json"]},{"name":"react-google-recaptcha","version":"1.1.0","files":["/packages/app-page-builder-elements/package.json"]},{"name":"react-images","version":"0.5.19","files":["/packages/app-page-builder-elements/package.json"]},{"name":"swiper","version":"9.3.2","files":["/packages/app-page-builder-elements/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/utils/package.json"]}],"resolutions":[{"name":"@emotion/react","version":"11.10.8","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@grpc/grpc-js","version":"1.11.1","files":["/package.json"]},{"name":"@octokit/rest","version":"20.0.2","files":["/package.json"]},{"name":"@types/eslint","version":"8.2.1","files":["/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/react-dom","version":"18.2.25","files":["/package.json"]},{"name":"@types/webpack","version":"5.28.0","files":["/package.json"]},{"name":"braces","version":"3.0.3","files":["/package.json"]},{"name":"browserify-sign","version":"4.2.2","files":["/package.json"]},{"name":"crypto-js","version":"4.2.0","files":["/package.json"]},{"name":"ejs","version":"3.1.10","files":["/package.json"]},{"name":"express","version":"4.21.2","files":["/package.json"]},{"name":"follow-redirects","version":"1.15.6","files":["/package.json"]},{"name":"http-proxy-middleware","version":"2.0.7","files":["/package.json"]},{"name":"ip","version":"2.0.1","files":["/package.json"]},{"name":"postcss","version":"8.4.35","files":["/package.json"]},{"name":"react","version":"18.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"react-dnd","version":"16.0.1","files":["/package.json"]},{"name":"react-dnd-html5-backend","version":"16.0.1","files":["/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"semver","version":"7.6.3","files":["/package.json"]},{"name":"systeminformation","version":"5.23.18","files":["/package.json"]},{"name":"tar","version":"6.2.1","files":["/package.json"]},{"name":"typescript","version":"4.9.5","files":["/package.json"]},{"name":"xml2js","version":"0.6.2","files":["/package.json"]}],"references":[{"name":"@types/hoist-non-react-statics","versions":[{"version":"3.3.5","files":[{"file":"/package.json","types":["dependencies"]}]}]},{"name":"@babel/cli","versions":[{"version":"7.26.4","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/code-frame","versions":[{"version":"7.26.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@babel/compat-data","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/core","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/helper-define-polyfill-provider","versions":[{"version":"0.6.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/helper-environment-visitor","versions":[{"version":"7.24.7","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/parser","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/plugin-proposal-class-properties","versions":[{"version":"7.18.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-proposal-object-rest-spread","versions":[{"version":"7.20.7","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-proposal-throw-expressions","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-syntax-object-rest-spread","versions":[{"version":"7.8.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-transform-modules-commonjs","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/plugin-transform-runtime","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@babel/preset-env","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/preset-react","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/preset-typescript","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/register","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]}]}]},{"name":"@babel/runtime","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/template","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/traverse","versions":[{"version":"7.26.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/types","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@commitlint/cli","versions":[{"version":"11.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@commitlint/config-conventional","versions":[{"version":"11.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@grpc/grpc-js","versions":[{"version":"1.11.1","files":[{"file":"/package.json","types":["devDependencies","resolutions"]}]}]},{"name":"@octokit/rest","versions":[{"version":"20.0.2","files":[{"file":"/package.json","types":["devDependencies","resolutions"]}]}]},{"name":"@types/fs-extra","versions":[{"version":"11.0.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@types/jest","versions":[{"version":"29.5.14","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@types/node","versions":[{"version":"22.10.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@types/prettier","versions":[{"version":"2.7.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@types/react","versions":[{"version":"18.2.79","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"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-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies","resolutions"]},{"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/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"@types/react-dom","versions":[{"version":"18.2.25","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@typescript-eslint/eslint-plugin","versions":[{"version":"5.5.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@typescript-eslint/parser","versions":[{"version":"5.5.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"adio","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"axios","versions":[{"version":"1.7.9","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-jest","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-loader","versions":[{"version":"9.2.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-dynamic-import-node","versions":[{"version":"2.3.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-macros","versions":[{"version":"3.1.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-module-resolver","versions":[{"version":"5.0.2","files":[{"file":"/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/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"chalk","versions":[{"version":"4.1.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/aws-layers/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"cross-env","versions":[{"version":"5.2.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/apps/admin/package.json","types":["devDependencies"]},{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"cross-spawn","versions":[{"version":"6.0.6","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"deepmerge","versions":[{"version":"4.3.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"elliptic","versions":[{"version":"6.6.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"env-ci","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"eslint","versions":[{"version":"8.57.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-config-standard","versions":[{"version":"16.0.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-import-resolver-babel-module","versions":[{"version":"5.3.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-import","versions":[{"version":"2.25.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-jest","versions":[{"version":"25.3.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-lodash","versions":[{"version":"7.4.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-node","versions":[{"version":"11.1.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-promise","versions":[{"version":"5.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-react","versions":[{"version":"7.27.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-standard","versions":[{"version":"5.0.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"execa","versions":[{"version":"5.1.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"folder-hash","versions":[{"version":"4.0.4","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"fs-extra","versions":[{"version":"11.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/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-stream","versions":[{"version":"3.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"get-yarn-workspaces","versions":[{"version":"1.0.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"git-cz","versions":[{"version":"1.7.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"github-actions-wac","versions":[{"version":"1.4.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"glob","versions":[{"version":"7.2.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"graphql","versions":[{"version":"15.9.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/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-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"husky","versions":[{"version":"4.2.5","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer","versions":[{"version":"8.2.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]}]}]},{"name":"inquirer-autocomplete-prompt","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer-checkbox-plus-prompt","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer-maxlength-input-prompt","versions":[{"version":"1.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"jest","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/handler-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]}]}]},{"name":"jest-environment-jsdom","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"jest-extended","versions":[{"version":"4.0.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"lerna","versions":[{"version":"8.1.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"lint-staged","versions":[{"version":"15.2.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"listr","versions":[{"version":"0.14.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"load-json-file","versions":[{"version":"6.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"lodash","versions":[{"version":"4.17.21","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["dependencies"]},{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/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-mailer/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service-aws/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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/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/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/packages/validation/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"longest","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"minimatch","versions":[{"version":"5.1.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]}]}]},{"name":"nanoid","versions":[{"version":"3.3.8","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"node-fetch","versions":[{"version":"2.6.7","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]},{"file":"/packages/api-wcp/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/handler-logs/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/packages/wcp/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"pm2","versions":[{"version":"5.4.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"prettier","versions":[{"version":"2.8.8","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/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-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/react-properties/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"semver","versions":[{"version":"7.6.3","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"ts-expect","versions":[{"version":"1.3.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"ts-jest","versions":[{"version":"29.1.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"ts-node","versions":[{"version":"10.9.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["devDependencies"]}]}]},{"name":"typescript","versions":[{"version":"4.9.5","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-es/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-import-export/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/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-auth0/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-utils/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["devDependencies"]},{"file":"/packages/app-website/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/di-container/package.json","types":["devDependencies"]},{"file":"/packages/error/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-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/ioc/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pubsub/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]},{"file":"/packages/react-router/package.json","types":["devDependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/packages/ui-composer/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":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"typescript-transform-paths","versions":[{"version":"3.4.6","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"verdaccio","versions":[{"version":"5.29.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"write-json-file","versions":[{"version":"4.3.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"yargs","versions":[{"version":"17.7.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"systeminformation","versions":[{"version":"5.23.18","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@emotion/react","versions":[{"version":"11.10.8","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-theme/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"braces","versions":[{"version":"3.0.3","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@types/webpack","versions":[{"version":"5.28.0","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"browserify-sign","versions":[{"version":"4.2.2","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"react","versions":[{"version":"18.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["peerDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme/package.json","types":["peerDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/admin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/pbElement/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/form/package.json","types":["peerDependencies"]},{"file":"/packages/i18n/package.json","types":["peerDependencies"]},{"file":"/packages/i18n-react/package.json","types":["peerDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/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/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies","peerDependencies"]},{"file":"/packages/theme/package.json","types":["peerDependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]},{"file":"/packages/ui-composer/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"react-dom","versions":[{"version":"18.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/react-composition/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]},{"file":"/packages/ui-composer/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"follow-redirects","versions":[{"version":"1.15.6","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"crypto-js","versions":[{"version":"4.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/api-mailer/package.json","types":["dependencies"]}]}]},{"name":"ip","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"tar","versions":[{"version":"6.2.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"express","versions":[{"version":"4.21.2","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"ejs","versions":[{"version":"3.1.10","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"postcss","versions":[{"version":"8.4.35","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@types/eslint","versions":[{"version":"8.2.1","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"http-proxy-middleware","versions":[{"version":"2.0.7","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"xml2js","versions":[{"version":"0.6.2","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"react-dnd","versions":[{"version":"16.0.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-dnd-html5-backend","versions":[{"version":"16.0.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"rimraf","versions":[{"version":"6.0.1","files":[{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-es/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/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-auth0/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["devDependencies"]},{"file":"/packages/app-website/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/error/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-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pubsub/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]},{"file":"/packages/react-router/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/packages/ui-composer/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"]}]}]},{"name":"ttypescript","versions":[{"version":"1.5.15","files":[{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-es/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-import-export/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"file":"/packages/app-aco/package.json","types":["devDependencies"]},{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-auth0/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-utils/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["devDependencies"]},{"file":"/packages/app-website/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/di-container/package.json","types":["devDependencies"]},{"file":"/packages/error/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/ioc/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pubsub/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/react-router/package.json","types":["devDependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/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"]}]}]},{"name":"apollo-graphql","versions":[{"version":"0.9.5","files":[{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]}]}]},{"name":"jest-dynalite","versions":[{"version":"3.6.1","files":[{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"dataloader","versions":[{"version":"2.2.2","files":[{"file":"/packages/api-admin-users/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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-tenancy/package.json","types":["dependencies"]}]}]},{"name":"md5","versions":[{"version":"2.3.0","files":[{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]}]}]},{"name":"zod","versions":[{"version":"3.23.8","files":[{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["dependencies"]},{"file":"/packages/api-log/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-websockets/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/ioc/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["peerDependencies"]}]}]},{"name":"@types/jsonwebtoken","versions":[{"version":"9.0.2","files":[{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]}]}]},{"name":"@types/md5","versions":[{"version":"2.3.2","files":[{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]}]}]},{"name":"dayjs","versions":[{"version":"1.11.13","files":[{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"jsonwebtoken","versions":[{"version":"9.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]}]}]},{"name":"jwk-to-pem","versions":[{"version":"2.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]}]}]},{"name":"@types/jwk-to-pem","versions":[{"version":"2.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]}]}]},{"name":"@types/node-fetch","versions":[{"version":"2.6.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]}]}]},{"name":"p-retry","versions":[{"version":"4.6.2","files":[{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"@elastic/elasticsearch","versions":[{"version":"7.12.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"aws-elasticsearch-connector","versions":[{"version":"9.2.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]}]}]},{"name":"elastic-ts","versions":[{"version":"0.12.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]}]}]},{"name":"type-fest","versions":[{"version":"3.13.1","files":[{"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"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["devDependencies"]}]}]},{"name":"cache-control-parser","versions":[{"version":"2.0.6","files":[{"file":"/packages/api-file-manager/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"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"@types/sharp","versions":[{"version":"0.32.0","files":[{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]}]}]},{"name":"jsonpack","versions":[{"version":"1.1.5","files":[{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]}]}]},{"name":"form-data","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]}]}]},{"name":"mime","versions":[{"version":"3.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]}]}]},{"name":"p-map","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"p-reduce","versions":[{"version":"2.1.0","files":[{"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.3","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"sharp","versions":[{"version":"0.32.6","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"date-fns","versions":[{"version":"2.22.1","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"json2csv","versions":[{"version":"4.5.4","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"slugify","versions":[{"version":"1.6.6","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@types/json2csv","versions":[{"version":"4.5.1","files":[{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"csvtojson","versions":[{"version":"2.0.10","files":[{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["devDependencies"]}]}]},{"name":"@graphql-tools/merge","versions":[{"version":"9.0.4","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/schema","versions":[{"version":"10.0.6","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"dot-prop","versions":[{"version":"6.0.1","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"graphql-tag","versions":[{"version":"2.12.6","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-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"jsdom","versions":[{"version":"25.0.1","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]}]}]},{"name":"pluralize","versions":[{"version":"8.0.0","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]}]}]},{"name":"@types/babel__code-frame","versions":[{"version":"7.0.6","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":"@faker-js/faker","versions":[{"version":"9.3.0","files":[{"file":"/packages/api-headless-cms-es-tasks/package.json","types":["devDependencies"]}]}]},{"name":"@smithy/node-http-handler","versions":[{"version":"2.1.6","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"archiver","versions":[{"version":"7.0.1","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"bytes","versions":[{"version":"3.1.2","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"uniqid","versions":[{"version":"5.4.0","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/plugins/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"unzipper","versions":[{"version":"0.12.3","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/adm-zip","versions":[{"version":"0.5.5","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@types/unzipper","versions":[{"version":"0.10.10","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"adm-zip","versions":[{"version":"0.5.14","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"aws-sdk-client-mock","versions":[{"version":"4.1.0","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"accept-language-parser","versions":[{"version":"1.5.0","files":[{"file":"/packages/api-i18n/package.json","types":["dependencies"]}]}]},{"name":"i18n-locales","versions":[{"version":"0.0.5","files":[{"file":"/packages/api-i18n/package.json","types":["dependencies"]}]}]},{"name":"@types/accept-language-parser","versions":[{"version":"1.5.3","files":[{"file":"/packages/api-i18n/package.json","types":["devDependencies"]}]}]},{"name":"nodemailer","versions":[{"version":"6.9.16","files":[{"file":"/packages/api-mailer/package.json","types":["dependencies"]}]}]},{"name":"@types/crypto-js","versions":[{"version":"4.2.2","files":[{"file":"/packages/api-mailer/package.json","types":["devDependencies"]}]}]},{"name":"@types/nodemailer","versions":[{"version":"6.4.17","files":[{"file":"/packages/api-mailer/package.json","types":["devDependencies"]}]}]},{"name":"extract-zip","versions":[{"version":"1.6.7","files":[{"file":"/packages/api-page-builder/package.json","types":["dependencies"]}]}]},{"name":"stream","versions":[{"version":"0.0.3","files":[{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/extract-zip","versions":[{"version":"1.6.2","files":[{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/rimraf","versions":[{"version":"3.0.2","files":[{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"dot-prop-immutable","versions":[{"version":"2.1.1","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"yauzl","versions":[{"version":"2.10.0","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/archiver","versions":[{"version":"5.3.1","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@types/yauzl","versions":[{"version":"2.9.2","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@sparticuz/chromium","versions":[{"version":"123.0.1","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml","versions":[{"version":"0.15.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml-noopener","versions":[{"version":"1.0.5","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml-plugin-link-preload","versions":[{"version":"1.0.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"puppeteer-core","versions":[{"version":"23.9.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"srcset","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/aws-helpers/package.json","types":["dependencies"]}]}]},{"name":"@types/object-hash","versions":[{"version":"2.2.1","files":[{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]}]}]},{"name":"@types/puppeteer-core","versions":[{"version":"7.0.4","files":[{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]}]}]},{"name":"deep-equal","versions":[{"version":"2.2.3","files":[{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-hooks","versions":[{"version":"3.1.5","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"@emotion/styled","versions":[{"version":"11.10.6","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/extensions/theme/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-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"apollo-cache-inmemory","versions":[{"version":"1.6.6","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"apollo-client","versions":[{"version":"2.6.10","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"apollo-link","versions":[{"version":"1.2.14","files":[{"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-apw/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/website/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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/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-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"boolean","versions":[{"version":"3.2.0","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"invariant","versions":[{"version":"2.2.4","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-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.2","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"@types/lodash","versions":[{"version":"4.17.13","files":[{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/i18n/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":"@types/warning","versions":[{"version":"3.0.0","files":[{"file":"/packages/app/package.json","types":["devDependencies"]}]}]},{"name":"@material-design-icons/svg","versions":[{"version":"0.14.3","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@material-symbols/svg-400","versions":[{"version":"0.4.1","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@minoru/react-dnd-treeview","versions":[{"version":"3.2.1","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]}]}]},{"name":"mobx","versions":[{"version":"6.9.0","files":[{"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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-utils/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"mobx-react-lite","versions":[{"version":"3.4.3","files":[{"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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"react-hotkeyz","versions":[{"version":"1.0.4","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"store","versions":[{"version":"2.0.12","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-components","versions":[{"version":"3.1.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/editorjs","versions":[{"version":"2.26.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@iconify/json","versions":[{"version":"2.2.142","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@svgr/webpack","versions":[{"version":"6.1.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@types/mime","versions":[{"version":"2.0.3","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-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"downshift","versions":[{"version":"3.1.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]},{"version":"2.1.5","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"emotion","versions":[{"version":"10.0.27","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-theme/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"graphlib","versions":[{"version":"2.1.8","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"is-hotkey","versions":[{"version":"0.2.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"prop-types","versions":[{"version":"15.7.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"react-resizable-panels","versions":[{"version":"2.0.19","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"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-virtualized","versions":[{"version":"9.22.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"reset-css","versions":[{"version":"5.0.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"unicode-emoji-json","versions":[{"version":"0.4.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@emotion/babel-plugin","versions":[{"version":"11.11.0","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/bytes","versions":[{"version":"3.1.4","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-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/store","versions":[{"version":"2.0.2","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@auth0/auth0-react","versions":[{"version":"2.2.4","files":[{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]}]}]},{"name":"react-helmet","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"@aws-amplify/auth","versions":[{"version":"5.1.9","files":[{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-auth-js","versions":[{"version":"5.3.1","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-react","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-signin-widget","versions":[{"version":"5.9.4","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/base","versions":[{"version":"14.2.2","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/provider","versions":[{"version":"14.2.2","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]}]}]},{"name":"@types/react-helmet","versions":[{"version":"6.1.11","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["devDependencies"]},{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-named-asset-import","versions":[{"version":"1.0.0-next.3e165448","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]}]}]},{"name":"@emotion/is-prop-valid","versions":[{"version":"1.1.1","files":[{"file":"/packages/app-apw/package.json","types":["dependencies"]}]}]},{"name":"react-spinner-material","versions":[{"version":"1.1.4","files":[{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-common","versions":[{"version":"3.1.4","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"dataurl-to-blob","versions":[{"version":"0.0.1","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"react-butterfiles","versions":[{"version":"1.3.3","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-custom-scrollbars","versions":[{"version":"4.2.1","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-lazy-load","versions":[{"version":"3.1.14","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/core","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/sortable","versions":[{"version":"8.0.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/utilities","versions":[{"version":"3.2.2","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"dnd-core","versions":[{"version":"16.0.1","files":[{"file":"/packages/app-form-builder/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-page-builder/package.json","types":["dependencies"]}]}]},{"name":"history","versions":[{"version":"5.3.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]}]}]},{"name":"react-google-recaptcha","versions":[{"version":"1.1.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"@types/gtag.js","versions":[{"version":"0.0.20","files":[{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-google-recaptcha","versions":[{"version":"1.1.2","files":[{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"load-script","versions":[{"version":"1.0.0","files":[{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-common-types","versions":[{"version":"0.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-svg-core","versions":[{"version":"1.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-brands-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-regular-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-solid-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/react-fontawesome","versions":[{"version":"0.1.17","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@lexical/utils","versions":[{"version":"0.16.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"raw.macro","versions":[{"version":"0.4.2","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"use-deep-compare-effect","versions":[{"version":"1.6.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@types/medium-editor","versions":[{"version":"5.0.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"aos","versions":[{"version":"2.3.4","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"dnd-kit-sortable-tree","versions":[{"version":"0.1.73","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"medium-editor","versions":[{"version":"5.23.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"pako","versions":[{"version":"2.1.0","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"platform","versions":[{"version":"1.3.5","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-color","versions":[{"version":"2.19.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-images","versions":[{"version":"0.5.19","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"react-in-viewport","versions":[{"version":"1.0.0-alpha.30","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-sortable","versions":[{"version":"2.0.0","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"recoil","versions":[{"version":"0.7.7","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"swiper","versions":[{"version":"9.3.2","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"@types/aos","versions":[{"version":"3.0.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/pako","versions":[{"version":"2.0.3","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/platform","versions":[{"version":"1.3.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-images","versions":[{"version":"0.5.3","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-virtualized","versions":[{"version":"9.21.16","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/resize-observer-browser","versions":[{"version":"0.1.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"facepaint","versions":[{"version":"1.2.1","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]}]}]},{"name":"@types/facepaint","versions":[{"version":"1.2.2","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]}]}]},{"name":"react-columned","versions":[{"version":"1.1.3","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"crypto-hash","versions":[{"version":"3.0.0","files":[{"file":"/packages/app-record-locking/package.json","types":["dependencies"]}]}]},{"name":"apollo-link-batch-http","versions":[{"version":"1.2.14","files":[{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"@emotion/cache","versions":[{"version":"11.10.5","files":[{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"@types/aws-lambda","versions":[{"version":"8.10.145","files":[{"file":"/packages/aws-helpers/package.json","types":["dependencies"]},{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"cheerio","versions":[{"version":"1.0.0-rc.10","files":[{"file":"/packages/aws-helpers/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-apigatewaymanagementapi","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudfront","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-events","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-logs","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cognito-identity-provider","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb-streams","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-eventbridge","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iam","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iot","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-lambda","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-s3","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sfn","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sqs","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sts","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/credential-providers","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-dynamodb","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-storage","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-presigned-post","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-request-presigner","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/util-dynamodb","versions":[{"version":"3.709.0","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":["dependencies"]}]}]},{"name":"camelcase","versions":[{"version":"6.3.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"dotenv","versions":[{"version":"8.2.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["devDependencies"]}]}]},{"name":"fast-glob","versions":[{"version":"3.2.7","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"find-up","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"graphql-request","versions":[{"version":"3.7.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]},{"file":"/apps/api/graphql/package.json","types":["devDependencies"]}]}]},{"name":"is-ci","versions":[{"version":"3.0.1","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"ncp","versions":[{"version":"2.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"open","versions":[{"version":"8.4.2","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]}]}]},{"name":"pirates","versions":[{"version":"4.0.6","files":[{"file":"/packages/cli/package.json","types":["dependencies"]}]}]},{"name":"ts-morph","versions":[{"version":"11.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]}]}]},{"name":"body-parser","versions":[{"version":"1.20.3","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"exit-hook","versions":[{"version":"4.0.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"humanize-duration","versions":[{"version":"3.32.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"localtunnel","versions":[{"version":"2.0.2","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"log-update","versions":[{"version":"4.0.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"mqtt","versions":[{"version":"5.10.3","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"node-notifier","versions":[{"version":"10.0.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"ora","versions":[{"version":"4.1.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"replace-in-path","versions":[{"version":"1.1.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]}]}]},{"name":"case","versions":[{"version":"1.6.3","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]}]}]},{"name":"validate-npm-package-name","versions":[{"version":"3.0.0","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"@types/inquirer","versions":[{"version":"8.2.10","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"terminal-link","versions":[{"version":"2.1.1","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]}]}]},{"name":"@types/ncp","versions":[{"version":"2.0.4","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"@types/pluralize","versions":[{"version":"0.0.29","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"js-base64","versions":[{"version":"3.7.7","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]}]}]},{"name":"octokit","versions":[{"version":"3.1.2","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]}]}]},{"name":"@types/validate-npm-package-name","versions":[{"version":"3.0.3","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"core-js","versions":[{"version":"3.0.1","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"cross-fetch","versions":[{"version":"3.0.4","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"regenerator-runtime","versions":[{"version":"0.13.5","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"indent-string","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]}]}]},{"name":"archy","versions":[{"version":"1.0.0","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"color","versions":[{"version":"4.2.3","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"multimatch","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"js-yaml","versions":[{"version":"3.14.1","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"os","versions":[{"version":"0.1.1","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"uuid","versions":[{"version":"8.3.2","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]}]}]},{"name":"yesno","versions":[{"version":"0.4.0","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/delimiter","versions":[{"version":"1.2.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/list","versions":[{"version":"1.6.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/quote","versions":[{"version":"2.4.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/underline","versions":[{"version":"1.0.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"theme","versions":[{"version":"1.0.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"tslib","versions":[{"version":"2.8.1","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"react-hamburger-menu","versions":[{"version":"1.1.1","files":[{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"@types/react-hamburger-menu","versions":[{"version":"0.0.4","files":[{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["devDependencies"]},{"file":"/extensions/theme/package.json","types":["devDependencies"]}]}]},{"name":"merge","versions":[{"version":"2.0.0","files":[{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"center-align","versions":[{"version":"1.0.1","files":[{"file":"/packages/data-migration/package.json","types":["dependencies"]}]}]},{"name":"pino-pretty","versions":[{"version":"9.4.0","files":[{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"@types/center-align","versions":[{"version":"1.0.0","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]}]}]},{"name":"@types/semver","versions":[{"version":"7.3.4","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]}]}]},{"name":"jest-mock-console","versions":[{"version":"2.0.0","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]}]}]},{"name":"dynamodb-toolbox","versions":[{"version":"0.9.2","files":[{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"fuse.js","versions":[{"version":"7.0.0","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":"reflect-metadata","versions":[{"version":"0.2.2","files":[{"file":"/packages/di-container/package.json","types":["dependencies"]},{"file":"/packages/ioc/package.json","types":["dependencies"]}]}]},{"name":"@types/uniqid","versions":[{"version":"5.3.2","files":[{"file":"/packages/feature-flags/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/react","versions":[{"version":"15.0.7","files":[{"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"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/user-event","versions":[{"version":"14.5.2","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@types/invariant","versions":[{"version":"2.2.35","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@fastify/compress","versions":[{"version":"6.2.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]}]}]},{"name":"@fastify/cookie","versions":[{"version":"8.3.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]}]}]},{"name":"fastify","versions":[{"version":"4.15.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]},{"file":"/packages/handler-aws/package.json","types":["dependencies"]}]}]},{"name":"@fastify/aws-lambda","versions":[{"version":"3.1.3","files":[{"file":"/packages/handler-aws/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/resolvers-composition","versions":[{"version":"7.0.1","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/utils","versions":[{"version":"10.3.1","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"graphql-scalars","versions":[{"version":"1.12.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":"2.3.3","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"short-hash","versions":[{"version":"1.0.0","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"@types/accounting","versions":[{"version":"0.4.2","files":[{"file":"/packages/i18n/package.json","types":["devDependencies"]}]}]},{"name":"inversify","versions":[{"version":"6.1.6","files":[{"file":"/packages/ioc/package.json","types":["dependencies"]}]}]},{"name":"@lexical/headless","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"@lexical/html","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"lexical","versions":[{"version":"0.16.1","files":[{"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":"@types/jsdom","versions":[{"version":"21.1.6","files":[{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]}]}]},{"name":"@lexical/code","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/history","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/react","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/rich-text","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/selection","versions":[{"version":"0.16.1","files":[{"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.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]}]}]},{"name":"@types/react-color","versions":[{"version":"2.17.11","files":[{"file":"/packages/lexical-editor-actions/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@lexical/hashtag","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/list","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/mark","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/overflow","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@types/prismjs","versions":[{"version":"1.26.4","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"react-style-object-to-css","versions":[{"version":"1.1.2","files":[{"file":"/packages/lexical-theme/package.json","types":["dependencies"]}]}]},{"name":"pino","versions":[{"version":"8.21.0","files":[{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"@pmmmwh/react-refresh-webpack-plugin","versions":[{"version":"0.5.15","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@types/webpack-env","versions":[{"version":"1.18.5","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"assert-browserify","versions":[{"version":"2.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"buffer","versions":[{"version":"6.0.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"case-sensitive-paths-webpack-plugin","versions":[{"version":"2.4.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"crypto-browserify","versions":[{"version":"3.12.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"css-loader","versions":[{"version":"6.10.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"css-minimizer-webpack-plugin","versions":[{"version":"7.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-config-react-app","versions":[{"version":"6.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-webpack-plugin","versions":[{"version":"4.2.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"file-loader","versions":[{"version":"6.2.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"fork-ts-checker-webpack-plugin","versions":[{"version":"9.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"html-webpack-plugin","versions":[{"version":"5.6.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"mini-css-extract-plugin","versions":[{"version":"2.4.5","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"null-loader","versions":[{"version":"4.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"os-browserify","versions":[{"version":"0.3.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"path-browserify","versions":[{"version":"1.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-flexbugs-fixes","versions":[{"version":"5.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-loader","versions":[{"version":"6.2.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-normalize","versions":[{"version":"10.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-preset-env","versions":[{"version":"9.4.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"process","versions":[{"version":"0.11.10","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"raw-loader","versions":[{"version":"4.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"react-dev-utils","versions":[{"version":"12.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"react-refresh","versions":[{"version":"0.11.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"read-json-sync","versions":[{"version":"2.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"resolve","versions":[{"version":"1.22.8","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"resolve-url-loader","versions":[{"version":"5.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"sass","versions":[{"version":"1.44.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"sass-loader","versions":[{"version":"12.3.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"scheduler","versions":[{"version":"0.19.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"source-map-loader","versions":[{"version":"1.1.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"source-map-support","versions":[{"version":"0.5.21","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"style-loader","versions":[{"version":"3.3.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"terser-webpack-plugin","versions":[{"version":"5.3.10","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"url","versions":[{"version":"0.11.4","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"url-loader","versions":[{"version":"4.1.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"vm-browserify","versions":[{"version":"1.1.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpack","versions":[{"version":"5.97.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"webpack-dev-server","versions":[{"version":"5.1.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpack-manifest-plugin","versions":[{"version":"5.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpackbar","versions":[{"version":"7.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"listr2","versions":[{"version":"5.0.8","files":[{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/pulumi","versions":[{"version":"3.142.0","files":[{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/aws","versions":[{"version":"6.64.0","files":[{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/random","versions":[{"version":"4.16.7","files":[{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]}]}]},{"name":"decompress","versions":[{"version":"4.2.1","files":[{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"identity-obj-proxy","versions":[{"version":"3.0.0","files":[{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"sanitize-html","versions":[{"version":"2.12.1","files":[{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]}]}]},{"name":"@types/sanitize-html","versions":[{"version":"2.9.0","files":[{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]}]}]},{"name":"react-router-dom","versions":[{"version":"6.3.0","files":[{"file":"/packages/react-router/package.json","types":["dependencies"]}]}]},{"name":"object-merge-advanced","versions":[{"version":"12.1.0","files":[{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"object-sizeof","versions":[{"version":"2.6.4","files":[{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"jsesc","versions":[{"version":"3.0.2","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"strip-ansi","versions":[{"version":"6.0.1","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"wts-client","versions":[{"version":"1.0.1","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/button","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/checkbox","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/chip","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/data-table","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/dialog","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/drawer","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/elevation","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/fab","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/grid","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/icon-button","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/list","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/menu","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/radio","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/ripple","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/select","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/slider","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/snackbar","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/switch","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/tabs","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/textfield","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/top-app-bar","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/touch-target","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/typography","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@tanstack/react-table","versions":[{"version":"8.5.22","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"brace","versions":[{"version":"0.11.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"cropperjs","versions":[{"version":"1.4.3","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"keycode","versions":[{"version":"2.2.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"material-components-web","versions":[{"version":"14.0.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"nprogress","versions":[{"version":"0.2.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"nuka-carousel","versions":[{"version":"4.7.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"rc-tooltip","versions":[{"version":"5.3.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-ace","versions":[{"version":"6.1.4","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-loading-skeleton","versions":[{"version":"3.1.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"timeago-react","versions":[{"version":"3.0.6","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@types/nprogress","versions":[{"version":"0.2.0","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-custom-scrollbars","versions":[{"version":"4.0.10","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-transition-group","versions":[{"version":"4.4.4","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"p-wait-for","versions":[{"version":"4.1.0","files":[{"file":"/packages/ui-composer/package.json","types":["dependencies"]}]}]},{"name":"mdbid","versions":[{"version":"1.0.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"nanoid-dictionary","versions":[{"version":"4.3.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"isnumeric","versions":[{"version":"0.3.3","files":[{"file":"/packages/validation/package.json","types":["dependencies"]}]}]},{"name":"@4tw/cypress-drag-drop","versions":[{"version":"1.4.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/cypress","versions":[{"version":"10.0.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"amazon-cognito-identity-js","versions":[{"version":"4.5.3","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress","versions":[{"version":"13.16.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":"2.7.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress-wait-until","versions":[{"version":"1.7.1","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"del","versions":[{"version":"6.0.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"source-map-explorer","versions":[{"version":"2.5.3","files":[{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"@types/folder-hash","versions":[{"version":"4.0.4","files":[{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]}]}]},{"name":"@types/yargs","versions":[{"version":"17.0.8","files":[{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]}]}]}]} +{"dependencies":[{"name":"@apollo/react-common","version":"3.1.4","files":["/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@apollo/react-components","version":"3.1.5","files":["/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"@apollo/react-hooks","version":"3.1.5","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"@auth0/auth0-react","version":"2.2.4","files":["/packages/app-admin-auth0/package.json"]},{"name":"@aws-amplify/auth","version":"5.1.9","files":["/packages/app-admin-cognito/package.json","/packages/app-cognito-authenticator/package.json"]},{"name":"@aws-sdk/client-apigatewaymanagementapi","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudfront","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-events","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cloudwatch-logs","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-cognito-identity-provider","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-dynamodb-streams","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-eventbridge","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iam","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-iot","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-lambda","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-s3","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sfn","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sqs","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/client-sts","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/credential-providers","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/lib-storage","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-presigned-post","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/s3-request-presigner","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@aws-sdk/util-dynamodb","version":"3.709.0","files":["/packages/aws-sdk/package.json"]},{"name":"@babel/cli","version":"7.26.4","files":["/packages/project-utils/package.json"]},{"name":"@babel/code-frame","version":"7.26.2","files":["/packages/api-headless-cms/package.json"]},{"name":"@babel/core","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-class-properties","version":"7.18.6","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-object-rest-spread","version":"7.20.7","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-proposal-throw-expressions","version":"7.25.9","files":["/packages/project-utils/package.json"]},{"name":"@babel/plugin-syntax-object-rest-spread","version":"7.8.3","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-env","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-react","version":"7.26.3","files":["/packages/project-utils/package.json"]},{"name":"@babel/preset-typescript","version":"7.26.0","files":["/packages/project-utils/package.json"]},{"name":"@babel/runtime","version":"7.26.0","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/project-utils/package.json"]},{"name":"@dnd-kit/core","version":"6.1.0","files":["/packages/app-form-builder/package.json"]},{"name":"@dnd-kit/sortable","version":"8.0.0","files":["/packages/app-form-builder/package.json"]},{"name":"@dnd-kit/utilities","version":"3.2.2","files":["/packages/app-form-builder/package.json"]},{"name":"@editorjs/delimiter","version":"1.2.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/editorjs","version":"2.26.5","files":["/packages/app-admin/package.json","/packages/app-form-builder/package.json","/packages/react-rich-text-renderer/package.json","/packages/ui/package.json"]},{"name":"@editorjs/list","version":"1.6.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/quote","version":"2.4.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@editorjs/underline","version":"1.0.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"@elastic/elasticsearch","version":"7.12.0","files":["/packages/api-elasticsearch/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/data-migration/package.json","/packages/migrations/package.json"]},{"name":"@emotion/cache","version":"11.10.5","files":["/packages/app-website/package.json"]},{"name":"@emotion/is-prop-valid","version":"1.1.1","files":["/packages/app-apw/package.json"]},{"name":"@emotion/react","version":"11.10.8","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor/package.json","/packages/lexical-theme/package.json","/packages/theme/package.json","/packages/ui/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"@emotion/styled","version":"11.10.6","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/package.json","/packages/ui/package.json","/extensions/theme/package.json"]},{"name":"@fastify/aws-lambda","version":"3.1.3","files":["/packages/handler-aws/package.json"]},{"name":"@fastify/compress","version":"6.2.0","files":["/packages/handler/package.json"]},{"name":"@fastify/cookie","version":"8.3.0","files":["/packages/handler/package.json"]},{"name":"@fortawesome/fontawesome-common-types","version":"0.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/fontawesome-svg-core","version":"1.3.0","files":["/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-brands-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-regular-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/free-solid-svg-icons","version":"6.0.0","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@fortawesome/react-fontawesome","version":"0.1.17","files":["/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"@graphql-tools/merge","version":"9.0.4","files":["/packages/api-headless-cms/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/resolvers-composition","version":"7.0.1","files":["/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/schema","version":"10.0.6","files":["/packages/api-headless-cms/package.json","/packages/handler-graphql/package.json"]},{"name":"@graphql-tools/utils","version":"10.3.1","files":["/packages/handler-graphql/package.json"]},{"name":"@iconify/json","version":"2.2.142","files":["/packages/app-admin/package.json"]},{"name":"@lexical/code","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/hashtag","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/headless","version":"0.16.1","files":["/packages/lexical-converter/package.json"]},{"name":"@lexical/history","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/html","version":"0.16.1","files":["/packages/lexical-converter/package.json"]},{"name":"@lexical/list","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/mark","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/overflow","version":"0.16.1","files":["/packages/lexical-nodes/package.json"]},{"name":"@lexical/react","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/rich-text","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/selection","version":"0.16.1","files":["/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-nodes/package.json"]},{"name":"@lexical/text","version":"0.16.1","files":["/packages/lexical-editor/package.json"]},{"name":"@lexical/utils","version":"0.16.1","files":["/packages/app-headless-cms/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-pb-element/package.json","/packages/lexical-nodes/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.3","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-trash-bin/package.json","/packages/lexical-editor-pb-element/package.json","/packages/ui/package.json"]},{"name":"@material-symbols/svg-400","version":"0.4.1","files":["/packages/app-aco/package.json","/packages/app-form-builder/package.json"]},{"name":"@minoru/react-dnd-treeview","version":"3.2.1","files":["/packages/app-aco/package.json"]},{"name":"@okta/okta-auth-js","version":"5.3.1","files":["/packages/app-admin-okta/package.json"]},{"name":"@okta/okta-react","version":"6.1.0","files":["/packages/app-admin-okta/package.json"]},{"name":"@okta/okta-signin-widget","version":"5.9.4","files":["/packages/app-admin-okta/package.json"]},{"name":"@pmmmwh/react-refresh-webpack-plugin","version":"0.5.15","files":["/packages/project-utils/package.json"]},{"name":"@pulumi/aws","version":"6.64.0","files":["/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"@pulumi/pulumi","version":"3.142.0","files":["/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"@pulumi/random","version":"4.16.7","files":["/packages/pulumi-aws/package.json"]},{"name":"@rmwc/base","version":"14.2.2","files":["/packages/app-admin-rmwc/package.json"]},{"name":"@rmwc/button","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/checkbox","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/chip","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/data-table","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/dialog","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/drawer","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/elevation","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/fab","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/grid","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/icon-button","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/list","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/menu","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/provider","version":"14.2.2","files":["/packages/app-admin-rmwc/package.json"]},{"name":"@rmwc/radio","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/ripple","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/select","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/slider","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/snackbar","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/switch","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/tabs","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/textfield","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/top-app-bar","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/touch-target","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@rmwc/typography","version":"14.2.2","files":["/packages/ui/package.json"]},{"name":"@smithy/node-http-handler","version":"2.1.6","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"@sparticuz/chromium","version":"123.0.1","files":["/packages/api-prerendering-service/package.json"]},{"name":"@svgr/webpack","version":"6.1.1","files":["/packages/app-admin/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/project-utils/package.json","/packages/ui/package.json"]},{"name":"@tanstack/react-table","version":"8.5.22","files":["/packages/ui/package.json"]},{"name":"@types/aws-lambda","version":"8.10.145","files":["/packages/aws-helpers/package.json","/packages/aws-sdk/package.json"]},{"name":"@types/hoist-non-react-statics","version":"3.3.5","files":["/package.json"]},{"name":"@types/medium-editor","version":"5.0.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/mime","version":"2.0.3","files":["/packages/app-admin/package.json"]},{"name":"@types/prismjs","version":"1.26.4","files":["/packages/lexical-nodes/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/react-rich-text-renderer/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"@types/webpack-env","version":"1.18.5","files":["/packages/project-utils/package.json"]},{"name":"accept-language-parser","version":"1.5.0","files":["/packages/api-i18n/package.json"]},{"name":"accounting","version":"0.4.1","files":["/packages/i18n/package.json"]},{"name":"aos","version":"2.3.4","files":["/packages/app-page-builder/package.json"]},{"name":"apollo-cache","version":"1.3.5","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-cache-inmemory","version":"1.6.6","files":["/packages/app/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-client","version":"2.6.10","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/react-router/package.json","/apps/website/package.json"]},{"name":"apollo-link","version":"1.2.14","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/website/package.json"]},{"name":"apollo-link-batch-http","version":"1.2.14","files":["/packages/app-serverless-cms/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"apollo-link-context","version":"1.0.20","files":["/packages/app/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-graphql-playground/package.json","/packages/app-i18n/package.json"]},{"name":"apollo-link-error","version":"1.1.13","files":["/packages/app/package.json"]},{"name":"apollo-link-http-common","version":"0.2.16","files":["/packages/app/package.json"]},{"name":"apollo-utilities","version":"1.3.4","files":["/packages/app/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"archiver","version":"7.0.1","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"archy","version":"1.0.0","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"assert-browserify","version":"2.0.0","files":["/packages/project-utils/package.json"]},{"name":"aws-elasticsearch-connector","version":"9.2.0","files":["/packages/api-elasticsearch/package.json"]},{"name":"aws-lambda","version":"1.0.7","files":["/packages/aws-sdk/package.json"]},{"name":"babel-loader","version":"9.2.1","files":["/packages/project-utils/package.json"]},{"name":"body-parser","version":"1.20.3","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"boolean","version":"3.2.0","files":["/packages/app/package.json","/packages/cli/package.json","/packages/handler-graphql/package.json"]},{"name":"brace","version":"0.11.1","files":["/packages/ui/package.json"]},{"name":"buffer","version":"6.0.3","files":["/packages/project-utils/package.json"]},{"name":"bytes","version":"3.1.2","files":["/packages/api-headless-cms-import-export/package.json","/packages/app/package.json","/packages/app-file-manager/package.json"]},{"name":"cache-control-parser","version":"2.0.6","files":["/packages/api-file-manager/package.json"]},{"name":"camelcase","version":"6.3.0","files":["/packages/cli/package.json","/packages/project-utils/package.json"]},{"name":"case","version":"1.6.3","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"case-sensitive-paths-webpack-plugin","version":"2.4.0","files":["/packages/project-utils/package.json"]},{"name":"center-align","version":"1.0.1","files":["/packages/data-migration/package.json"]},{"name":"chalk","version":"4.1.2","files":["/packages/aws-layers/package.json","/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/data-migration/package.json","/packages/project-utils/package.json","/packages/serverless-cms-aws/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"cheerio","version":"1.0.0-rc.10","files":["/packages/aws-helpers/package.json"]},{"name":"classnames","version":"2.5.1","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/react-rich-text-renderer/package.json","/packages/ui/package.json"]},{"name":"color","version":"4.2.3","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"core-js","version":"3.0.1","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"cropperjs","version":"1.4.3","files":["/packages/ui/package.json"]},{"name":"cross-fetch","version":"3.0.4","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"crypto-browserify","version":"3.12.0","files":["/packages/project-utils/package.json"]},{"name":"crypto-hash","version":"3.0.0","files":["/packages/app-record-locking/package.json"]},{"name":"crypto-js","version":"4.2.0","files":["/packages/api-mailer/package.json"]},{"name":"css-loader","version":"6.10.0","files":["/packages/project-utils/package.json"]},{"name":"css-minimizer-webpack-plugin","version":"7.0.0","files":["/packages/project-utils/package.json"]},{"name":"dataloader","version":"2.2.2","files":["/packages/api-admin-users/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-tenancy/package.json"]},{"name":"dataurl-to-blob","version":"0.0.1","files":["/packages/app-file-manager/package.json"]},{"name":"date-fns","version":"2.22.1","files":["/packages/api-form-builder/package.json","/packages/app-audit-logs/package.json","/packages/db-dynamodb/package.json"]},{"name":"dayjs","version":"1.11.13","files":["/packages/api-apw/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json"]},{"name":"decompress","version":"4.2.1","files":["/packages/pulumi-sdk/package.json"]},{"name":"deep-equal","version":"2.2.3","files":["/packages/api-security/package.json","/packages/api-security-cognito/package.json","/packages/tasks/package.json"]},{"name":"dnd-core","version":"16.0.1","files":["/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-page-builder/package.json"]},{"name":"dnd-kit-sortable-tree","version":"0.1.73","files":["/packages/app-page-builder/package.json"]},{"name":"dot-prop","version":"6.0.1","files":["/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/db-dynamodb/package.json"]},{"name":"dot-prop-immutable","version":"2.1.1","files":["/packages/api-page-builder-import-export/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/ui/package.json"]},{"name":"dotenv","version":"8.2.0","files":["/packages/cli/package.json"]},{"name":"downshift","version":"3.1.2","files":["/packages/app-admin/package.json"]},{"name":"downshift","version":"2.1.5","files":["/packages/ui/package.json"]},{"name":"dynamodb-toolbox","version":"0.9.2","files":["/packages/db-dynamodb/package.json"]},{"name":"elastic-ts","version":"0.12.0","files":["/packages/api-elasticsearch/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-page-builder-so-ddb-es/package.json"]},{"name":"emotion","version":"10.0.27","files":["/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n-content/package.json","/packages/app-page-builder/package.json","/packages/app-security-access-management/package.json","/packages/app-tenant-manager/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-theme/package.json","/packages/ui/package.json"]},{"name":"eslint","version":"8.57.1","files":["/packages/project-utils/package.json"]},{"name":"eslint-config-react-app","version":"6.0.0","files":["/packages/project-utils/package.json"]},{"name":"eslint-webpack-plugin","version":"4.2.0","files":["/packages/project-utils/package.json"]},{"name":"execa","version":"5.1.1","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/cli-plugin-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/migrations/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json"]},{"name":"exit-hook","version":"4.0.0","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"express","version":"4.21.2","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"extract-zip","version":"1.6.7","files":["/packages/api-page-builder/package.json"]},{"name":"facepaint","version":"1.2.1","files":["/packages/app-page-builder-elements/package.json"]},{"name":"fast-glob","version":"3.2.7","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cwp-template-aws/package.json","/packages/migrations/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"fastify","version":"4.15.0","files":["/packages/handler/package.json","/packages/handler-aws/package.json"]},{"name":"fecha","version":"2.3.3","files":["/packages/i18n/package.json"]},{"name":"file-loader","version":"6.2.0","files":["/packages/project-utils/package.json"]},{"name":"find-up","version":"5.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/create-webiny-project/package.json","/packages/pulumi/package.json","/packages/serverless-cms-aws/package.json","/scripts/prepublishOnly/package.json"]},{"name":"folder-hash","version":"4.0.4","files":["/scripts/buildPackages/package.json"]},{"name":"fork-ts-checker-webpack-plugin","version":"9.0.2","files":["/packages/project-utils/package.json"]},{"name":"form-data","version":"4.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/pulumi-aws/package.json"]},{"name":"fs-extra","version":"11.2.0","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/cli/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/packages/pulumi-sdk/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"fuse.js","version":"7.0.0","files":["/packages/db-dynamodb/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/packages/cli-plugin-dependencies/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/scripts/prepublishOnly/package.json"]},{"name":"glob","version":"7.2.3","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/project-utils/package.json"]},{"name":"graphlib","version":"2.1.8","files":["/packages/app-admin/package.json","/packages/cli-plugin-workspaces/package.json"]},{"name":"graphql","version":"15.9.0","files":["/packages/api-headless-cms/package.json","/packages/api-i18n-content/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/handler-graphql/package.json","/packages/react-router/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"graphql-request","version":"3.7.0","files":["/packages/cli/package.json"]},{"name":"graphql-scalars","version":"1.12.0","files":["/packages/handler-graphql/package.json"]},{"name":"graphql-tag","version":"2.12.6","files":["/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-record-locking/package.json","/packages/app-security-access-management/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/handler-graphql/package.json"]},{"name":"history","version":"5.3.0","files":["/packages/app-form-builder/package.json","/packages/app-page-builder/package.json","/packages/react-router/package.json"]},{"name":"html-webpack-plugin","version":"5.6.3","files":["/packages/project-utils/package.json"]},{"name":"humanize-duration","version":"3.32.1","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"i18n-locales","version":"0.0.5","files":["/packages/api-i18n/package.json"]},{"name":"indent-string","version":"5.0.0","files":["/packages/cli-plugin-scaffold-react-component/package.json"]},{"name":"inquirer","version":"8.2.6","files":["/packages/cli/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cwp-template-aws/package.json"]},{"name":"invariant","version":"2.2.4","files":["/packages/app/package.json","/packages/app-page-builder/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"inversify","version":"6.1.6","files":["/packages/ioc/package.json"]},{"name":"is-ci","version":"3.0.1","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cwp-template-aws/package.json","/packages/project-utils/package.json","/packages/telemetry/package.json"]},{"name":"is-hotkey","version":"0.2.0","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"isnumeric","version":"0.3.3","files":["/packages/validation/package.json"]},{"name":"js-base64","version":"3.7.7","files":["/packages/cli-plugin-scaffold-ci/package.json"]},{"name":"js-yaml","version":"3.14.1","files":["/packages/create-webiny-project/package.json"]},{"name":"jsdom","version":"25.0.1","files":["/packages/api-headless-cms/package.json"]},{"name":"jsesc","version":"3.0.2","files":["/packages/telemetry/package.json"]},{"name":"json2csv","version":"4.5.4","files":["/packages/api-form-builder/package.json","/packages/app-form-builder/package.json"]},{"name":"jsonpack","version":"1.1.5","files":["/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder/package.json","/packages/migrations/package.json"]},{"name":"jsonwebtoken","version":"9.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json"]},{"name":"jwk-to-pem","version":"2.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json"]},{"name":"keycode","version":"2.2.0","files":["/packages/ui/package.json"]},{"name":"lexical","version":"0.16.1","files":["/packages/lexical-converter/package.json","/packages/lexical-editor/package.json","/packages/lexical-nodes/package.json","/packages/lexical-theme/package.json"]},{"name":"listr","version":"0.14.3","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/create-webiny-project/package.json"]},{"name":"listr2","version":"5.0.8","files":["/scripts/buildPackages/package.json"]},{"name":"load-json-file","version":"6.2.0","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/global-config/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"load-script","version":"1.0.0","files":["/packages/app-graphql-playground/package.json","/packages/ui/package.json"]},{"name":"localtunnel","version":"2.0.2","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"lodash","version":"4.17.21","files":["/packages/api-aco/package.json","/packages/api-admin-users/package.json","/packages/api-apw/package.json","/packages/api-file-manager/package.json","/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-security-access-management/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cwp-template-aws/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/migrations/package.json","/packages/project-utils/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/tasks/package.json","/packages/ui/package.json","/packages/validation/package.json","/scripts/prepublishOnly/package.json"]},{"name":"log-update","version":"4.0.0","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"material-components-web","version":"14.0.0","files":["/packages/ui/package.json"]},{"name":"md5","version":"2.3.0","files":["/packages/api-admin-users/package.json"]},{"name":"mdbid","version":"1.0.0","files":["/packages/utils/package.json"]},{"name":"medium-editor","version":"5.23.3","files":["/packages/app-page-builder/package.json"]},{"name":"mime","version":"3.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/app-file-manager/package.json","/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"mini-css-extract-plugin","version":"2.4.5","files":["/packages/project-utils/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/packages/api-security/package.json","/packages/app/package.json","/packages/app-file-manager/package.json","/packages/app-security/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/data-migration/package.json"]},{"name":"mobx","version":"6.9.0","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-trash-bin/package.json","/packages/app-utils/package.json"]},{"name":"mobx-react-lite","version":"3.4.3","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json","/packages/app-trash-bin/package.json"]},{"name":"mqtt","version":"5.10.3","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"multimatch","version":"5.0.0","files":["/packages/cli-plugin-workspaces/package.json"]},{"name":"nanoid","version":"3.3.8","files":["/packages/app/package.json","/packages/app-page-builder/package.json","/packages/react-properties/package.json","/packages/utils/package.json"]},{"name":"nanoid-dictionary","version":"4.3.0","files":["/packages/utils/package.json"]},{"name":"ncp","version":"2.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"node-fetch","version":"2.6.7","files":["/packages/api-cognito-authenticator/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json","/packages/api-wcp/package.json","/packages/create-webiny-project/package.json","/packages/handler-logs/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/serverless-cms-aws/package.json","/packages/wcp/package.json"]},{"name":"node-notifier","version":"10.0.1","files":["/packages/cli-plugin-deploy-pulumi/package.json"]},{"name":"nodemailer","version":"6.9.16","files":["/packages/api-mailer/package.json"]},{"name":"nprogress","version":"0.2.0","files":["/packages/ui/package.json"]},{"name":"nuka-carousel","version":"4.7.1","files":["/packages/ui/package.json"]},{"name":"null-loader","version":"4.0.1","files":["/packages/project-utils/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-prerendering-service/package.json"]},{"name":"object-merge-advanced","version":"12.1.0","files":["/packages/tasks/package.json"]},{"name":"object-sizeof","version":"2.6.4","files":["/packages/tasks/package.json"]},{"name":"octokit","version":"3.1.2","files":["/packages/cli-plugin-scaffold-ci/package.json"]},{"name":"open","version":"8.4.2","files":["/packages/cli/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cwp-template-aws/package.json"]},{"name":"ora","version":"4.1.1","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"os","version":"0.1.1","files":["/packages/create-webiny-project/package.json"]},{"name":"os-browserify","version":"0.3.0","files":["/packages/project-utils/package.json"]},{"name":"p-map","version":"4.0.0","files":["/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json","/packages/cli-plugin-workspaces/package.json"]},{"name":"p-reduce","version":"2.1.0","files":["/packages/api-file-manager-s3/package.json","/packages/api-headless-cms/package.json"]},{"name":"p-retry","version":"4.6.2","files":["/packages/api-dynamodb-to-elasticsearch/package.json","/packages/app-file-manager-s3/package.json","/packages/cli-plugin-deploy-pulumi/package.json","/packages/create-webiny-project/package.json","/packages/utils/package.json"]},{"name":"p-wait-for","version":"4.1.0","files":["/packages/ui-composer/package.json"]},{"name":"pako","version":"2.1.0","files":["/packages/app-page-builder/package.json"]},{"name":"path-browserify","version":"1.0.1","files":["/packages/project-utils/package.json"]},{"name":"pino-pretty","version":"9.4.0","files":["/packages/data-migration/package.json","/packages/migrations/package.json"]},{"name":"pirates","version":"4.0.6","files":["/packages/cli/package.json"]},{"name":"platform","version":"1.3.5","files":["/packages/app-page-builder/package.json"]},{"name":"pluralize","version":"8.0.0","files":["/packages/api-headless-cms/package.json","/packages/api-prerendering-service/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/migrations/package.json"]},{"name":"postcss-flexbugs-fixes","version":"5.0.2","files":["/packages/project-utils/package.json"]},{"name":"postcss-loader","version":"6.2.1","files":["/packages/project-utils/package.json"]},{"name":"postcss-normalize","version":"10.0.1","files":["/packages/project-utils/package.json"]},{"name":"postcss-preset-env","version":"9.4.0","files":["/packages/project-utils/package.json"]},{"name":"posthtml","version":"0.15.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"posthtml-noopener","version":"1.0.5","files":["/packages/api-prerendering-service/package.json"]},{"name":"posthtml-plugin-link-preload","version":"1.0.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"process","version":"0.11.10","files":["/packages/project-utils/package.json"]},{"name":"prop-types","version":"15.7.2","files":["/packages/app-admin/package.json","/packages/app-apw/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"puppeteer-core","version":"23.9.0","files":["/packages/api-prerendering-service/package.json"]},{"name":"raw-loader","version":"4.0.2","files":["/packages/project-utils/package.json"]},{"name":"raw.macro","version":"0.4.2","files":["/packages/app-headless-cms/package.json"]},{"name":"rc-tooltip","version":"5.3.1","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/cli-plugin-extensions/templates/admin/package.json","/packages/cli-plugin-extensions/templates/pbElement/package.json","/packages/cli-plugin-extensions/templates/website/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/common/extensions/theme/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/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/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/ui-composer/package.json","/apps/admin/package.json","/apps/website/package.json","/extensions/theme/package.json"]},{"name":"react-ace","version":"6.1.4","files":["/packages/ui/package.json"]},{"name":"react-butterfiles","version":"1.3.3","files":["/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/ui/package.json"]},{"name":"react-color","version":"2.19.3","files":["/packages/app-page-builder/package.json","/packages/lexical-editor-actions/package.json","/packages/ui/package.json"]},{"name":"react-columned","version":"1.1.3","files":["/packages/ui/package.json"]},{"name":"react-custom-scrollbars","version":"4.2.1","files":["/packages/app-file-manager/package.json","/packages/app-headless-cms/package.json","/packages/ui/package.json"]},{"name":"react-dev-utils","version":"12.0.1","files":["/packages/project-utils/package.json"]},{"name":"react-dnd","version":"16.0.1","files":["/packages/app-aco/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"react-dnd-html5-backend","version":"16.0.1","files":["/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/lexical-editor/package.json","/packages/lexical-editor-actions/package.json","/packages/lexical-editor-pb-element/package.json","/packages/project-utils/package.json","/packages/react-composition/package.json","/packages/react-router/package.json","/packages/ui-composer/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"react-google-recaptcha","version":"1.1.0","files":["/packages/app-form-builder/package.json"]},{"name":"react-hamburger-menu","version":"1.1.1","files":["/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"react-helmet","version":"6.1.0","files":["/packages/app-admin-auth0/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-headless-cms/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-security-access-management/package.json","/packages/app-website/package.json"]},{"name":"react-hotkeyz","version":"1.0.4","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-file-manager/package.json","/packages/app-form-builder/package.json","/packages/app-headless-cms/package.json"]},{"name":"react-images","version":"0.5.19","files":["/packages/app-page-builder/package.json"]},{"name":"react-in-viewport","version":"1.0.0-alpha.30","files":["/packages/app-page-builder/package.json"]},{"name":"react-lazy-load","version":"3.1.14","files":["/packages/app-file-manager/package.json"]},{"name":"react-loading-skeleton","version":"3.1.0","files":["/packages/ui/package.json"]},{"name":"react-refresh","version":"0.11.0","files":["/packages/project-utils/package.json"]},{"name":"react-resizable-panels","version":"2.0.19","files":["/packages/app-admin/package.json"]},{"name":"react-router-dom","version":"6.3.0","files":["/packages/react-router/package.json"]},{"name":"react-sortable","version":"2.0.0","files":["/packages/app-page-builder/package.json"]},{"name":"react-spinner-material","version":"1.1.4","files":["/packages/app-apw/package.json","/packages/ui/package.json"]},{"name":"react-style-object-to-css","version":"1.1.2","files":["/packages/lexical-theme/package.json"]},{"name":"react-transition-group","version":"4.4.5","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/ui/package.json"]},{"name":"react-virtualized","version":"9.22.5","files":["/packages/app-admin/package.json","/packages/app-headless-cms/package.json","/packages/app-page-builder/package.json"]},{"name":"read-json-sync","version":"2.0.1","files":["/packages/project-utils/package.json"]},{"name":"recoil","version":"0.7.7","files":["/packages/app-page-builder/package.json"]},{"name":"reflect-metadata","version":"0.2.2","files":["/packages/di-container/package.json","/packages/ioc/package.json"]},{"name":"regenerator-runtime","version":"0.13.5","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"replace-in-path","version":"1.1.0","files":["/packages/cli-plugin-deploy-pulumi/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"reset-css","version":"5.0.1","files":["/packages/app-admin/package.json","/packages/app-website/package.json"]},{"name":"resolve","version":"1.22.8","files":["/packages/project-utils/package.json"]},{"name":"resolve-url-loader","version":"5.0.0","files":["/packages/project-utils/package.json"]},{"name":"rimraf","version":"6.0.1","files":["/packages/create-webiny-project/package.json","/packages/project-utils/package.json"]},{"name":"sanitize-filename","version":"1.6.3","files":["/packages/api-file-manager-s3/package.json"]},{"name":"sanitize-html","version":"2.12.1","files":["/packages/react-rich-text-renderer/package.json"]},{"name":"sass","version":"1.44.0","files":["/packages/project-utils/package.json"]},{"name":"sass-loader","version":"12.3.0","files":["/packages/project-utils/package.json"]},{"name":"scheduler","version":"0.19.1","files":["/packages/project-utils/package.json"]},{"name":"semver","version":"7.6.3","files":["/packages/api-headless-cms/package.json","/packages/cli/package.json","/packages/cli-plugin-dependencies/package.json","/packages/create-webiny-project/package.json","/packages/data-migration/package.json","/packages/pulumi-sdk/package.json"]},{"name":"sharp","version":"0.32.6","files":["/packages/api-file-manager-s3/package.json"]},{"name":"short-hash","version":"1.0.0","files":["/packages/i18n/package.json"]},{"name":"slugify","version":"1.6.6","files":["/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/app-aco/package.json","/packages/app-page-builder/package.json"]},{"name":"source-map-loader","version":"1.1.3","files":["/packages/project-utils/package.json"]},{"name":"source-map-support","version":"0.5.21","files":["/packages/project-utils/package.json"]},{"name":"srcset","version":"4.0.0","files":["/packages/api-prerendering-service/package.json","/packages/aws-helpers/package.json"]},{"name":"store","version":"2.0.12","files":["/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-page-builder/package.json","/packages/app-tenancy/package.json"]},{"name":"stream","version":"0.0.3","files":["/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json"]},{"name":"strip-ansi","version":"6.0.1","files":["/packages/telemetry/package.json"]},{"name":"style-loader","version":"3.3.1","files":["/packages/project-utils/package.json"]},{"name":"swiper","version":"9.3.2","files":["/packages/app-page-builder/package.json"]},{"name":"tar","version":"6.2.1","files":["/packages/pulumi-sdk/package.json"]},{"name":"terminal-link","version":"2.1.1","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json"]},{"name":"terser-webpack-plugin","version":"5.3.10","files":["/packages/project-utils/package.json"]},{"name":"theme","version":"1.0.0","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"timeago-react","version":"3.0.6","files":["/packages/ui/package.json"]},{"name":"ts-invariant","version":"0.10.3","files":["/packages/app/package.json"]},{"name":"ts-morph","version":"11.0.0","files":["/packages/cli/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json"]},{"name":"ts-patch","version":"3.3.0","files":["/packages/project-utils/package.json"]},{"name":"tslib","version":"2.8.1","files":["/packages/cwp-template-aws/template/common/apps/admin/package.json","/apps/admin/package.json"]},{"name":"type-fest","version":"3.13.1","files":["/packages/api-websockets/package.json","/packages/db/package.json"]},{"name":"typescript","version":"5.3.3","files":["/packages/cli/package.json","/packages/project-utils/package.json"]},{"name":"unicode-emoji-json","version":"0.4.0","files":["/packages/app-admin/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/packages/api-headless-cms-import-export/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/app-page-builder/package.json","/packages/cli/package.json","/packages/plugins/package.json"]},{"name":"unzipper","version":"0.12.3","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"url","version":"0.11.4","files":["/packages/project-utils/package.json"]},{"name":"url-loader","version":"4.1.1","files":["/packages/project-utils/package.json"]},{"name":"use-deep-compare-effect","version":"1.6.1","files":["/packages/app-headless-cms/package.json"]},{"name":"uuid","version":"8.3.2","files":["/packages/create-webiny-project/package.json","/packages/global-config/package.json"]},{"name":"validate-npm-package-name","version":"3.0.0","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json"]},{"name":"vm-browserify","version":"1.1.2","files":["/packages/project-utils/package.json"]},{"name":"warning","version":"4.0.2","files":["/packages/app/package.json"]},{"name":"webpack","version":"5.97.0","files":["/packages/project-utils/package.json","/packages/serverless-cms-aws/package.json"]},{"name":"webpack-dev-server","version":"5.1.0","files":["/packages/project-utils/package.json"]},{"name":"webpack-manifest-plugin","version":"5.0.0","files":["/packages/project-utils/package.json"]},{"name":"webpackbar","version":"7.0.0","files":["/packages/project-utils/package.json"]},{"name":"write-json-file","version":"4.3.0","files":["/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/create-webiny-project/package.json","/packages/cwp-template-aws/package.json","/packages/global-config/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"wts-client","version":"1.0.1","files":["/packages/telemetry/package.json"]},{"name":"yargs","version":"17.7.2","files":["/packages/cli/package.json","/packages/create-webiny-project/package.json","/packages/i18n/package.json","/packages/migrations/package.json","/scripts/buildPackages/package.json"]},{"name":"yauzl","version":"2.10.0","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"yesno","version":"0.4.0","files":["/packages/create-webiny-project/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/api-admin-users/package.json","/packages/api-apw/package.json","/packages/api-file-manager/package.json","/packages/api-form-builder/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-import-export/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security/package.json","/packages/api-websockets/package.json","/packages/app-aco/package.json","/packages/app-file-manager/package.json","/packages/tasks/package.json"]}],"devDependencies":[{"name":"@4tw/cypress-drag-drop","version":"1.4.0","files":["/cypress-tests/package.json"]},{"name":"@babel/cli","version":"7.26.4","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/code-frame","version":"7.26.2","files":["/package.json"]},{"name":"@babel/compat-data","version":"7.26.3","files":["/package.json"]},{"name":"@babel/core","version":"7.26.0","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/helper-define-polyfill-provider","version":"0.6.3","files":["/package.json"]},{"name":"@babel/helper-environment-visitor","version":"7.24.7","files":["/package.json"]},{"name":"@babel/parser","version":"7.26.3","files":["/package.json"]},{"name":"@babel/plugin-proposal-class-properties","version":"7.18.6","files":["/package.json"]},{"name":"@babel/plugin-proposal-object-rest-spread","version":"7.20.7","files":["/package.json"]},{"name":"@babel/plugin-proposal-throw-expressions","version":"7.25.9","files":["/package.json"]},{"name":"@babel/plugin-syntax-object-rest-spread","version":"7.8.3","files":["/package.json"]},{"name":"@babel/plugin-transform-modules-commonjs","version":"7.26.3","files":["/package.json"]},{"name":"@babel/plugin-transform-runtime","version":"7.25.9","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/preset-env","version":"7.26.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/preset-react","version":"7.26.3","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json"]},{"name":"@babel/preset-typescript","version":"7.26.0","files":["/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@babel/register","version":"7.25.9","files":["/package.json","/packages/i18n/package.json"]},{"name":"@babel/runtime","version":"7.26.0","files":["/package.json"]},{"name":"@babel/template","version":"7.25.9","files":["/package.json"]},{"name":"@babel/traverse","version":"7.26.4","files":["/package.json"]},{"name":"@babel/types","version":"7.26.3","files":["/package.json"]},{"name":"@commitlint/cli","version":"11.0.0","files":["/package.json"]},{"name":"@commitlint/config-conventional","version":"11.0.0","files":["/package.json"]},{"name":"@elastic/elasticsearch","version":"7.12.0","files":["/packages/api-headless-cms-ddb-es/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/project-utils/package.json"]},{"name":"@emotion/babel-plugin","version":"11.11.0","files":["/packages/app-admin/package.json","/packages/app-admin-rmwc/package.json","/packages/app-apw/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"@emotion/react","version":"11.10.8","files":["/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"@faker-js/faker","version":"9.3.0","files":["/packages/api-headless-cms-es-tasks/package.json"]},{"name":"@grpc/grpc-js","version":"1.11.1","files":["/package.json"]},{"name":"@material-design-icons/svg","version":"0.14.3","files":["/packages/app-audit-logs/package.json"]},{"name":"@material-symbols/svg-400","version":"0.4.1","files":["/packages/app-audit-logs/package.json"]},{"name":"@octokit/rest","version":"20.0.2","files":["/package.json"]},{"name":"@svgr/webpack","version":"6.1.1","files":["/packages/app-file-manager/package.json"]},{"name":"@testing-library/cypress","version":"10.0.0","files":["/cypress-tests/package.json"]},{"name":"@testing-library/react","version":"15.0.7","files":["/packages/form/package.json","/packages/react-composition/package.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json","/packages/ui/package.json"]},{"name":"@testing-library/user-event","version":"14.5.2","files":["/packages/form/package.json"]},{"name":"@types/accept-language-parser","version":"1.5.3","files":["/packages/api-i18n/package.json"]},{"name":"@types/accounting","version":"0.4.2","files":["/packages/i18n/package.json"]},{"name":"@types/adm-zip","version":"0.5.5","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"@types/aos","version":"3.0.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/archiver","version":"5.3.1","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"@types/babel__code-frame","version":"7.0.6","files":["/packages/api-headless-cms/package.json"]},{"name":"@types/bytes","version":"3.1.4","files":["/packages/app-admin/package.json"]},{"name":"@types/center-align","version":"1.0.0","files":["/packages/data-migration/package.json"]},{"name":"@types/crypto-js","version":"4.2.2","files":["/packages/api-mailer/package.json"]},{"name":"@types/extract-zip","version":"1.6.2","files":["/packages/api-page-builder/package.json"]},{"name":"@types/facepaint","version":"1.2.2","files":["/packages/app-page-builder-elements/package.json"]},{"name":"@types/folder-hash","version":"4.0.4","files":["/scripts/buildPackages/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"]},{"name":"@types/gtag.js","version":"0.0.20","files":["/packages/app-form-builder/package.json"]},{"name":"@types/inquirer","version":"8.2.10","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/invariant","version":"2.2.35","files":["/packages/form/package.json"]},{"name":"@types/is-hotkey","version":"0.1.10","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"@types/is-number","version":"7.0.5","files":["/packages/db-dynamodb/package.json"]},{"name":"@types/jest","version":"29.5.14","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/jsdom","version":"21.1.6","files":["/packages/lexical-converter/package.json"]},{"name":"@types/json2csv","version":"4.5.1","files":["/packages/api-form-builder/package.json","/packages/app-form-builder/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"]},{"name":"@types/jsonwebtoken","version":"9.0.2","files":["/packages/api-admin-users/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json"]},{"name":"@types/jwk-to-pem","version":"2.0.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-security-auth0/package.json"]},{"name":"@types/lodash","version":"4.17.13","files":["/packages/app/package.json","/packages/app-cognito-authenticator/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/pulumi/package.json","/packages/pulumi-sdk/package.json","/packages/validation/package.json"]},{"name":"@types/md5","version":"2.3.2","files":["/packages/api-admin-users/package.json"]},{"name":"@types/ncp","version":"2.0.4","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/node","version":"22.10.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/node-fetch","version":"2.6.1","files":["/packages/api-cognito-authenticator/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-security-auth0/package.json","/packages/api-security-okta/package.json","/packages/handler-logs/package.json"]},{"name":"@types/nodemailer","version":"6.4.17","files":["/packages/api-mailer/package.json"]},{"name":"@types/nprogress","version":"0.2.0","files":["/packages/ui/package.json"]},{"name":"@types/object-hash","version":"2.2.1","files":["/packages/api-prerendering-service/package.json"]},{"name":"@types/pako","version":"2.0.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/platform","version":"1.3.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/pluralize","version":"0.0.29","files":["/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/prettier","version":"2.7.3","files":["/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/package.json","/packages/app-aco/package.json","/packages/app-audit-logs/package.json","/packages/app-mailer/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/app-trash-bin/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/theme/package.json"]},{"name":"@types/react-color","version":"2.17.11","files":["/packages/lexical-editor-actions/package.json","/packages/ui/package.json"]},{"name":"@types/react-custom-scrollbars","version":"4.0.10","files":["/packages/ui/package.json"]},{"name":"@types/react-dom","version":"18.2.25","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/react-google-recaptcha","version":"1.1.2","files":["/packages/app-form-builder/package.json"]},{"name":"@types/react-hamburger-menu","version":"0.0.4","files":["/packages/cwp-template-aws/template/common/extensions/theme/package.json","/extensions/theme/package.json"]},{"name":"@types/react-helmet","version":"6.1.11","files":["/packages/app-admin-rmwc/package.json","/packages/app-security-access-management/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/apps/website/package.json"]},{"name":"@types/react-images","version":"0.5.3","files":["/packages/app-page-builder/package.json"]},{"name":"@types/react-transition-group","version":"4.4.4","files":["/packages/ui/package.json"]},{"name":"@types/react-virtualized","version":"9.21.16","files":["/packages/app-page-builder/package.json"]},{"name":"@types/resize-observer-browser","version":"0.1.4","files":["/packages/app-page-builder/package.json"]},{"name":"@types/rimraf","version":"3.0.2","files":["/packages/api-page-builder/package.json"]},{"name":"@types/sanitize-html","version":"2.9.0","files":["/packages/react-rich-text-renderer/package.json"]},{"name":"@types/semver","version":"7.3.4","files":["/packages/data-migration/package.json"]},{"name":"@types/store","version":"2.0.2","files":["/packages/app-admin/package.json","/packages/app-page-builder/package.json"]},{"name":"@types/uniqid","version":"5.3.2","files":["/packages/feature-flags/package.json","/packages/plugins/package.json"]},{"name":"@types/unzipper","version":"0.10.10","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"@types/validate-npm-package-name","version":"3.0.3","files":["/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-workspaces/package.json"]},{"name":"@types/warning","version":"3.0.0","files":["/packages/app/package.json"]},{"name":"@types/yargs","version":"17.0.8","files":["/scripts/buildPackages/package.json"]},{"name":"@types/yauzl","version":"2.9.2","files":["/packages/api-page-builder-import-export/package.json"]},{"name":"@typescript-eslint/eslint-plugin","version":"6.21.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@typescript-eslint/parser","version":"6.21.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"adio","version":"1.0.1","files":["/package.json"]},{"name":"adm-zip","version":"0.5.14","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"amazon-cognito-identity-js","version":"4.5.3","files":["/cypress-tests/package.json"]},{"name":"apollo-client","version":"2.6.10","files":["/packages/app-aco/package.json","/packages/app-trash-bin/package.json"]},{"name":"apollo-graphql","version":"0.9.5","files":["/packages/api-admin-settings/package.json","/packages/api-headless-cms/package.json"]},{"name":"apollo-link","version":"1.2.14","files":["/packages/app-aco/package.json","/packages/app-trash-bin/package.json"]},{"name":"aws-sdk-client-mock","version":"4.1.0","files":["/packages/api-headless-cms-import-export/package.json"]},{"name":"axios","version":"1.7.9","files":["/package.json"]},{"name":"babel-jest","version":"29.7.0","files":["/package.json"]},{"name":"babel-loader","version":"9.2.1","files":["/package.json","/packages/ui/package.json"]},{"name":"babel-plugin-dynamic-import-node","version":"2.3.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"babel-plugin-macros","version":"3.1.0","files":["/package.json"]},{"name":"babel-plugin-module-resolver","version":"5.0.2","files":["/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"babel-plugin-named-asset-import","version":"1.0.0-next.3e165448","files":["/packages/app-admin-rmwc/package.json","/packages/app-serverless-cms/package.json","/packages/app-theme-manager/package.json"]},{"name":"bytes","version":"3.1.2","files":["/packages/api-page-builder/package.json"]},{"name":"chalk","version":"4.1.2","files":["/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/pulumi-aws/package.json"]},{"name":"cross-env","version":"5.2.1","files":["/package.json","/packages/cli-plugin-scaffold-react-app/template/code/package.json","/packages/cwp-template-aws/template/common/apps/admin/package.json","/packages/cwp-template-aws/template/common/apps/website/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/apps/admin/package.json","/apps/website/package.json"]},{"name":"cross-spawn","version":"6.0.6","files":["/package.json"]},{"name":"csvtojson","version":"2.0.10","files":["/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json"]},{"name":"cypress","version":"13.16.0","files":["/cypress-tests/package.json"]},{"name":"cypress-image-snapshot","version":"4.0.1","files":["/cypress-tests/package.json"]},{"name":"cypress-mailosaur","version":"2.7.0","files":["/cypress-tests/package.json"]},{"name":"cypress-wait-until","version":"1.7.1","files":["/cypress-tests/package.json"]},{"name":"deepmerge","version":"4.3.1","files":["/package.json"]},{"name":"del","version":"6.0.0","files":["/cypress-tests/package.json"]},{"name":"dotenv","version":"8.2.0","files":["/packages/cwp-template-aws/package.json"]},{"name":"elastic-ts","version":"0.12.0","files":["/packages/migrations/package.json"]},{"name":"elliptic","version":"6.6.1","files":["/package.json"]},{"name":"env-ci","version":"2.0.1","files":["/package.json"]},{"name":"eslint","version":"8.57.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-config-standard","version":"16.0.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-import-resolver-babel-module","version":"5.3.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-import","version":"2.25.3","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-jest","version":"25.3.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-lodash","version":"7.4.0","files":["/package.json"]},{"name":"eslint-plugin-node","version":"11.1.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-promise","version":"5.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-react","version":"7.27.1","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"eslint-plugin-standard","version":"5.0.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"execa","version":"5.1.1","files":["/package.json","/packages/app-audit-logs/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"fast-glob","version":"3.2.7","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json"]},{"name":"find-up","version":"5.0.0","files":["/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json"]},{"name":"folder-hash","version":"4.0.4","files":["/package.json"]},{"name":"fs-extra","version":"11.2.0","files":["/package.json","/packages/api-form-builder/package.json"]},{"name":"get-stream","version":"3.0.0","files":["/package.json"]},{"name":"get-yarn-workspaces","version":"1.0.2","files":["/package.json"]},{"name":"git-cz","version":"1.7.1","files":["/package.json"]},{"name":"github-actions-wac","version":"1.4.1","files":["/package.json"]},{"name":"glob","version":"7.2.3","files":["/package.json","/packages/i18n/package.json"]},{"name":"graphql","version":"15.9.0","files":["/package.json","/packages/api-aco/package.json","/packages/api-apw/package.json","/packages/api-audit-logs/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-import-export/package.json","/packages/api-mailer/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-record-locking/package.json","/packages/api-serverless-cms/package.json","/packages/api-websockets/package.json"]},{"name":"graphql-request","version":"3.7.0","files":["/cypress-tests/package.json","/apps/api/graphql/package.json"]},{"name":"husky","version":"4.2.5","files":["/package.json"]},{"name":"identity-obj-proxy","version":"3.0.0","files":["/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"inquirer","version":"8.2.6","files":["/package.json"]},{"name":"inquirer-autocomplete-prompt","version":"1.0.1","files":["/package.json"]},{"name":"inquirer-checkbox-plus-prompt","version":"1.0.1","files":["/package.json"]},{"name":"inquirer-maxlength-input-prompt","version":"1.0.0","files":["/package.json"]},{"name":"invariant","version":"2.2.4","files":["/packages/cli-plugin-scaffold-react-app/template/code/package.json"]},{"name":"jest","version":"29.7.0","files":["/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-security-so-ddb/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/data-migration/package.json","/packages/db-dynamodb/package.json","/packages/handler-client/package.json","/packages/handler-graphql/package.json","/packages/validation/package.json"]},{"name":"jest-dynalite","version":"3.6.1","files":["/packages/api-admin-settings/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-authentication/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms-ddb/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-security-so-ddb/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-wcp/package.json","/packages/data-migration/package.json","/packages/db-dynamodb/package.json","/packages/migrations/package.json","/packages/project-utils/package.json"]},{"name":"jest-environment-jsdom","version":"29.7.0","files":["/package.json"]},{"name":"jest-extended","version":"4.0.2","files":["/package.json"]},{"name":"jest-mock-console","version":"2.0.0","files":["/packages/data-migration/package.json","/packages/handler-graphql/package.json"]},{"name":"jsdom","version":"25.0.1","files":["/packages/lexical-converter/package.json"]},{"name":"jsonpack","version":"1.1.5","files":["/packages/api-file-manager-ddb/package.json"]},{"name":"lerna","version":"8.1.2","files":["/package.json"]},{"name":"lint-staged","version":"15.2.2","files":["/package.json"]},{"name":"listr","version":"0.14.3","files":["/package.json"]},{"name":"listr2","version":"5.0.8","files":["/packages/project-utils/package.json"]},{"name":"load-json-file","version":"6.2.0","files":["/package.json","/packages/project-utils/package.json"]},{"name":"lodash","version":"4.17.21","files":["/package.json","/packages/pulumi-aws/package.json","/cypress-tests/package.json"]},{"name":"longest","version":"2.0.1","files":["/package.json"]},{"name":"md5","version":"2.3.0","files":["/packages/api-security-cognito/package.json"]},{"name":"merge","version":"2.0.0","files":["/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"mime","version":"3.0.0","files":["/packages/pulumi-aws/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/package.json"]},{"name":"mobx","version":"6.9.0","files":["/packages/form/package.json"]},{"name":"mobx-react-lite","version":"3.4.3","files":["/packages/form/package.json"]},{"name":"nanoid","version":"3.3.8","files":["/package.json","/cypress-tests/package.json"]},{"name":"ncp","version":"2.0.0","files":["/packages/ui/package.json"]},{"name":"node-fetch","version":"2.6.7","files":["/package.json","/cypress-tests/package.json"]},{"name":"pino","version":"8.21.0","files":["/packages/logger/package.json","/packages/project-utils/package.json"]},{"name":"pino-pretty","version":"9.4.0","files":["/packages/project-utils/package.json"]},{"name":"pm2","version":"5.4.3","files":["/package.json"]},{"name":"prettier","version":"2.8.8","files":["/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-apw/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/react-properties/package.json","/packages/react-rich-text-lexical-renderer/package.json"]},{"name":"raw-loader","version":"4.0.2","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/lexical-nodes/package.json"]},{"name":"rimraf","version":"6.0.1","files":["/packages/api/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-authentication/package.json","/packages/api-authentication-cognito/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-es/package.json","/packages/api-background-tasks-os/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/package.json","/packages/api-headless-cms/package.json","/packages/api-headless-cms-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-content/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-record-locking/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json","/packages/api-security-okta/package.json","/packages/api-security-so-ddb/package.json","/packages/api-serverless-cms/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/api-wcp/package.json","/packages/api-websockets/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/aws-sdk/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/data-migration/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/error/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-client/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/handler-logs/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/logger/package.json","/packages/plugins/package.json","/packages/pubsub/package.json","/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/tasks/package.json","/packages/theme/package.json","/packages/ui/package.json","/packages/ui-composer/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json"]},{"name":"semver","version":"7.6.3","files":["/package.json"]},{"name":"source-map-explorer","version":"2.5.3","files":["/apps/website/package.json"]},{"name":"ts-expect","version":"1.3.0","files":["/package.json"]},{"name":"ts-jest","version":"29.1.2","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"ts-node","version":"10.9.2","files":["/package.json","/scripts/buildPackages/package.json","/scripts/prepublishOnly/package.json"]},{"name":"type-fest","version":"3.13.1","files":["/packages/api-elasticsearch-tasks/package.json","/packages/api-record-locking/package.json","/packages/cli-plugin-dependencies/package.json","/packages/tasks/package.json","/scripts/prepublishOnly/package.json"]},{"name":"typescript","version":"5.3.3","files":["/package.json","/packages/api/package.json","/packages/api-aco/package.json","/packages/api-admin-settings/package.json","/packages/api-admin-users/package.json","/packages/api-admin-users-so-ddb/package.json","/packages/api-apw/package.json","/packages/api-apw-scheduler-so-ddb/package.json","/packages/api-audit-logs/package.json","/packages/api-authentication/package.json","/packages/api-authentication-cognito/package.json","/packages/api-background-tasks-ddb/package.json","/packages/api-background-tasks-es/package.json","/packages/api-background-tasks-os/package.json","/packages/api-cognito-authenticator/package.json","/packages/api-dynamodb-to-elasticsearch/package.json","/packages/api-elasticsearch/package.json","/packages/api-elasticsearch-tasks/package.json","/packages/api-file-manager/package.json","/packages/api-file-manager-ddb/package.json","/packages/api-file-manager-s3/package.json","/packages/api-form-builder/package.json","/packages/api-form-builder-so-ddb/package.json","/packages/api-form-builder-so-ddb-es/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-import-export/package.json","/packages/api-headless-cms-tasks/package.json","/packages/api-headless-cms-tasks-ddb-es/package.json","/packages/api-i18n/package.json","/packages/api-i18n-content/package.json","/packages/api-i18n-ddb/package.json","/packages/api-log/package.json","/packages/api-mailer/package.json","/packages/api-page-builder/package.json","/packages/api-page-builder-aco/package.json","/packages/api-page-builder-import-export/package.json","/packages/api-page-builder-import-export-so-ddb/package.json","/packages/api-page-builder-so-ddb/package.json","/packages/api-page-builder-so-ddb-es/package.json","/packages/api-prerendering-service/package.json","/packages/api-prerendering-service-aws/package.json","/packages/api-prerendering-service-so-ddb/package.json","/packages/api-record-locking/package.json","/packages/api-security/package.json","/packages/api-security-auth0/package.json","/packages/api-security-cognito/package.json","/packages/api-security-okta/package.json","/packages/api-security-so-ddb/package.json","/packages/api-serverless-cms/package.json","/packages/api-tenancy/package.json","/packages/api-tenancy-so-ddb/package.json","/packages/api-tenant-manager/package.json","/packages/api-theme-manager/package.json","/packages/api-wcp/package.json","/packages/api-websockets/package.json","/packages/app/package.json","/packages/app-aco/package.json","/packages/app-admin/package.json","/packages/app-admin-auth0/package.json","/packages/app-admin-cognito/package.json","/packages/app-admin-okta/package.json","/packages/app-admin-rmwc/package.json","/packages/app-admin-users-cognito/package.json","/packages/app-apw/package.json","/packages/app-audit-logs/package.json","/packages/app-cognito-authenticator/package.json","/packages/app-file-manager/package.json","/packages/app-file-manager-s3/package.json","/packages/app-form-builder/package.json","/packages/app-graphql-playground/package.json","/packages/app-headless-cms/package.json","/packages/app-headless-cms-common/package.json","/packages/app-i18n/package.json","/packages/app-i18n-content/package.json","/packages/app-mailer/package.json","/packages/app-page-builder/package.json","/packages/app-page-builder-elements/package.json","/packages/app-plugin-admin-welcome-screen/package.json","/packages/app-record-locking/package.json","/packages/app-security/package.json","/packages/app-security-access-management/package.json","/packages/app-serverless-cms/package.json","/packages/app-tenancy/package.json","/packages/app-tenant-manager/package.json","/packages/app-theme/package.json","/packages/app-theme-manager/package.json","/packages/app-trash-bin/package.json","/packages/app-utils/package.json","/packages/app-wcp/package.json","/packages/app-website/package.json","/packages/app-websockets/package.json","/packages/aws-sdk/package.json","/packages/cli-plugin-dependencies/package.json","/packages/cli-plugin-extensions/package.json","/packages/cli-plugin-scaffold/package.json","/packages/cli-plugin-scaffold-admin-app-module/package.json","/packages/cli-plugin-scaffold-ci/package.json","/packages/cli-plugin-scaffold-extensions/package.json","/packages/cli-plugin-scaffold-full-stack-app/package.json","/packages/cli-plugin-scaffold-graphql-api/package.json","/packages/cli-plugin-scaffold-graphql-service/package.json","/packages/cli-plugin-scaffold-react-app/package.json","/packages/cli-plugin-scaffold-react-component/package.json","/packages/cli-plugin-scaffold-react-component/template/package.json","/packages/cli-plugin-scaffold-workspaces/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json","/packages/data-migration/package.json","/packages/db/package.json","/packages/db-dynamodb/package.json","/packages/di-container/package.json","/packages/error/package.json","/packages/feature-flags/package.json","/packages/form/package.json","/packages/handler/package.json","/packages/handler-aws/package.json","/packages/handler-client/package.json","/packages/handler-db/package.json","/packages/handler-graphql/package.json","/packages/handler-logs/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/ioc/package.json","/packages/logger/package.json","/packages/migrations/package.json","/packages/plugins/package.json","/packages/pubsub/package.json","/packages/pulumi/package.json","/packages/pulumi-aws/package.json","/packages/pulumi-sdk/package.json","/packages/react-composition/package.json","/packages/react-rich-text-renderer/package.json","/packages/react-router/package.json","/packages/serverless-cms-aws/package.json","/packages/tasks/package.json","/packages/theme/package.json","/packages/ui/package.json","/packages/ui-composer/package.json","/packages/utils/package.json","/packages/validation/package.json","/packages/wcp/package.json","/cypress-tests/package.json"]},{"name":"typescript-transform-paths","version":"3.5.3","files":["/package.json"]},{"name":"uniqid","version":"5.4.0","files":["/cypress-tests/package.json"]},{"name":"verdaccio","version":"5.29.1","files":["/package.json"]},{"name":"write-json-file","version":"4.3.0","files":["/package.json","/packages/api-headless-cms/package.json"]},{"name":"yargs","version":"17.7.2","files":["/package.json","/packages/project-utils/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/ioc/package.json"]}],"peerDependencies":[{"name":"@editorjs/editorjs","version":"2.26.5","files":["/packages/app-page-builder-elements/package.json"]},{"name":"aos","version":"2.3.4","files":["/packages/app-page-builder-elements/package.json"]},{"name":"minimatch","version":"5.1.6","files":["/packages/ui/package.json"]},{"name":"react","version":"18.2.0","files":["/packages/app-audit-logs/package.json","/packages/app-page-builder-elements/package.json","/packages/app-theme/package.json","/packages/form/package.json","/packages/i18n/package.json","/packages/i18n-react/package.json","/packages/react-router/package.json","/packages/theme/package.json","/packages/ui/package.json"]},{"name":"react-columned","version":"1.1.3","files":["/packages/app-page-builder-elements/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/packages/ui/package.json"]},{"name":"react-google-recaptcha","version":"1.1.0","files":["/packages/app-page-builder-elements/package.json"]},{"name":"react-images","version":"0.5.19","files":["/packages/app-page-builder-elements/package.json"]},{"name":"swiper","version":"9.3.2","files":["/packages/app-page-builder-elements/package.json"]},{"name":"zod","version":"3.23.8","files":["/packages/utils/package.json"]}],"resolutions":[{"name":"@emotion/react","version":"11.10.8","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@grpc/grpc-js","version":"1.11.1","files":["/package.json"]},{"name":"@octokit/rest","version":"20.0.2","files":["/package.json"]},{"name":"@types/eslint","version":"8.2.1","files":["/package.json"]},{"name":"@types/react","version":"18.2.79","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"@types/react-dom","version":"18.2.25","files":["/package.json"]},{"name":"@types/webpack","version":"5.28.0","files":["/package.json"]},{"name":"braces","version":"3.0.3","files":["/package.json"]},{"name":"browserify-sign","version":"4.2.2","files":["/package.json"]},{"name":"crypto-js","version":"4.2.0","files":["/package.json"]},{"name":"ejs","version":"3.1.10","files":["/package.json"]},{"name":"express","version":"4.21.2","files":["/package.json"]},{"name":"follow-redirects","version":"1.15.6","files":["/package.json"]},{"name":"http-proxy-middleware","version":"2.0.7","files":["/package.json"]},{"name":"ip","version":"2.0.1","files":["/package.json"]},{"name":"postcss","version":"8.4.35","files":["/package.json"]},{"name":"react","version":"18.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"react-dnd","version":"16.0.1","files":["/package.json"]},{"name":"react-dnd-html5-backend","version":"16.0.1","files":["/package.json"]},{"name":"react-dom","version":"18.2.0","files":["/package.json","/packages/cwp-template-aws/template/ddb-es/dependencies.json","/packages/cwp-template-aws/template/ddb-os/dependencies.json","/packages/cwp-template-aws/template/ddb/dependencies.json"]},{"name":"semver","version":"7.6.3","files":["/package.json"]},{"name":"systeminformation","version":"5.23.18","files":["/package.json"]},{"name":"tar","version":"6.2.1","files":["/package.json"]},{"name":"typescript","version":"5.3.3","files":["/package.json"]},{"name":"xml2js","version":"0.6.2","files":["/package.json"]}],"references":[{"name":"@types/hoist-non-react-statics","versions":[{"version":"3.3.5","files":[{"file":"/package.json","types":["dependencies"]}]}]},{"name":"@babel/cli","versions":[{"version":"7.26.4","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/code-frame","versions":[{"version":"7.26.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@babel/compat-data","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/core","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/helper-define-polyfill-provider","versions":[{"version":"0.6.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/helper-environment-visitor","versions":[{"version":"7.24.7","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/parser","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/plugin-proposal-class-properties","versions":[{"version":"7.18.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-proposal-object-rest-spread","versions":[{"version":"7.20.7","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-proposal-throw-expressions","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-syntax-object-rest-spread","versions":[{"version":"7.8.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/plugin-transform-modules-commonjs","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/plugin-transform-runtime","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@babel/preset-env","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/preset-react","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/preset-typescript","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/register","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]}]}]},{"name":"@babel/runtime","versions":[{"version":"7.26.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@babel/template","versions":[{"version":"7.25.9","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/traverse","versions":[{"version":"7.26.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@babel/types","versions":[{"version":"7.26.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@commitlint/cli","versions":[{"version":"11.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@commitlint/config-conventional","versions":[{"version":"11.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@grpc/grpc-js","versions":[{"version":"1.11.1","files":[{"file":"/package.json","types":["devDependencies","resolutions"]}]}]},{"name":"@octokit/rest","versions":[{"version":"20.0.2","files":[{"file":"/package.json","types":["devDependencies","resolutions"]}]}]},{"name":"@types/fs-extra","versions":[{"version":"11.0.4","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@types/jest","versions":[{"version":"29.5.14","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@types/node","versions":[{"version":"22.10.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@types/prettier","versions":[{"version":"2.7.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"@types/react","versions":[{"version":"18.2.79","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"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-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies","resolutions"]},{"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/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"@types/react-dom","versions":[{"version":"18.2.25","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@typescript-eslint/eslint-plugin","versions":[{"version":"6.21.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"@typescript-eslint/parser","versions":[{"version":"6.21.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"adio","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"axios","versions":[{"version":"1.7.9","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-jest","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-loader","versions":[{"version":"9.2.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-dynamic-import-node","versions":[{"version":"2.3.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-macros","versions":[{"version":"3.1.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-module-resolver","versions":[{"version":"5.0.2","files":[{"file":"/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/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"chalk","versions":[{"version":"4.1.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/aws-layers/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"cross-env","versions":[{"version":"5.2.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/apps/admin/package.json","types":["devDependencies"]},{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"cross-spawn","versions":[{"version":"6.0.6","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"deepmerge","versions":[{"version":"4.3.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"elliptic","versions":[{"version":"6.6.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"env-ci","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"eslint","versions":[{"version":"8.57.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-config-standard","versions":[{"version":"16.0.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-import-resolver-babel-module","versions":[{"version":"5.3.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-import","versions":[{"version":"2.25.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-jest","versions":[{"version":"25.3.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-lodash","versions":[{"version":"7.4.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-node","versions":[{"version":"11.1.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-promise","versions":[{"version":"5.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-react","versions":[{"version":"7.27.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"eslint-plugin-standard","versions":[{"version":"5.0.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"execa","versions":[{"version":"5.1.1","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"folder-hash","versions":[{"version":"4.0.4","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"fs-extra","versions":[{"version":"11.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/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-stream","versions":[{"version":"3.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"get-yarn-workspaces","versions":[{"version":"1.0.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"git-cz","versions":[{"version":"1.7.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"github-actions-wac","versions":[{"version":"1.4.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"glob","versions":[{"version":"7.2.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"graphql","versions":[{"version":"15.9.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/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-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/package.json","types":["devDependencies"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"husky","versions":[{"version":"4.2.5","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer","versions":[{"version":"8.2.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]}]}]},{"name":"inquirer-autocomplete-prompt","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer-checkbox-plus-prompt","versions":[{"version":"1.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"inquirer-maxlength-input-prompt","versions":[{"version":"1.0.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"jest","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/handler-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/validation/package.json","types":["devDependencies"]}]}]},{"name":"jest-environment-jsdom","versions":[{"version":"29.7.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"jest-extended","versions":[{"version":"4.0.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"lerna","versions":[{"version":"8.1.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"lint-staged","versions":[{"version":"15.2.2","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"listr","versions":[{"version":"0.14.3","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"load-json-file","versions":[{"version":"6.2.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"lodash","versions":[{"version":"4.17.21","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["dependencies"]},{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/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-mailer/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service-aws/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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/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/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/packages/validation/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"longest","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"minimatch","versions":[{"version":"5.1.6","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]}]}]},{"name":"nanoid","versions":[{"version":"3.3.8","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-properties/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"node-fetch","versions":[{"version":"2.6.7","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]},{"file":"/packages/api-wcp/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/handler-logs/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/packages/wcp/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"pm2","versions":[{"version":"5.4.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"prettier","versions":[{"version":"2.8.8","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/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-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/react-properties/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"semver","versions":[{"version":"7.6.3","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"ts-expect","versions":[{"version":"1.3.0","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"ts-jest","versions":[{"version":"29.1.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"ts-node","versions":[{"version":"10.9.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["devDependencies"]}]}]},{"name":"typescript","versions":[{"version":"5.3.3","files":[{"file":"/package.json","types":["devDependencies","resolutions"]},{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-es/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-import-export/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/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-auth0/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-utils/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["devDependencies"]},{"file":"/packages/app-website/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/di-container/package.json","types":["devDependencies"]},{"file":"/packages/error/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-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/ioc/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pubsub/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/react-composition/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]},{"file":"/packages/react-router/package.json","types":["devDependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/packages/ui-composer/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":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"typescript-transform-paths","versions":[{"version":"3.5.3","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"verdaccio","versions":[{"version":"5.29.1","files":[{"file":"/package.json","types":["devDependencies"]}]}]},{"name":"write-json-file","versions":[{"version":"4.3.0","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"yargs","versions":[{"version":"17.7.2","files":[{"file":"/package.json","types":["devDependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/i18n/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"systeminformation","versions":[{"version":"5.23.18","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@emotion/react","versions":[{"version":"11.10.8","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-theme/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"braces","versions":[{"version":"3.0.3","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@types/webpack","versions":[{"version":"5.28.0","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"browserify-sign","versions":[{"version":"4.2.2","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"react","versions":[{"version":"18.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["peerDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme/package.json","types":["peerDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/admin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/pbElement/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/templates/website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/form/package.json","types":["peerDependencies"]},{"file":"/packages/i18n/package.json","types":["peerDependencies"]},{"file":"/packages/i18n-react/package.json","types":["peerDependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/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/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies","peerDependencies"]},{"file":"/packages/theme/package.json","types":["peerDependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]},{"file":"/packages/ui-composer/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"react-dom","versions":[{"version":"18.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/app-websockets/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["resolutions"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["resolutions"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/react-composition/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["peerDependencies"]},{"file":"/packages/ui-composer/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"follow-redirects","versions":[{"version":"1.15.6","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"crypto-js","versions":[{"version":"4.2.0","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/api-mailer/package.json","types":["dependencies"]}]}]},{"name":"ip","versions":[{"version":"2.0.1","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"tar","versions":[{"version":"6.2.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"express","versions":[{"version":"4.21.2","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"ejs","versions":[{"version":"3.1.10","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"postcss","versions":[{"version":"8.4.35","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"@types/eslint","versions":[{"version":"8.2.1","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"http-proxy-middleware","versions":[{"version":"2.0.7","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"xml2js","versions":[{"version":"0.6.2","files":[{"file":"/package.json","types":["resolutions"]}]}]},{"name":"react-dnd","versions":[{"version":"16.0.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-dnd-html5-backend","versions":[{"version":"16.0.1","files":[{"file":"/package.json","types":["resolutions"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"rimraf","versions":[{"version":"6.0.1","files":[{"file":"/packages/api/package.json","types":["devDependencies"]},{"file":"/packages/api-aco/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-es/package.json","types":["devDependencies"]},{"file":"/packages/api-background-tasks-os/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch/package.json","types":["devDependencies"]},{"file":"/packages/api-elasticsearch-tasks/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/api-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-aws/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/api-websockets/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-auth0/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]},{"file":"/packages/app-plugin-admin-welcome-screen/package.json","types":["devDependencies"]},{"file":"/packages/app-record-locking/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["devDependencies"]},{"file":"/packages/app-website/package.json","types":["devDependencies"]},{"file":"/packages/app-websockets/package.json","types":["devDependencies"]},{"file":"/packages/aws-sdk/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/template/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/error/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-client/package.json","types":["devDependencies"]},{"file":"/packages/handler-db/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]},{"file":"/packages/i18n/package.json","types":["devDependencies"]},{"file":"/packages/i18n-react/package.json","types":["devDependencies"]},{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/pubsub/package.json","types":["devDependencies"]},{"file":"/packages/pulumi/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["devDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]},{"file":"/packages/react-router/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]},{"file":"/packages/ui-composer/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"]}]}]},{"name":"apollo-graphql","versions":[{"version":"0.9.5","files":[{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["devDependencies"]}]}]},{"name":"jest-dynalite","versions":[{"version":"3.6.1","files":[{"file":"/packages/api-admin-settings/package.json","types":["devDependencies"]},{"file":"/packages/api-admin-users-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-apw-scheduler-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-authentication/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/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-i18n-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-log/package.json","types":["devDependencies"]},{"file":"/packages/api-mailer/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-prerendering-service-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-security-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/api-tenancy-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/api-wcp/package.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["devDependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"dataloader","versions":[{"version":"2.2.2","files":[{"file":"/packages/api-admin-users/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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-tenancy/package.json","types":["dependencies"]}]}]},{"name":"md5","versions":[{"version":"2.3.0","files":[{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]}]}]},{"name":"zod","versions":[{"version":"3.23.8","files":[{"file":"/packages/api-admin-users/package.json","types":["dependencies"]},{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/api-file-manager/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-tasks/package.json","types":["dependencies"]},{"file":"/packages/api-log/package.json","types":["dependencies"]},{"file":"/packages/api-mailer/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-websockets/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/ioc/package.json","types":["devDependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["peerDependencies"]}]}]},{"name":"@types/jsonwebtoken","versions":[{"version":"9.0.2","files":[{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]},{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-security/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["devDependencies"]}]}]},{"name":"@types/md5","versions":[{"version":"2.3.2","files":[{"file":"/packages/api-admin-users/package.json","types":["devDependencies"]}]}]},{"name":"dayjs","versions":[{"version":"1.11.13","files":[{"file":"/packages/api-apw/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"jsonwebtoken","versions":[{"version":"9.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]}]}]},{"name":"jwk-to-pem","versions":[{"version":"2.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["dependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["dependencies"]},{"file":"/packages/api-security-okta/package.json","types":["dependencies"]}]}]},{"name":"@types/jwk-to-pem","versions":[{"version":"2.0.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]}]}]},{"name":"@types/node-fetch","versions":[{"version":"2.6.1","files":[{"file":"/packages/api-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/api-file-manager-s3/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]},{"file":"/packages/api-security-auth0/package.json","types":["devDependencies"]},{"file":"/packages/api-security-okta/package.json","types":["devDependencies"]},{"file":"/packages/handler-logs/package.json","types":["devDependencies"]}]}]},{"name":"p-retry","versions":[{"version":"4.6.2","files":[{"file":"/packages/api-dynamodb-to-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"@elastic/elasticsearch","versions":[{"version":"7.12.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["devDependencies"]},{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"aws-elasticsearch-connector","versions":[{"version":"9.2.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]}]}]},{"name":"elastic-ts","versions":[{"version":"0.12.0","files":[{"file":"/packages/api-elasticsearch/package.json","types":["dependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-so-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["devDependencies"]}]}]},{"name":"type-fest","versions":[{"version":"3.13.1","files":[{"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"]},{"file":"/packages/cli-plugin-dependencies/package.json","types":["devDependencies"]},{"file":"/packages/db/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["devDependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["devDependencies"]}]}]},{"name":"cache-control-parser","versions":[{"version":"2.0.6","files":[{"file":"/packages/api-file-manager/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"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"jsonpack","versions":[{"version":"1.1.5","files":[{"file":"/packages/api-file-manager-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb-es/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]}]}]},{"name":"form-data","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]}]}]},{"name":"mime","versions":[{"version":"3.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["devDependencies"]}]}]},{"name":"p-map","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"p-reduce","versions":[{"version":"2.1.0","files":[{"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.3","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"sharp","versions":[{"version":"0.32.6","files":[{"file":"/packages/api-file-manager-s3/package.json","types":["dependencies"]}]}]},{"name":"date-fns","versions":[{"version":"2.22.1","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"json2csv","versions":[{"version":"4.5.4","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"slugify","versions":[{"version":"1.6.6","files":[{"file":"/packages/api-form-builder/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@types/json2csv","versions":[{"version":"4.5.1","files":[{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"csvtojson","versions":[{"version":"2.0.10","files":[{"file":"/packages/api-form-builder/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb/package.json","types":["devDependencies"]},{"file":"/packages/api-form-builder-so-ddb-es/package.json","types":["devDependencies"]}]}]},{"name":"@graphql-tools/merge","versions":[{"version":"9.0.4","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/schema","versions":[{"version":"10.0.6","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"dot-prop","versions":[{"version":"6.0.1","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-headless-cms-ddb/package.json","types":["dependencies"]},{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"graphql-tag","versions":[{"version":"2.12.6","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-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-file-manager-s3/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"jsdom","versions":[{"version":"25.0.1","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]}]}]},{"name":"pluralize","versions":[{"version":"8.0.0","files":[{"file":"/packages/api-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]}]}]},{"name":"@types/babel__code-frame","versions":[{"version":"7.0.6","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":"@faker-js/faker","versions":[{"version":"9.3.0","files":[{"file":"/packages/api-headless-cms-es-tasks/package.json","types":["devDependencies"]}]}]},{"name":"@smithy/node-http-handler","versions":[{"version":"2.1.6","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"archiver","versions":[{"version":"7.0.1","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"bytes","versions":[{"version":"3.1.2","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"uniqid","versions":[{"version":"5.4.0","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/plugins/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"unzipper","versions":[{"version":"0.12.3","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/adm-zip","versions":[{"version":"0.5.5","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@types/unzipper","versions":[{"version":"0.10.10","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"adm-zip","versions":[{"version":"0.5.14","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"aws-sdk-client-mock","versions":[{"version":"4.1.0","files":[{"file":"/packages/api-headless-cms-import-export/package.json","types":["devDependencies"]}]}]},{"name":"accept-language-parser","versions":[{"version":"1.5.0","files":[{"file":"/packages/api-i18n/package.json","types":["dependencies"]}]}]},{"name":"i18n-locales","versions":[{"version":"0.0.5","files":[{"file":"/packages/api-i18n/package.json","types":["dependencies"]}]}]},{"name":"@types/accept-language-parser","versions":[{"version":"1.5.3","files":[{"file":"/packages/api-i18n/package.json","types":["devDependencies"]}]}]},{"name":"nodemailer","versions":[{"version":"6.9.16","files":[{"file":"/packages/api-mailer/package.json","types":["dependencies"]}]}]},{"name":"@types/crypto-js","versions":[{"version":"4.2.2","files":[{"file":"/packages/api-mailer/package.json","types":["devDependencies"]}]}]},{"name":"@types/nodemailer","versions":[{"version":"6.4.17","files":[{"file":"/packages/api-mailer/package.json","types":["devDependencies"]}]}]},{"name":"extract-zip","versions":[{"version":"1.6.7","files":[{"file":"/packages/api-page-builder/package.json","types":["dependencies"]}]}]},{"name":"stream","versions":[{"version":"0.0.3","files":[{"file":"/packages/api-page-builder/package.json","types":["dependencies"]},{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/extract-zip","versions":[{"version":"1.6.2","files":[{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/rimraf","versions":[{"version":"3.0.2","files":[{"file":"/packages/api-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"dot-prop-immutable","versions":[{"version":"2.1.1","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]},{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"yauzl","versions":[{"version":"2.10.0","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["dependencies"]}]}]},{"name":"@types/archiver","versions":[{"version":"5.3.1","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@types/yauzl","versions":[{"version":"2.9.2","files":[{"file":"/packages/api-page-builder-import-export/package.json","types":["devDependencies"]}]}]},{"name":"@sparticuz/chromium","versions":[{"version":"123.0.1","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml","versions":[{"version":"0.15.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml-noopener","versions":[{"version":"1.0.5","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"posthtml-plugin-link-preload","versions":[{"version":"1.0.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"puppeteer-core","versions":[{"version":"23.9.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]}]}]},{"name":"srcset","versions":[{"version":"4.0.0","files":[{"file":"/packages/api-prerendering-service/package.json","types":["dependencies"]},{"file":"/packages/aws-helpers/package.json","types":["dependencies"]}]}]},{"name":"@types/object-hash","versions":[{"version":"2.2.1","files":[{"file":"/packages/api-prerendering-service/package.json","types":["devDependencies"]}]}]},{"name":"deep-equal","versions":[{"version":"2.2.3","files":[{"file":"/packages/api-security/package.json","types":["dependencies"]},{"file":"/packages/api-security-cognito/package.json","types":["dependencies"]},{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-hooks","versions":[{"version":"3.1.5","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"@emotion/styled","versions":[{"version":"11.10.6","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]},{"file":"/extensions/theme/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-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"apollo-cache-inmemory","versions":[{"version":"1.6.6","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"apollo-client","versions":[{"version":"2.6.10","files":[{"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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"apollo-link","versions":[{"version":"1.2.14","files":[{"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-apw/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["devDependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/website/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-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/app-i18n/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-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/app-wcp/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"boolean","versions":[{"version":"3.2.0","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"invariant","versions":[{"version":"2.2.4","files":[{"file":"/packages/app/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-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.2","files":[{"file":"/packages/app/package.json","types":["dependencies"]}]}]},{"name":"@types/lodash","versions":[{"version":"4.17.13","files":[{"file":"/packages/app/package.json","types":["devDependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["devDependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]},{"file":"/packages/i18n/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":"@types/warning","versions":[{"version":"3.0.0","files":[{"file":"/packages/app/package.json","types":["devDependencies"]}]}]},{"name":"@material-design-icons/svg","versions":[{"version":"0.14.3","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-record-locking/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@material-symbols/svg-400","versions":[{"version":"0.4.1","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-audit-logs/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@minoru/react-dnd-treeview","versions":[{"version":"3.2.1","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]}]}]},{"name":"mobx","versions":[{"version":"6.9.0","files":[{"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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/app-utils/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"mobx-react-lite","versions":[{"version":"3.4.3","files":[{"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-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-trash-bin/package.json","types":["dependencies"]},{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"react-hotkeyz","versions":[{"version":"1.0.4","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"store","versions":[{"version":"2.0.12","files":[{"file":"/packages/app-aco/package.json","types":["dependencies"]},{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenancy/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-components","versions":[{"version":"3.1.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/editorjs","versions":[{"version":"2.26.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@iconify/json","versions":[{"version":"2.2.142","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@svgr/webpack","versions":[{"version":"6.1.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@types/mime","versions":[{"version":"2.0.3","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-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"downshift","versions":[{"version":"3.1.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]},{"version":"2.1.5","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"emotion","versions":[{"version":"10.0.27","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/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-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/lexical-theme/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"graphlib","versions":[{"version":"2.1.8","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"is-hotkey","versions":[{"version":"0.2.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"prop-types","versions":[{"version":"15.7.2","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["dependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"react-resizable-panels","versions":[{"version":"2.0.19","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"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-virtualized","versions":[{"version":"9.22.5","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"reset-css","versions":[{"version":"5.0.1","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"unicode-emoji-json","versions":[{"version":"0.4.0","files":[{"file":"/packages/app-admin/package.json","types":["dependencies"]}]}]},{"name":"@emotion/babel-plugin","versions":[{"version":"11.11.0","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-apw/package.json","types":["devDependencies"]},{"file":"/packages/app-form-builder/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-i18n/package.json","types":["devDependencies"]},{"file":"/packages/app-i18n-content/package.json","types":["devDependencies"]},{"file":"/packages/app-mailer/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]},{"file":"/packages/app-security/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-tenancy/package.json","types":["devDependencies"]},{"file":"/packages/app-tenant-manager/package.json","types":["devDependencies"]},{"file":"/packages/app-theme/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]},{"file":"/packages/theme/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/bytes","versions":[{"version":"3.1.4","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-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/store","versions":[{"version":"2.0.2","files":[{"file":"/packages/app-admin/package.json","types":["devDependencies"]},{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@auth0/auth0-react","versions":[{"version":"2.2.4","files":[{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]}]}]},{"name":"react-helmet","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-admin-auth0/package.json","types":["dependencies"]},{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]},{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]},{"file":"/packages/app-admin-users-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-mailer/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"@aws-amplify/auth","versions":[{"version":"5.1.9","files":[{"file":"/packages/app-admin-cognito/package.json","types":["dependencies"]},{"file":"/packages/app-cognito-authenticator/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-auth-js","versions":[{"version":"5.3.1","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-react","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@okta/okta-signin-widget","versions":[{"version":"5.9.4","files":[{"file":"/packages/app-admin-okta/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/base","versions":[{"version":"14.2.2","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/provider","versions":[{"version":"14.2.2","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["dependencies"]}]}]},{"name":"@types/react-helmet","versions":[{"version":"6.1.11","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-security-access-management/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["devDependencies"]},{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"babel-plugin-named-asset-import","versions":[{"version":"1.0.0-next.3e165448","files":[{"file":"/packages/app-admin-rmwc/package.json","types":["devDependencies"]},{"file":"/packages/app-serverless-cms/package.json","types":["devDependencies"]},{"file":"/packages/app-theme-manager/package.json","types":["devDependencies"]}]}]},{"name":"@emotion/is-prop-valid","versions":[{"version":"1.1.1","files":[{"file":"/packages/app-apw/package.json","types":["dependencies"]}]}]},{"name":"react-spinner-material","versions":[{"version":"1.1.4","files":[{"file":"/packages/app-apw/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@apollo/react-common","versions":[{"version":"3.1.4","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"dataurl-to-blob","versions":[{"version":"0.0.1","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"react-butterfiles","versions":[{"version":"1.3.3","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-custom-scrollbars","versions":[{"version":"4.2.1","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-lazy-load","versions":[{"version":"3.1.14","files":[{"file":"/packages/app-file-manager/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/core","versions":[{"version":"6.1.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/sortable","versions":[{"version":"8.0.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"@dnd-kit/utilities","versions":[{"version":"3.2.2","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]}]}]},{"name":"dnd-core","versions":[{"version":"16.0.1","files":[{"file":"/packages/app-form-builder/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-page-builder/package.json","types":["dependencies"]}]}]},{"name":"history","versions":[{"version":"5.3.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/react-router/package.json","types":["dependencies"]}]}]},{"name":"react-google-recaptcha","versions":[{"version":"1.1.0","files":[{"file":"/packages/app-form-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"@types/gtag.js","versions":[{"version":"0.0.20","files":[{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-google-recaptcha","versions":[{"version":"1.1.2","files":[{"file":"/packages/app-form-builder/package.json","types":["devDependencies"]}]}]},{"name":"load-script","versions":[{"version":"1.0.0","files":[{"file":"/packages/app-graphql-playground/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-common-types","versions":[{"version":"0.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/fontawesome-svg-core","versions":[{"version":"1.3.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-headless-cms-common/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-brands-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-regular-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/free-solid-svg-icons","versions":[{"version":"6.0.0","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@fortawesome/react-fontawesome","versions":[{"version":"0.1.17","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"@lexical/utils","versions":[{"version":"0.16.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-pb-element/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"raw.macro","versions":[{"version":"0.4.2","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"use-deep-compare-effect","versions":[{"version":"1.6.1","files":[{"file":"/packages/app-headless-cms/package.json","types":["dependencies"]}]}]},{"name":"@types/medium-editor","versions":[{"version":"5.0.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"aos","versions":[{"version":"2.3.4","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"dnd-kit-sortable-tree","versions":[{"version":"0.1.73","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"medium-editor","versions":[{"version":"5.23.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"pako","versions":[{"version":"2.1.0","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"platform","versions":[{"version":"1.3.5","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-color","versions":[{"version":"2.19.3","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/lexical-editor-actions/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-images","versions":[{"version":"0.5.19","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"react-in-viewport","versions":[{"version":"1.0.0-alpha.30","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"react-sortable","versions":[{"version":"2.0.0","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"recoil","versions":[{"version":"0.7.7","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]}]}]},{"name":"swiper","versions":[{"version":"9.3.2","files":[{"file":"/packages/app-page-builder/package.json","types":["dependencies"]},{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]}]}]},{"name":"@types/aos","versions":[{"version":"3.0.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/pako","versions":[{"version":"2.0.3","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/platform","versions":[{"version":"1.3.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-images","versions":[{"version":"0.5.3","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-virtualized","versions":[{"version":"9.21.16","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"@types/resize-observer-browser","versions":[{"version":"0.1.4","files":[{"file":"/packages/app-page-builder/package.json","types":["devDependencies"]}]}]},{"name":"facepaint","versions":[{"version":"1.2.1","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["dependencies"]}]}]},{"name":"@types/facepaint","versions":[{"version":"1.2.2","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["devDependencies"]}]}]},{"name":"react-columned","versions":[{"version":"1.1.3","files":[{"file":"/packages/app-page-builder-elements/package.json","types":["peerDependencies"]},{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"crypto-hash","versions":[{"version":"3.0.0","files":[{"file":"/packages/app-record-locking/package.json","types":["dependencies"]}]}]},{"name":"apollo-link-batch-http","versions":[{"version":"1.2.14","files":[{"file":"/packages/app-serverless-cms/package.json","types":["dependencies"]},{"file":"/packages/app-website/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]}]}]},{"name":"@emotion/cache","versions":[{"version":"11.10.5","files":[{"file":"/packages/app-website/package.json","types":["dependencies"]}]}]},{"name":"@types/aws-lambda","versions":[{"version":"8.10.145","files":[{"file":"/packages/aws-helpers/package.json","types":["dependencies"]},{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"cheerio","versions":[{"version":"1.0.0-rc.10","files":[{"file":"/packages/aws-helpers/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-apigatewaymanagementapi","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudfront","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-events","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cloudwatch-logs","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-cognito-identity-provider","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-dynamodb-streams","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-eventbridge","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iam","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-iot","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-lambda","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-s3","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sfn","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sqs","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/client-sts","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/credential-providers","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-dynamodb","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/lib-storage","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-presigned-post","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/s3-request-presigner","versions":[{"version":"3.709.0","files":[{"file":"/packages/aws-sdk/package.json","types":["dependencies"]}]}]},{"name":"@aws-sdk/util-dynamodb","versions":[{"version":"3.709.0","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":["dependencies"]}]}]},{"name":"camelcase","versions":[{"version":"6.3.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"dotenv","versions":[{"version":"8.2.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["devDependencies"]}]}]},{"name":"fast-glob","versions":[{"version":"3.2.7","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies","devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"find-up","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]},{"file":"/scripts/prepublishOnly/package.json","types":["dependencies"]}]}]},{"name":"graphql-request","versions":[{"version":"3.7.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/cypress-tests/package.json","types":["devDependencies"]},{"file":"/apps/api/graphql/package.json","types":["devDependencies"]}]}]},{"name":"is-ci","versions":[{"version":"3.0.1","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"ncp","versions":[{"version":"2.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"open","versions":[{"version":"8.4.2","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]}]}]},{"name":"pirates","versions":[{"version":"4.0.6","files":[{"file":"/packages/cli/package.json","types":["dependencies"]}]}]},{"name":"ts-morph","versions":[{"version":"11.0.0","files":[{"file":"/packages/cli/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]}]}]},{"name":"body-parser","versions":[{"version":"1.20.3","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"exit-hook","versions":[{"version":"4.0.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"humanize-duration","versions":[{"version":"3.32.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"localtunnel","versions":[{"version":"2.0.2","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"log-update","versions":[{"version":"4.0.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"mqtt","versions":[{"version":"5.10.3","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"node-notifier","versions":[{"version":"10.0.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]}]}]},{"name":"ora","versions":[{"version":"4.1.1","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"replace-in-path","versions":[{"version":"1.1.0","files":[{"file":"/packages/cli-plugin-deploy-pulumi/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]}]}]},{"name":"case","versions":[{"version":"1.6.3","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]}]}]},{"name":"validate-npm-package-name","versions":[{"version":"3.0.0","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["dependencies"]},{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"@types/inquirer","versions":[{"version":"8.2.10","files":[{"file":"/packages/cli-plugin-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"terminal-link","versions":[{"version":"2.1.1","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["dependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["dependencies"]}]}]},{"name":"@types/ncp","versions":[{"version":"2.0.4","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"@types/pluralize","versions":[{"version":"0.0.29","files":[{"file":"/packages/cli-plugin-scaffold-admin-app-module/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-full-stack-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-api/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-graphql-service/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-app/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"js-base64","versions":[{"version":"3.7.7","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]}]}]},{"name":"octokit","versions":[{"version":"3.1.2","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["dependencies"]}]}]},{"name":"@types/validate-npm-package-name","versions":[{"version":"3.0.3","files":[{"file":"/packages/cli-plugin-scaffold-ci/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-extensions/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["devDependencies"]},{"file":"/packages/cli-plugin-scaffold-workspaces/package.json","types":["devDependencies"]}]}]},{"name":"core-js","versions":[{"version":"3.0.1","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"cross-fetch","versions":[{"version":"3.0.4","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"regenerator-runtime","versions":[{"version":"0.13.5","files":[{"file":"/packages/cli-plugin-scaffold-react-app/template/code/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"indent-string","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli-plugin-scaffold-react-component/package.json","types":["dependencies"]}]}]},{"name":"archy","versions":[{"version":"1.0.0","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"color","versions":[{"version":"4.2.3","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"multimatch","versions":[{"version":"5.0.0","files":[{"file":"/packages/cli-plugin-workspaces/package.json","types":["dependencies"]}]}]},{"name":"js-yaml","versions":[{"version":"3.14.1","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"os","versions":[{"version":"0.1.1","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"uuid","versions":[{"version":"8.3.2","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]},{"file":"/packages/global-config/package.json","types":["dependencies"]}]}]},{"name":"yesno","versions":[{"version":"0.4.0","files":[{"file":"/packages/create-webiny-project/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/delimiter","versions":[{"version":"1.2.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/list","versions":[{"version":"1.6.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/quote","versions":[{"version":"2.4.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"@editorjs/underline","versions":[{"version":"1.0.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"theme","versions":[{"version":"1.0.0","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/packages/cwp-template-aws/template/common/apps/website/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/website/package.json","types":["dependencies"]}]}]},{"name":"tslib","versions":[{"version":"2.8.1","files":[{"file":"/packages/cwp-template-aws/template/common/apps/admin/package.json","types":["dependencies"]},{"file":"/apps/admin/package.json","types":["dependencies"]}]}]},{"name":"react-hamburger-menu","versions":[{"version":"1.1.1","files":[{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["dependencies"]},{"file":"/extensions/theme/package.json","types":["dependencies"]}]}]},{"name":"@types/react-hamburger-menu","versions":[{"version":"0.0.4","files":[{"file":"/packages/cwp-template-aws/template/common/extensions/theme/package.json","types":["devDependencies"]},{"file":"/extensions/theme/package.json","types":["devDependencies"]}]}]},{"name":"merge","versions":[{"version":"2.0.0","files":[{"file":"/packages/cwp-template-aws/template/ddb-es/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb-os/dependencies.json","types":["devDependencies"]},{"file":"/packages/cwp-template-aws/template/ddb/dependencies.json","types":["devDependencies"]}]}]},{"name":"center-align","versions":[{"version":"1.0.1","files":[{"file":"/packages/data-migration/package.json","types":["dependencies"]}]}]},{"name":"pino-pretty","versions":[{"version":"9.4.0","files":[{"file":"/packages/data-migration/package.json","types":["dependencies"]},{"file":"/packages/migrations/package.json","types":["dependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"@types/center-align","versions":[{"version":"1.0.0","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]}]}]},{"name":"@types/semver","versions":[{"version":"7.3.4","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]}]}]},{"name":"jest-mock-console","versions":[{"version":"2.0.0","files":[{"file":"/packages/data-migration/package.json","types":["devDependencies"]},{"file":"/packages/handler-graphql/package.json","types":["devDependencies"]}]}]},{"name":"dynamodb-toolbox","versions":[{"version":"0.9.2","files":[{"file":"/packages/db-dynamodb/package.json","types":["dependencies"]}]}]},{"name":"fuse.js","versions":[{"version":"7.0.0","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":"reflect-metadata","versions":[{"version":"0.2.2","files":[{"file":"/packages/di-container/package.json","types":["dependencies"]},{"file":"/packages/ioc/package.json","types":["dependencies"]}]}]},{"name":"@types/uniqid","versions":[{"version":"5.3.2","files":[{"file":"/packages/feature-flags/package.json","types":["devDependencies"]},{"file":"/packages/plugins/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/react","versions":[{"version":"15.0.7","files":[{"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"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/user-event","versions":[{"version":"14.5.2","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@types/invariant","versions":[{"version":"2.2.35","files":[{"file":"/packages/form/package.json","types":["devDependencies"]}]}]},{"name":"@fastify/compress","versions":[{"version":"6.2.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]}]}]},{"name":"@fastify/cookie","versions":[{"version":"8.3.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]}]}]},{"name":"fastify","versions":[{"version":"4.15.0","files":[{"file":"/packages/handler/package.json","types":["dependencies"]},{"file":"/packages/handler-aws/package.json","types":["dependencies"]}]}]},{"name":"@fastify/aws-lambda","versions":[{"version":"3.1.3","files":[{"file":"/packages/handler-aws/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/resolvers-composition","versions":[{"version":"7.0.1","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"@graphql-tools/utils","versions":[{"version":"10.3.1","files":[{"file":"/packages/handler-graphql/package.json","types":["dependencies"]}]}]},{"name":"graphql-scalars","versions":[{"version":"1.12.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":"2.3.3","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"short-hash","versions":[{"version":"1.0.0","files":[{"file":"/packages/i18n/package.json","types":["dependencies"]}]}]},{"name":"@types/accounting","versions":[{"version":"0.4.2","files":[{"file":"/packages/i18n/package.json","types":["devDependencies"]}]}]},{"name":"inversify","versions":[{"version":"6.1.6","files":[{"file":"/packages/ioc/package.json","types":["dependencies"]}]}]},{"name":"@lexical/headless","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"@lexical/html","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-converter/package.json","types":["dependencies"]}]}]},{"name":"lexical","versions":[{"version":"0.16.1","files":[{"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":"@types/jsdom","versions":[{"version":"21.1.6","files":[{"file":"/packages/lexical-converter/package.json","types":["devDependencies"]}]}]},{"name":"@lexical/code","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/history","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/react","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/rich-text","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]},{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/selection","versions":[{"version":"0.16.1","files":[{"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.16.1","files":[{"file":"/packages/lexical-editor/package.json","types":["dependencies"]}]}]},{"name":"@types/react-color","versions":[{"version":"2.17.11","files":[{"file":"/packages/lexical-editor-actions/package.json","types":["devDependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@lexical/hashtag","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/list","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/mark","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@lexical/overflow","versions":[{"version":"0.16.1","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"@types/prismjs","versions":[{"version":"1.26.4","files":[{"file":"/packages/lexical-nodes/package.json","types":["dependencies"]}]}]},{"name":"react-style-object-to-css","versions":[{"version":"1.1.2","files":[{"file":"/packages/lexical-theme/package.json","types":["dependencies"]}]}]},{"name":"pino","versions":[{"version":"8.21.0","files":[{"file":"/packages/logger/package.json","types":["devDependencies"]},{"file":"/packages/project-utils/package.json","types":["devDependencies"]}]}]},{"name":"@pmmmwh/react-refresh-webpack-plugin","versions":[{"version":"0.5.15","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"@types/webpack-env","versions":[{"version":"1.18.5","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"assert-browserify","versions":[{"version":"2.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"buffer","versions":[{"version":"6.0.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"case-sensitive-paths-webpack-plugin","versions":[{"version":"2.4.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"crypto-browserify","versions":[{"version":"3.12.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"css-loader","versions":[{"version":"6.10.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"css-minimizer-webpack-plugin","versions":[{"version":"7.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-config-react-app","versions":[{"version":"6.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"eslint-webpack-plugin","versions":[{"version":"4.2.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"file-loader","versions":[{"version":"6.2.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"fork-ts-checker-webpack-plugin","versions":[{"version":"9.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"html-webpack-plugin","versions":[{"version":"5.6.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"mini-css-extract-plugin","versions":[{"version":"2.4.5","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"null-loader","versions":[{"version":"4.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"os-browserify","versions":[{"version":"0.3.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"path-browserify","versions":[{"version":"1.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-flexbugs-fixes","versions":[{"version":"5.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-loader","versions":[{"version":"6.2.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-normalize","versions":[{"version":"10.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"postcss-preset-env","versions":[{"version":"9.4.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"process","versions":[{"version":"0.11.10","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"raw-loader","versions":[{"version":"4.0.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"react-dev-utils","versions":[{"version":"12.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"react-refresh","versions":[{"version":"0.11.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"read-json-sync","versions":[{"version":"2.0.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"resolve","versions":[{"version":"1.22.8","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"resolve-url-loader","versions":[{"version":"5.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"sass","versions":[{"version":"1.44.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"sass-loader","versions":[{"version":"12.3.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"scheduler","versions":[{"version":"0.19.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"source-map-loader","versions":[{"version":"1.1.3","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"source-map-support","versions":[{"version":"0.5.21","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"style-loader","versions":[{"version":"3.3.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"terser-webpack-plugin","versions":[{"version":"5.3.10","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"ts-patch","versions":[{"version":"3.3.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"url","versions":[{"version":"0.11.4","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"url-loader","versions":[{"version":"4.1.1","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"vm-browserify","versions":[{"version":"1.1.2","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpack","versions":[{"version":"5.97.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"webpack-dev-server","versions":[{"version":"5.1.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpack-manifest-plugin","versions":[{"version":"5.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"webpackbar","versions":[{"version":"7.0.0","files":[{"file":"/packages/project-utils/package.json","types":["dependencies"]}]}]},{"name":"listr2","versions":[{"version":"5.0.8","files":[{"file":"/packages/project-utils/package.json","types":["devDependencies"]},{"file":"/scripts/buildPackages/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/pulumi","versions":[{"version":"3.142.0","files":[{"file":"/packages/pulumi/package.json","types":["dependencies"]},{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/aws","versions":[{"version":"6.64.0","files":[{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]},{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]},{"file":"/packages/serverless-cms-aws/package.json","types":["dependencies"]}]}]},{"name":"@pulumi/random","versions":[{"version":"4.16.7","files":[{"file":"/packages/pulumi-aws/package.json","types":["dependencies"]}]}]},{"name":"decompress","versions":[{"version":"4.2.1","files":[{"file":"/packages/pulumi-sdk/package.json","types":["dependencies"]}]}]},{"name":"identity-obj-proxy","versions":[{"version":"3.0.0","files":[{"file":"/packages/react-rich-text-lexical-renderer/package.json","types":["devDependencies"]}]}]},{"name":"sanitize-html","versions":[{"version":"2.12.1","files":[{"file":"/packages/react-rich-text-renderer/package.json","types":["dependencies"]}]}]},{"name":"@types/sanitize-html","versions":[{"version":"2.9.0","files":[{"file":"/packages/react-rich-text-renderer/package.json","types":["devDependencies"]}]}]},{"name":"react-router-dom","versions":[{"version":"6.3.0","files":[{"file":"/packages/react-router/package.json","types":["dependencies"]}]}]},{"name":"object-merge-advanced","versions":[{"version":"12.1.0","files":[{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"object-sizeof","versions":[{"version":"2.6.4","files":[{"file":"/packages/tasks/package.json","types":["dependencies"]}]}]},{"name":"jsesc","versions":[{"version":"3.0.2","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"strip-ansi","versions":[{"version":"6.0.1","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"wts-client","versions":[{"version":"1.0.1","files":[{"file":"/packages/telemetry/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/button","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/checkbox","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/chip","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/data-table","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/dialog","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/drawer","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/elevation","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/fab","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/grid","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/icon-button","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/list","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/menu","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/radio","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/ripple","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/select","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/slider","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/snackbar","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/switch","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/tabs","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/textfield","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/top-app-bar","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/touch-target","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@rmwc/typography","versions":[{"version":"14.2.2","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@tanstack/react-table","versions":[{"version":"8.5.22","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"brace","versions":[{"version":"0.11.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"cropperjs","versions":[{"version":"1.4.3","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"keycode","versions":[{"version":"2.2.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"material-components-web","versions":[{"version":"14.0.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"nprogress","versions":[{"version":"0.2.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"nuka-carousel","versions":[{"version":"4.7.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"rc-tooltip","versions":[{"version":"5.3.1","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-ace","versions":[{"version":"6.1.4","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"react-loading-skeleton","versions":[{"version":"3.1.0","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"timeago-react","versions":[{"version":"3.0.6","files":[{"file":"/packages/ui/package.json","types":["dependencies"]}]}]},{"name":"@types/nprogress","versions":[{"version":"0.2.0","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-custom-scrollbars","versions":[{"version":"4.0.10","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"@types/react-transition-group","versions":[{"version":"4.4.4","files":[{"file":"/packages/ui/package.json","types":["devDependencies"]}]}]},{"name":"p-wait-for","versions":[{"version":"4.1.0","files":[{"file":"/packages/ui-composer/package.json","types":["dependencies"]}]}]},{"name":"mdbid","versions":[{"version":"1.0.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"nanoid-dictionary","versions":[{"version":"4.3.0","files":[{"file":"/packages/utils/package.json","types":["dependencies"]}]}]},{"name":"isnumeric","versions":[{"version":"0.3.3","files":[{"file":"/packages/validation/package.json","types":["dependencies"]}]}]},{"name":"@4tw/cypress-drag-drop","versions":[{"version":"1.4.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"@testing-library/cypress","versions":[{"version":"10.0.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"amazon-cognito-identity-js","versions":[{"version":"4.5.3","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress","versions":[{"version":"13.16.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":"2.7.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"cypress-wait-until","versions":[{"version":"1.7.1","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"del","versions":[{"version":"6.0.0","files":[{"file":"/cypress-tests/package.json","types":["devDependencies"]}]}]},{"name":"source-map-explorer","versions":[{"version":"2.5.3","files":[{"file":"/apps/website/package.json","types":["devDependencies"]}]}]},{"name":"@types/folder-hash","versions":[{"version":"4.0.4","files":[{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]}]}]},{"name":"@types/yargs","versions":[{"version":"17.0.8","files":[{"file":"/scripts/buildPackages/package.json","types":["devDependencies"]}]}]}]} diff --git a/packages/cli/package.json b/packages/cli/package.json index 774c749977e..87b41e0ac8d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -31,7 +31,7 @@ "pirates": "^4.0.6", "semver": "^7.6.3", "ts-morph": "^11.0.0", - "typescript": "5.7.2", + "typescript": "5.3.3", "uniqid": "^5.4.0", "yargs": "^17.7.2" }, diff --git a/packages/cwp-template-aws/template/ddb-es/dependencies.json b/packages/cwp-template-aws/template/ddb-es/dependencies.json index 17c6f56d522..de64bc55724 100644 --- a/packages/cwp-template-aws/template/ddb-es/dependencies.json +++ b/packages/cwp-template-aws/template/ddb-es/dependencies.json @@ -26,8 +26,8 @@ "@types/node": "^22.10.1", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-module-resolver": "^5.0.2", "chalk": "^4.1.2", @@ -46,7 +46,7 @@ "merge": "^2.0.0", "prettier": "^2.8.8", "ts-jest": "^29.1.2", - "typescript": "4.9.5" + "typescript": "5.3.3" }, "workspaces": { "packages": ["apps/admin", "apps/website", "apps/api/graphql", "packages/*", "extensions/theme"] diff --git a/packages/cwp-template-aws/template/ddb-os/dependencies.json b/packages/cwp-template-aws/template/ddb-os/dependencies.json index 17c6f56d522..de64bc55724 100644 --- a/packages/cwp-template-aws/template/ddb-os/dependencies.json +++ b/packages/cwp-template-aws/template/ddb-os/dependencies.json @@ -26,8 +26,8 @@ "@types/node": "^22.10.1", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-module-resolver": "^5.0.2", "chalk": "^4.1.2", @@ -46,7 +46,7 @@ "merge": "^2.0.0", "prettier": "^2.8.8", "ts-jest": "^29.1.2", - "typescript": "4.9.5" + "typescript": "5.3.3" }, "workspaces": { "packages": ["apps/admin", "apps/website", "apps/api/graphql", "packages/*", "extensions/theme"] diff --git a/packages/cwp-template-aws/template/ddb/dependencies.json b/packages/cwp-template-aws/template/ddb/dependencies.json index a34fb716efb..acb6d50e4ed 100644 --- a/packages/cwp-template-aws/template/ddb/dependencies.json +++ b/packages/cwp-template-aws/template/ddb/dependencies.json @@ -26,8 +26,8 @@ "@types/node": "^22.10.1", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-module-resolver": "^5.0.2", "chalk": "^4.1.2", @@ -46,7 +46,7 @@ "merge": "^2.0.0", "prettier": "^2.8.8", "ts-jest": "^29.1.2", - "typescript": "4.9.5" + "typescript": "5.3.3" }, "workspaces": { "packages": ["apps/admin", "apps/website", "apps/api/graphql", "packages/*", "extensions/theme"] diff --git a/packages/data-migration/package.json b/packages/data-migration/package.json index 8c293590e58..10d3e9f15c9 100644 --- a/packages/data-migration/package.json +++ b/packages/data-migration/package.json @@ -33,7 +33,7 @@ "jest-dynalite": "^3.6.1", "jest-mock-console": "^2.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/data-migration/src/index.ts b/packages/data-migration/src/index.ts index a91ece5490a..faadd8a0414 100644 --- a/packages/data-migration/src/index.ts +++ b/packages/data-migration/src/index.ts @@ -1,6 +1,5 @@ export * from "./handlers/createDdbProjectMigration"; export * from "./handlers/createDdbEsProjectMigration"; -export * from "./symbols"; export * from "./types"; export * from "./createTable"; export * from "./createPinoLogger"; diff --git a/packages/db-dynamodb/package.json b/packages/db-dynamodb/package.json index f6b4c6139b0..e6f5dbc7452 100644 --- a/packages/db-dynamodb/package.json +++ b/packages/db-dynamodb/package.json @@ -30,7 +30,7 @@ "jest": "^29.7.0", "jest-dynalite": "^3.6.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/db/package.json b/packages/db/package.json index 965be89bc05..0e0b370fbd2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -20,7 +20,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/di-container/package.json b/packages/di-container/package.json index 06d6ed154d2..d36688eb063 100644 --- a/packages/di-container/package.json +++ b/packages/di-container/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/error/package.json b/packages/error/package.json index c9464965f6c..8b4f4e70105 100644 --- a/packages/error/package.json +++ b/packages/error/package.json @@ -17,7 +17,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/feature-flags/package.json b/packages/feature-flags/package.json index 4423310876e..11739b29887 100644 --- a/packages/feature-flags/package.json +++ b/packages/feature-flags/package.json @@ -16,7 +16,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/form/package.json b/packages/form/package.json index 6359d099000..3155f8f00a2 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -28,7 +28,7 @@ "mobx": "^6.9.0", "mobx-react-lite": "^3.4.3", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "peerDependencies": { "react": "18.2.0" diff --git a/packages/handler-aws/package.json b/packages/handler-aws/package.json index 557984b99a9..05aa912ce45 100644 --- a/packages/handler-aws/package.json +++ b/packages/handler-aws/package.json @@ -24,7 +24,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/handler-client/package.json b/packages/handler-client/package.json index ec0e29ac7ba..1e0991ce335 100644 --- a/packages/handler-client/package.json +++ b/packages/handler-client/package.json @@ -23,7 +23,7 @@ "@webiny/project-utils": "0.0.0", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/handler-db/package.json b/packages/handler-db/package.json index 517ce09aade..60b97e56f77 100644 --- a/packages/handler-db/package.json +++ b/packages/handler-db/package.json @@ -17,7 +17,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/handler-graphql/package.json b/packages/handler-graphql/package.json index bd73b04cfbd..670fd77d21e 100644 --- a/packages/handler-graphql/package.json +++ b/packages/handler-graphql/package.json @@ -34,7 +34,7 @@ "jest": "^29.7.0", "jest-mock-console": "^2.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/handler-logs/package.json b/packages/handler-logs/package.json index 2479438f23e..d3a197b19e3 100644 --- a/packages/handler-logs/package.json +++ b/packages/handler-logs/package.json @@ -22,7 +22,7 @@ "@webiny/handler-aws": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/handler/package.json b/packages/handler/package.json index 2178213e023..28d7483dd87 100644 --- a/packages/handler/package.json +++ b/packages/handler/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/i18n-react/package.json b/packages/i18n-react/package.json index d8438a33ce8..9fc85b761ec 100644 --- a/packages/i18n-react/package.json +++ b/packages/i18n-react/package.json @@ -21,7 +21,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "peerDependencies": { "react": "18.2.0" diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 88e4c53d82e..db5dc00f11f 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -30,7 +30,7 @@ "@webiny/project-utils": "0.0.0", "glob": "^7.2.3", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/ioc/package.json b/packages/ioc/package.json index 8c87c002e84..bf62d9262af 100644 --- a/packages/ioc/package.json +++ b/packages/ioc/package.json @@ -16,7 +16,7 @@ "devDependencies": { "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2", + "typescript": "5.3.3", "zod": "^3.23.8" }, "publishConfig": { diff --git a/packages/logger/package.json b/packages/logger/package.json index 1eab43ad353..6bd100ba508 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -16,7 +16,7 @@ "@webiny/project-utils": "0.0.0", "pino": "^8.21.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/migrations/package.json b/packages/migrations/package.json index 5a33ec67283..fda2995efc5 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -37,6 +37,6 @@ "@webiny/project-utils": "0.0.0", "elastic-ts": "^0.12.0", "jest-dynalite": "^3.6.1", - "typescript": "5.7.2" + "typescript": "5.3.3" } } diff --git a/packages/migrations/src/migrations/5.35.0/001/FileSettingsMigration.ts b/packages/migrations/src/migrations/5.35.0/001/FileSettingsMigration.ts deleted file mode 100644 index 6de8bf3ac8b..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/FileSettingsMigration.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigrationContext } from "@webiny/data-migration"; -import { createStandardEntity, queryAll, queryOne } from "~/utils"; -import { createTenantEntity } from "./entities/createTenantEntity"; -import { - createLegacySettingsEntity, - createSettingsEntity, - getSettingsData -} from "./entities/createSettingsEntity"; -import { put } from "@webiny/db-dynamodb"; - -export class FileManager_5_35_0_001_FileManagerSettings { - private readonly newSettingsEntity: ReturnType; - private readonly legacySettingsEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.newSettingsEntity = createStandardEntity(table, "FM.Settings"); - this.legacySettingsEntity = createLegacySettingsEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "FM Settings"; - } - - getDescription() { - return ""; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const settings = await queryOne({ - entity: this.legacySettingsEntity, - partitionKey: `T#root#FM#SETTINGS`, - options: { - eq: "default" - } - }); - - if (!settings) { - logger.info(`Settings not found; system is not yet installed.`); - // The system is not yet installed, skip migration. - return false; - } - - const newSettings = await queryOne({ - entity: this.newSettingsEntity, - partitionKey: `T#root#FM#SETTINGS`, - options: { - eq: "A" - } - }); - - if (newSettings) { - logger.info(`Settings record seems to be in order.`); - return false; - } - - return true; - } - - async execute({ logger }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string; name: string }>({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - for (const tenant of tenants) { - const settings = await queryOne({ - entity: this.legacySettingsEntity, - partitionKey: `T#${tenant.id}#FM#SETTINGS`, - options: { - eq: "default" - } - }); - - if (!settings) { - // It's possible that a tenant exists, but it was not yet installed. - logger.info( - `Tenant ${tenant.name} (${tenant.id}) is not installed. Skipping migration of settings.` - ); - continue; - } - - logger.info(`Updating FM settings for tenant ${tenant.name} (${tenant.id}).`); - await put({ - entity: this.newSettingsEntity, - item: { - PK: `T#${tenant.id}#FM#SETTINGS`, - SK: "A", - TYPE: "fm.settings", - data: { - ...getSettingsData(settings), - tenant: tenant.id - } - } - }); - } - } -} diff --git a/packages/migrations/src/migrations/5.35.0/001/ddb-es/FileDataMigration.ts b/packages/migrations/src/migrations/5.35.0/001/ddb-es/FileDataMigration.ts deleted file mode 100644 index 0f2750f9257..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/ddb-es/FileDataMigration.ts +++ /dev/null @@ -1,198 +0,0 @@ -import chunk from "lodash/chunk"; -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { - createStandardEntity, - queryOne, - queryAll, - batchWriteAll, - esQueryAllWithCallback, - esGetIndexName -} from "~/utils"; -import { createFileEntity, getFileData, legacyAttributes } from "../entities/createFileEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { File } from "../types"; - -type FileMigrationCheckpoint = Record; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export class FileManager_5_35_0_001_FileData implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly newFileEntity: ReturnType; - private readonly tenantEntity: ReturnType; - private readonly localeEntity: ReturnType; - - constructor(table: Table, elasticsearchClient: Client) { - this.elasticsearchClient = elasticsearchClient; - this.newFileEntity = createStandardEntity(table, "File", legacyAttributes); - this.tenantEntity = createTenantEntity(table); - this.localeEntity = createLocaleEntity(table); - } - - getId() { - return "FileData"; - } - - getDescription() { - return ""; - } - - async shouldExecute({ logger, checkpoint }: DataMigrationContext): Promise { - if (checkpoint) { - return true; - } - - const defaultLocale = await queryOne<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#root#I18N#L#D`, - options: { - eq: "default" - } - }); - - if (!defaultLocale) { - logger.info(`Default locale not found; system is not yet installed.`); - // The system is not yet installed, skip migration. - return false; - } - - // Check if there are files stored in the GSI1 index, which means files are already migrated. - const PK = `T#root#L#${defaultLocale.code}#FM#FILES`; - const newFile = await queryOne<{ id: string }>({ - entity: this.newFileEntity, - partitionKey: PK, - options: { gt: " ", index: "GSI1" } - }); - - if (newFile) { - logger.info(`Looks like files have already been migrated. Skipping migration.`); - return false; - } - - return true; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string }>({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - const migrationStatus: FileMigrationCheckpoint = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await queryAll<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#${tenant.id}#I18N#L`, - options: { - gt: " " - } - }); - - for (const locale of locales) { - const groupId = `${tenant.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.id, - locale: locale.code, - type: "file-manager" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.id } }, - { term: { "locale.keyword": locale.code } } - ] - } - }, - size: 10000, - sort: [ - { - "id.keyword": "asc" - } - ], - search_after: status - }, - callback: async (files, cursor) => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - const items = files.map(file => { - return this.newFileEntity.putBatch({ - PK: `T#${tenant.id}#L#${locale.code}#FM#F${file.id}`, - SK: "A", - GSI1_PK: `T#${tenant.id}#L#${locale.code}#FM#FILES`, - GSI1_SK: file.id, - TYPE: "fm.file", - ...getFileData(file), - data: { - ...getFileData(file), - webinyVersion: process.env.WEBINY_VERSION - } - }); - }); - - const execute = () => { - return Promise.all( - chunk(items, 200).map(fileChunk => { - return batchWriteAll({ - table: this.newFileEntity.table, - items: fileChunk - }); - }) - ); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } - } - } -} diff --git a/packages/migrations/src/migrations/5.35.0/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.35.0/001/ddb-es/index.ts deleted file mode 100644 index 43dd6f656a7..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/ddb-es/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { FileManager_5_35_0_001_FileData } from "./FileDataMigration"; -import { FileManager_5_35_0_001_FileManagerSettings } from "../FileSettingsMigration"; -export * from "../types"; - -export class FileManager_5_35_0_001 implements DataMigration { - private migrations: DataMigration[]; - - constructor(table: Table, elasticsearchClient: Client) { - this.migrations = [ - new FileManager_5_35_0_001_FileData(table, elasticsearchClient), - new FileManager_5_35_0_001_FileManagerSettings(table) - ]; - } - - getId(): string { - return "5.35.0-001"; - } - - getDescription(): string { - return "Upgrade File Manager to use better PKs and `data` envelope."; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(FileManager_5_35_0_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.35.0/001/ddb/FileDataMigration.ts b/packages/migrations/src/migrations/5.35.0/001/ddb/FileDataMigration.ts deleted file mode 100644 index 75690699bf7..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/ddb/FileDataMigration.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { - createStandardEntity, - queryOne, - queryAll, - ddbQueryAllWithCallback, - batchWriteAll -} from "~/utils"; -import { - createFileEntity, - getFileData, - createLegacyFileEntity -} from "../entities/createFileEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; - -export type FileMigrationCheckpoint = Record; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export class FileManager_5_35_0_001_FileData implements DataMigration { - private readonly newFileEntity: ReturnType; - private readonly legacyFileEntity: ReturnType; - private readonly tenantEntity: ReturnType; - private readonly localeEntity: ReturnType; - - constructor(table: Table) { - this.newFileEntity = createStandardEntity(table, "File"); - this.legacyFileEntity = createLegacyFileEntity(table); - this.tenantEntity = createTenantEntity(table); - this.localeEntity = createLocaleEntity(table); - } - - getId() { - return "FileData"; - } - - getDescription() { - return ""; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const defaultLocale = await queryOne<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#root#I18N#L#D`, - options: { - eq: "default" - } - }); - - if (!defaultLocale) { - logger.info(`Default locale not found; system is not yet installed.`); - // The system is not yet installed, skip migration. - return false; - } - - // Check if there are file records using the old record structure - const PK = `T#root#L#${defaultLocale.code}#FM#F`; - const lastLegacyFile = await queryOne<{ id: string }>({ - entity: this.legacyFileEntity, - partitionKey: PK, - options: { gt: " ", reverse: true } - }); - - if (!lastLegacyFile) { - logger.info(`No applicable files were found to migrate.`); - return false; - } - - if (lastLegacyFile) { - // Check if there's a corresponding new file for the same file ID - const lastNewFile = await queryOne({ - entity: this.newFileEntity, - partitionKey: `T#root#L#${defaultLocale.code}#FM#FILE#${lastLegacyFile.id}`, - options: { - eq: "A" - } - }); - - if (lastNewFile) { - logger.info(`All files seem to be in order.`); - return false; - } - } - - return true; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string }>({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await queryAll<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#${tenant.id}#I18N#L`, - options: { - gt: " " - } - }); - - for (const locale of locales) { - const groupId = `${tenant.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - await ddbQueryAllWithCallback<{ id: string }>( - { - entity: this.legacyFileEntity, - partitionKey: `T#${tenant.id}#L#${locale.code}#FM#F`, - options: { - gt: status || " " - } - }, - async files => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - const items = files.map(file => { - return this.newFileEntity.putBatch({ - PK: `T#${tenant.id}#L#${locale.code}#FM#FILE#${file.id}`, - SK: "A", - GSI1_PK: `T#${tenant.id}#L#${locale.code}#FM#FILES`, - GSI1_SK: file.id, - TYPE: "fm.file", - data: { - ...getFileData(file), - webinyVersion: process.env.WEBINY_VERSION - } - }); - }); - - const execute = () => { - return batchWriteAll({ table: this.newFileEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - const cursor = files[files.length - 1].id; - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } - } - } -} diff --git a/packages/migrations/src/migrations/5.35.0/001/ddb/index.ts b/packages/migrations/src/migrations/5.35.0/001/ddb/index.ts deleted file mode 100644 index 99dafdd62bf..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/ddb/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { FileManager_5_35_0_001_FileData } from "./FileDataMigration"; -import { FileManager_5_35_0_001_FileManagerSettings } from "../FileSettingsMigration"; - -export class FileManager_5_35_0_001 implements DataMigration { - private migrations: DataMigration[]; - - constructor(table: Table) { - this.migrations = [ - new FileManager_5_35_0_001_FileData(table), - new FileManager_5_35_0_001_FileManagerSettings(table) - ]; - } - - getId(): string { - return "5.35.0-001"; - } - - getDescription(): string { - return "Upgrade File Manager to use better PKs and `data` envelope."; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(FileManager_5_35_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/001/entities/createFileEntity.ts b/packages/migrations/src/migrations/5.35.0/001/entities/createFileEntity.ts deleted file mode 100644 index c6722c70693..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/entities/createFileEntity.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import pick from "lodash/pick"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -export const legacyAttributes: Parameters[2] = { - id: { - type: "string" - }, - key: { - type: "string" - }, - size: { - type: "number" - }, - type: { - type: "string" - }, - name: { - type: "string" - }, - meta: { - type: "map" - }, - tags: { - type: "list" - }, - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - webinyVersion: { - type: "string" - } -}; - -export const getFileData = (file: any) => { - return pick(file, Object.keys(legacyAttributes)); -}; - -export const createLegacyFileEntity = (table: Table) => { - return createLegacyEntity(table, "Files", legacyAttributes); -}; - -export const createFileEntity = (table: Table) => { - return createStandardEntity(table, "FM.File"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/001/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.35.0/001/entities/createLocaleEntity.ts deleted file mode 100644 index 0ff04476087..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/entities/createLocaleEntity.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; - -// [ -// { -// PK: "T#root#I18N#L", -// SK: "en-US", -// code: "en-US", -// createdBy: { -// displayName: "Pavel Denisjuk", -// id: "e6ea2871-ba36-4494-87ac-afb73d4e7eb2", -// type: "admin" -// }, -// createdOn: "2023-01-25T09:38:22.029Z", -// default: true, -// tenant: "root", -// webinyVersion: "0.0.0", -// _ct: "2023-01-25T09:38:22.041Z", -// _et: "I18NLocale", -// _md: "2023-01-25T09:38:22.041Z" -// } -// ]; diff --git a/packages/migrations/src/migrations/5.35.0/001/entities/createSettingsEntity.ts b/packages/migrations/src/migrations/5.35.0/001/entities/createSettingsEntity.ts deleted file mode 100644 index c88cdb7bf44..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/entities/createSettingsEntity.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import pick from "lodash/pick"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const attributes: Parameters[2] = { - tenant: { - type: "string" - }, - srcPrefix: { - type: "string" - }, - uploadMaxFileSize: { - type: "number" - }, - uploadMinFileSize: { - type: "number" - } -}; - -export const getSettingsData = (settings: any) => { - return pick(settings, Object.keys(attributes)); -}; - -export const createLegacySettingsEntity = (table: Table) => { - return createLegacyEntity(table, "Settings", attributes); -}; - -export const createSettingsEntity = (table: Table) => { - return createStandardEntity(table, "FM.Settings"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/001/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/001/entities/createTenantEntity.ts deleted file mode 100644 index 77a540c5916..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/entities/createTenantEntity.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createLegacyEntity(table, "TenancyTenant", { - id: { - type: "string" - }, - name: { - type: "string" - }, - description: { - type: "string" - }, - status: { - type: "string", - default: "active" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - parent: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - settings: { - type: "map", - default: {} - } - }); -}; - -// [ -// { -// PK: "T#root", -// SK: "A", -// createdOn: "2023-01-25T09:37:58.183Z", -// description: "The top-level Webiny tenant.", -// GSI1_PK: "TENANTS", -// GSI1_SK: "T#null#2023-01-25T09:37:58.183Z", -// id: "root", -// name: "Root", -// savedOn: "2023-01-25T09:37:58.183Z", -// settings: { -// domains: [] -// }, -// status: "active", -// TYPE: "tenancy.tenant", -// webinyVersion: "0.0.0", -// _ct: "2023-01-25T09:37:58.220Z", -// _et: "TenancyTenant", -// _md: "2023-01-25T09:37:58.220Z" -// } -// ]; diff --git a/packages/migrations/src/migrations/5.35.0/001/types.ts b/packages/migrations/src/migrations/5.35.0/001/types.ts deleted file mode 100644 index 9187c149b7c..00000000000 --- a/packages/migrations/src/migrations/5.35.0/001/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface File { - id: string; - key: string; - size: number; - type: string; - name: string; - meta: Record; - tags: string[]; - createdOn: string; - createdBy: CreatedBy; - tenant: string; - locale: string; - webinyVersion: string; -} - -export interface CreatedBy { - id: string; - displayName: string | null; - type: string; -} diff --git a/packages/migrations/src/migrations/5.35.0/002/createLocaleEntity.ts b/packages/migrations/src/migrations/5.35.0/002/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.35.0/002/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.35.0/002/createSettingsEntity.ts b/packages/migrations/src/migrations/5.35.0/002/createSettingsEntity.ts deleted file mode 100644 index 86c44d1e2c1..00000000000 --- a/packages/migrations/src/migrations/5.35.0/002/createSettingsEntity.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import pick from "lodash/pick"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const attributes: Parameters[2] = { - name: { - type: "string" - }, - websiteUrl: { - type: "string" - }, - websitePreviewUrl: { - type: "string" - }, - favicon: { - type: "map" - }, - logo: { - type: "map" - }, - prerendering: { - type: "map" - }, - social: { - type: "map" - }, - htmlTags: { - type: "map" - }, - pages: { - type: "map" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - theme: { - type: "string" - } -}; - -export const getSettingsData = (settings: any) => { - return pick(settings, Object.keys(attributes)); -}; - -export const createLegacySettingsEntity = (table: Table) => { - return createLegacyEntity(table, "PbSettings", attributes); -}; - -export const createSettingsEntity = (table: Table) => { - return createStandardEntity(table, "PB.Settings"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/002/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/002/createTenantEntity.ts deleted file mode 100644 index 92d093f5100..00000000000 --- a/packages/migrations/src/migrations/5.35.0/002/createTenantEntity.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createLegacyEntity(table, "TenancyTenant", { - id: { - type: "string" - }, - name: { - type: "string" - }, - description: { - type: "string" - }, - status: { - type: "string", - default: "active" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - parent: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - settings: { - type: "map", - default: {} - } - }); -}; diff --git a/packages/migrations/src/migrations/5.35.0/002/index.ts b/packages/migrations/src/migrations/5.35.0/002/index.ts deleted file mode 100644 index 5ef37321acc..00000000000 --- a/packages/migrations/src/migrations/5.35.0/002/index.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigrationContext, PrimaryDynamoTableSymbol } from "@webiny/data-migration"; -import { queryAll, queryOne } from "~/utils"; -import { createTenantEntity } from "./createTenantEntity"; -import { - createLegacySettingsEntity, - createSettingsEntity, - getSettingsData -} from "./createSettingsEntity"; -import { createLocaleEntity } from "./createLocaleEntity"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { put } from "@webiny/db-dynamodb"; - -export class PageBuilder_5_35_0_002 { - private readonly newSettingsEntity: ReturnType; - private readonly legacySettingsEntity: ReturnType; - private readonly tenantEntity: ReturnType; - private readonly localeEntity: ReturnType; - - constructor(table: Table) { - this.newSettingsEntity = createSettingsEntity(table); - this.legacySettingsEntity = createLegacySettingsEntity(table); - this.tenantEntity = createTenantEntity(table); - this.localeEntity = createLocaleEntity(table); - } - - getId() { - return "5.35.0-002"; - } - - getDescription() { - return "Move PB Settings attributes to a `data` envelope."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const defaultLocale = await queryOne<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#root#I18N#L#D`, - options: { - eq: "default" - } - }); - - if (!defaultLocale) { - logger.info(`Default locale not found; system is not yet installed.`); - return false; - } - - const settings = await queryOne({ - entity: this.legacySettingsEntity, - partitionKey: `T#root#L#${defaultLocale.code}#PB#SETTINGS`, - options: { - eq: "default" - } - }); - - if (!settings) { - logger.info(`Settings not found; system is not yet installed.`); - return false; - } - - const newSettings = await queryOne({ - entity: this.newSettingsEntity, - partitionKey: `T#root#L#${defaultLocale.code}#PB#SETTINGS`, - options: { - eq: "A" - } - }); - - if (newSettings) { - logger.info(`Settings record seems to be in order.`); - return false; - } - - return true; - } - - async execute({ logger }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string; name: string }>({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - for (const tenant of tenants) { - const locales = await queryAll<{ code: string }>({ - entity: this.localeEntity, - partitionKey: `T#${tenant.id}#I18N#L`, - options: { - gt: " " - } - }); - - for (const locale of locales) { - const settings = await queryOne({ - entity: this.legacySettingsEntity, - partitionKey: `T#${tenant.id}#L#${locale.code}#PB#SETTINGS`, - options: { - eq: "default" - } - }); - - if (!settings) { - // It's possible that a tenant exists, but it was not yet installed. - logger.info( - `Tenant ${tenant.name} (${tenant.id}) is not installed. Skipping migration of settings.` - ); - continue; - } - - logger.info(`Updating PB settings for tenant ${tenant.name} (${tenant.id}).`); - await put({ - entity: this.newSettingsEntity, - item: { - PK: `T#${tenant.id}#L#${locale.code}#PB#SETTINGS`, - SK: "A", - TYPE: "pb.settings", - data: { - ...getSettingsData(settings), - tenant: tenant.id - } - } - }); - } - } - } -} - -makeInjectable(PageBuilder_5_35_0_002, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/003/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/003/createTenantEntity.ts deleted file mode 100644 index 92d093f5100..00000000000 --- a/packages/migrations/src/migrations/5.35.0/003/createTenantEntity.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createLegacyEntity(table, "TenancyTenant", { - id: { - type: "string" - }, - name: { - type: "string" - }, - description: { - type: "string" - }, - status: { - type: "string", - default: "active" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - parent: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - settings: { - type: "map", - default: {} - } - }); -}; diff --git a/packages/migrations/src/migrations/5.35.0/003/createUserEntity.ts b/packages/migrations/src/migrations/5.35.0/003/createUserEntity.ts deleted file mode 100644 index 7666e6bf229..00000000000 --- a/packages/migrations/src/migrations/5.35.0/003/createUserEntity.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import pick from "lodash/pick"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const attributes: Parameters[2] = { - id: { - type: "string" - }, - tenant: { - type: "string" - }, - email: { - type: "string" - }, - firstName: { - type: "string" - }, - lastName: { - type: "string" - }, - avatar: { - type: "map" - }, - createdBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - group: { - type: "string" - }, - webinyVersion: { - type: "string" - } -}; - -export const getUserData = (user: any) => { - return pick(user, Object.keys(attributes)); -}; - -export const createLegacyUserEntity = (table: Table) => { - return createLegacyEntity(table, "AdminUsers.User", attributes); -}; - -export const createUserEntity = (table: Table) => { - return createStandardEntity(table, "AdminUsers.User", attributes); -}; diff --git a/packages/migrations/src/migrations/5.35.0/003/index.ts b/packages/migrations/src/migrations/5.35.0/003/index.ts deleted file mode 100644 index 562a703c3ba..00000000000 --- a/packages/migrations/src/migrations/5.35.0/003/index.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigrationContext, PrimaryDynamoTableSymbol } from "@webiny/data-migration"; -import { queryOne, queryAll, batchWriteAll } from "~/utils"; -import { createTenantEntity } from "./createTenantEntity"; -import { createLegacyUserEntity, createUserEntity, getUserData } from "./createUserEntity"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; - -export class AdminUsers_5_35_0_003 { - private readonly newUserEntity: ReturnType; - private readonly legacyUserEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.newUserEntity = createUserEntity(table); - this.legacyUserEntity = createLegacyUserEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "5.35.0-003"; - } - - getDescription() { - return "Move admin users attributes to a `data` envelope."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const user = await queryOne<{ data: any }>({ - entity: this.newUserEntity, - partitionKey: `T#root#ADMIN_USERS`, - options: { - index: "GSI1", - gt: " " - } - }); - - if (!user) { - logger.info(`No users were found; skipping migration.`); - return false; - } - - if (user.data) { - logger.info(`User records seems to be in order; skipping migration.`); - return false; - } - - return true; - } - - async execute({ logger }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string; name: string }>({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - for (const tenant of tenants) { - const users = await queryAll<{ id: string; email: string; data?: any }>({ - entity: this.legacyUserEntity, - partitionKey: `T#${tenant.id}#ADMIN_USERS`, - options: { - index: "GSI1", - gt: " " - } - }); - - if (users.length === 0) { - logger.info(`No users found on tenant "${tenant.id}".`); - continue; - } - - const newUsers = users - .filter(user => !user.data) - .map(user => { - return this.newUserEntity.putBatch({ - PK: `T#${tenant.id}#ADMIN_USER#${user.id}`, - SK: "A", - GSI1_PK: `T#${tenant.id}#ADMIN_USERS`, - GSI1_SK: user.email, - TYPE: "adminUsers.user", - ...getUserData(user), - // Move all data to a `data` envelope - data: getUserData(user) - }); - }); - - await executeWithRetry(() => - batchWriteAll({ table: this.newUserEntity.table, items: newUsers }) - ); - } - } -} - -makeInjectable(AdminUsers_5_35_0_003, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/004/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/004/createTenantEntity.ts deleted file mode 100644 index 9e47c87e0d4..00000000000 --- a/packages/migrations/src/migrations/5.35.0/004/createTenantEntity.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import pick from "lodash/pick"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const attributes: Parameters[2] = { - id: { - type: "string" - }, - name: { - type: "string" - }, - description: { - type: "string" - }, - status: { - type: "string", - default: "active" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - parent: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - settings: { - type: "map", - default: {} - } -}; - -export const getTenantData = (tenant: any) => { - return pick(tenant, Object.keys(attributes)); -}; - -export const createLegacyTenantEntity = (table: Table) => { - return createLegacyEntity(table, "TenancyTenant", attributes); -}; - -export const createNewTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant", attributes); -}; diff --git a/packages/migrations/src/migrations/5.35.0/004/index.ts b/packages/migrations/src/migrations/5.35.0/004/index.ts deleted file mode 100644 index e4db43654b7..00000000000 --- a/packages/migrations/src/migrations/5.35.0/004/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { DataMigrationContext, PrimaryDynamoTableSymbol } from "@webiny/data-migration"; -import { queryAll, queryOne } from "~/utils"; -import { - createLegacyTenantEntity, - createNewTenantEntity, - getTenantData -} from "./createTenantEntity"; -import { put } from "@webiny/db-dynamodb"; - -export class Tenancy_5_35_0_004 { - private readonly legacyTenantEntity: ReturnType; - private readonly newTenantEntity: ReturnType; - - constructor(table: Table) { - this.legacyTenantEntity = createLegacyTenantEntity(table); - this.newTenantEntity = createNewTenantEntity(table); - } - - getId() { - return "5.35.0-004"; - } - - getDescription() { - return "Move tenant attributes to a `data` envelope."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenant = await queryOne<{ data: any }>({ - entity: this.legacyTenantEntity, - partitionKey: `TENANTS`, - options: { - index: "GSI1", - gt: " " - } - }); - - if (!tenant) { - logger.info(`No tenants were found; skipping migration.`); - return false; - } - - if (tenant.data) { - logger.info(`Tenant records seems to be in order; skipping migration.`); - return false; - } - - return true; - } - - async execute({ logger }: DataMigrationContext): Promise { - const tenants = await queryAll<{ id: string; name: string }>({ - entity: this.legacyTenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gt: " " - } - }); - - for (const tenant of tenants) { - logger.info(`Updating tenant ${tenant.name} (${tenant.id}).`); - await put({ - entity: this.newTenantEntity, - item: { - PK: `T#${tenant.id}`, - SK: "A", - GSI1_PK: tenant.GSI1_PK, - GSI1_SK: tenant.GSI1_SK, - TYPE: tenant.TYPE, - ...getTenantData(tenant), - // Move all data to a `data` envelope - data: { - ...getTenantData(tenant), - // While we're here, add a `tags` attribute to tenants - tags: [] - } - } - }); - } - } -} - -makeInjectable(Tenancy_5_35_0_004, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/005/createLocaleEntity.ts b/packages/migrations/src/migrations/5.35.0/005/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.35.0/005/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.35.0/005/createModelEntity.ts b/packages/migrations/src/migrations/5.35.0/005/createModelEntity.ts deleted file mode 100644 index 70aa82af92f..00000000000 --- a/packages/migrations/src/migrations/5.35.0/005/createModelEntity.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -const attributes: Parameters[2] = { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - TYPE: { - type: "string", - required: true - }, - webinyVersion: { - type: "string", - required: true - }, - name: { - type: "string", - required: true - }, - modelId: { - type: "string", - required: true - }, - singularApiName: { - type: "string", - required: true - }, - pluralApiName: { - type: "string", - required: true - }, - locale: { - type: "string", - required: true - }, - group: { - type: "map", - required: true - }, - icon: { - type: "string" - }, - description: { - type: "string" - }, - createdOn: { - type: "string", - required: true - }, - savedOn: { - type: "string", - required: true - }, - createdBy: { - type: "map", - required: true - }, - fields: { - type: "list", - required: true - }, - layout: { - type: "list", - required: true - }, - tags: { - type: "list", - required: false, - default: [] - }, - lockedFields: { - type: "list", - required: true - }, - titleFieldId: { - type: "string" - }, - descriptionFieldId: { - type: "string" - }, - imageFieldId: { - type: "string" - }, - tenant: { - type: "string", - required: true - } -}; - -export const createModelEntity = (table: Table) => { - return createLegacyEntity(table, "CmsModels", attributes); -}; diff --git a/packages/migrations/src/migrations/5.35.0/005/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/005/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.35.0/005/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/005/index.ts b/packages/migrations/src/migrations/5.35.0/005/index.ts deleted file mode 100644 index f02cd1e77c8..00000000000 --- a/packages/migrations/src/migrations/5.35.0/005/index.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { DataMigrationContext, PrimaryDynamoTableSymbol } from "@webiny/data-migration"; -import { queryAll, batchWriteAll } from "~/utils"; -import { createModelEntity } from "./createModelEntity"; -import { createTenantEntity } from "./createTenantEntity"; -import { createLocaleEntity } from "./createLocaleEntity"; -import { Tenant, I18NLocale, CmsModel } from "./types"; -import pluralize from "pluralize"; -import upperFirst from "lodash/upperFirst"; -import camelCase from "lodash/camelCase"; - -const createSingularApiName = (model: CmsModel) => { - return upperFirst(camelCase(model.modelId)); -}; - -const createPluralApiName = (model: CmsModel) => { - return pluralize(createSingularApiName(model)); -}; - -interface ListLocalesParams { - tenant: Tenant; -} - -interface ListModelsParams { - tenant: Tenant; - locale: I18NLocale; -} - -export class CmsModels_5_35_0_005 { - private readonly modelEntity: ReturnType; - private readonly tenantEntity: ReturnType; - private readonly localeEntity: ReturnType; - - public constructor(table: Table) { - this.modelEntity = createModelEntity(table); - this.tenantEntity = createTenantEntity(table); - this.localeEntity = createLocaleEntity(table); - } - - public getId() { - return "5.35.0-005"; - } - - public getDescription() { - return "Add singular and plural API names to the CMS Model entity"; - } - - public async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - for (const locale of locales) { - const models = (await this.listModels({ tenant, locale })).filter(model => { - return !model.singularApiName || !model.pluralApiName; - }); - if (models.length === 0) { - logger.info( - `No models, to be updated, found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - public async execute({ logger }: DataMigrationContext): Promise { - const models: CmsModel[] = []; - const tenants = await this.listTenants(); - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - for (const locale of locales) { - const items = (await this.listModels({ tenant, locale })).filter(model => { - return !model.singularApiName || !model.pluralApiName; - }); - models.push(...items); - } - } - if (models.length === 0) { - logger.info(`No models to be updated; skipping migration.`); - return; - } - - const items = models.map(model => { - return this.modelEntity.putBatch({ - ...model, - /** - * Add singular and plural API names. - */ - singularApiName: createSingularApiName(model), - pluralApiName: createPluralApiName(model) - }); - }); - logger.info(`Updating total of ${items.length} models.`); - - await batchWriteAll({ - table: this.modelEntity.table, - items - }); - logger.info("Updated all the models."); - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private async listModels({ tenant, locale }: ListModelsParams): Promise { - return await queryAll({ - entity: this.modelEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CM`, - options: { - gte: " " - } - }); - } -} - -makeInjectable(CmsModels_5_35_0_005, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/005/types.ts b/packages/migrations/src/migrations/5.35.0/005/types.ts deleted file mode 100644 index 4a93f92820c..00000000000 --- a/packages/migrations/src/migrations/5.35.0/005/types.ts +++ /dev/null @@ -1,44 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface CmsModel { - PK: string; - SK: string; - TYPE: string; - _ct: string; - _et: string; - _md: string; - name: string; - modelId: string; - singularApiName?: string; - pluralApiName?: string; - tenant: string; - locale: string; - group: { - id: string; - name: string; - }; - icon?: string | null; - description: string; - createdOn?: string; - savedOn?: string; - createdBy: { - id: string; - type: string; - displayName: string; - }; - fields: any[]; - layout: string[][]; - tags?: string[]; - lockedFields: any[]; - titleFieldId: string; - webinyVersion: string; -} - -export interface I18NLocale { - code: string; -} diff --git a/packages/migrations/src/migrations/5.35.0/006/constants.ts b/packages/migrations/src/migrations/5.35.0/006/constants.ts deleted file mode 100644 index a0449fcb8a6..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const ROOT_FOLDER = "ROOT"; -export const PB_PAGE_TYPE = "PbPage"; -export const ACO_SEARCH_MODEL_ID = "acoSearchRecord"; diff --git a/packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts b/packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts deleted file mode 100644 index 85f006245f8..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts +++ /dev/null @@ -1,471 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { executeWithRetry } from "@webiny/utils"; - -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { - createDdbEntryEntity, - createDdbEsEntryEntity -} from "~/migrations/5.35.0/006/entities/createEntryEntity"; -import { - createDdbEsPageEntity, - createDdbPageEntity -} from "~/migrations/5.35.0/006/entities/createPageEntity"; -import { getSearchablePageContent } from "~/migrations/5.35.0/006/utils/getSearchableContent"; -import { getCompressedData } from "~/migrations/5.35.0/006/utils/getCompressedData"; - -import { - batchWriteAll, - BatchWriteItem, - esCreateIndex, - esFindOne, - esGetIndexExist, - esGetIndexName, - esQueryAllWithCallback, - queryAll, - queryOne -} from "~/utils"; - -import { I18NLocale, ListLocalesParams, Page, Tenant } from "../types"; - -import { ACO_SEARCH_MODEL_ID, PB_PAGE_TYPE, ROOT_FOLDER } from "../constants"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type PageDataMigrationCheckpoint = Record; - -export class AcoRecords_5_35_0_006_PageData implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly ddbPageEntity: ReturnType; - private readonly ddbEsPageEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.ddbPageEntity = createDdbPageEntity(table); - this.ddbEsPageEntity = createDdbEsPageEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "PageData"; - } - - getDescription() { - return "Migrate PbPage Data -> Create ACO Search Records"; - } - - async shouldExecute({ logger, forceExecute }: DataMigrationContext): Promise { - if (forceExecute) { - return true; - } - - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - // there is an index? NO -> skip - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder", - isHeadlessCmsModel: false - }); - - if (!indexExists) { - logger.info( - `No elastic search index found for pages in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - // Fetch latest page record from ES - const latestPage = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } }, - { term: { "__type.keyword": "page" } }, - { term: { latest: true } } - ] - } - }, - sort: [ - { - "id.keyword": "asc" - } - ] - } - }); - - if (!latestPage) { - logger.info( - `No pages found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - // Fetch latest aco search record from DDB using latest page "pid" - const latestSearchRecord = await queryOne<{ id: string }>({ - entity: this.ddbEntryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#wby-aco-${latestPage.pid}`, - options: { - eq: "L" - } - }); - - if (latestSearchRecord) { - logger.info( - `Pages already migrated to Search Records in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus: PageDataMigrationCheckpoint = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - - // Since it's the first time we add an ACO record, we also need to create the index - await esCreateIndex({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: "acosearchrecord", - isHeadlessCmsModel: true - }); - - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } }, - { term: { "__type.keyword": "page" } }, - { term: { latest: true } } - ] - } - }, - size: 500, - sort: [ - { - "id.keyword": "asc" - } - ], - search_after: status - }, - callback: async (pages, cursor) => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${pages.length} pages).` - ); - - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - for (const page of pages) { - const ddbPage = await queryOne({ - entity: this.ddbPageEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#PB#P#${page.pid}`, - options: { - eq: "L" - } - }); - - /** - * If the content is `gzip`, it means this page is created with the latest version - * of Webiny, and we don't need to migrate it. - */ - if (ddbPage.content?.compression === "gzip") { - continue; - } - - const { - createdBy, - createdOn, - locale: pageLocale, - locked, - path, - pid, - savedOn, - status, - tenant: pageTenant, - title, - version, - settings - } = ddbPage; - - const entry = await this.createSearchRecordCommonFields(ddbPage); - const content = await getSearchablePageContent(ddbPage); - - const rawData = { - modelId: ACO_SEARCH_MODEL_ID, - version: 1, - savedOn, - locale: pageLocale, - status: "draft", - values: { - "text@type": PB_PAGE_TYPE, - "text@title": title, - "text@content": content, - "text@tags": settings.general?.tags || [], - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "wby-aco-json@data": { - id: `${pid}#0001`, - pid, - title, - createdBy, - createdOn, - savedOn, - status, - version, - locked, - path - } - }, - createdBy, - entryId: `wby-aco-${pid}`, - tenant: pageTenant, - createdOn, - locked: false, - ownedBy: createdBy, - webinyVersion: process.env.WEBINY_VERSION, - id: `wby-aco-${pid}#0001`, - modifiedBy: createdBy, - latest: true, - TYPE: "cms.entry.l", - __type: "cms.entry.l", - rawValues: { - "object@location": {} - } - }; - - const latestDdb = { - PK: `T#${pageTenant}#L#${pageLocale}#CMS#CME#wby-aco-${pid}`, - SK: "L", - TYPE: "L", - ...entry - }; - - const revisionDdb = { - PK: `T#${pageTenant}#L#${pageLocale}#CMS#CME#wby-aco-${pid}`, - SK: "REV#0001", - TYPE: "cms.entry", - ...entry - }; - - const latestDdbEs = { - PK: `T#${pageTenant}#L#${pageLocale}#CMS#CME#wby-aco-${pid}`, - SK: "L", - data: await getCompressedData(rawData), - index: esGetIndexName({ - tenant: pageTenant, - locale: pageLocale, - type: "acosearchrecord", - isHeadlessCmsModel: true - }) - }; - - ddbItems.push( - this.ddbEntryEntity.putBatch(latestDdb), - this.ddbEntryEntity.putBatch(revisionDdb) - ); - - ddbEsItems.push(this.ddbEsEntryEntity.putBatch(latestDdbEs)); - } - - const executeDdb = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - await executeWithRetry(executeDdb, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private async createSearchRecordCommonFields(page: Page) { - const { - createdBy, - createdOn, - id, - locale, - locked, - path, - pid, - savedOn, - status, - tenant, - title, - version, - settings - } = page; - - const content = await getSearchablePageContent(page); - - return { - createdBy, - createdOn, - entryId: `wby-aco-${pid}`, - id: `wby-aco-${pid}#0001`, - locale, - locked: false, - modelId: ACO_SEARCH_MODEL_ID, - modifiedBy: createdBy, - ownedBy: createdBy, - savedOn, - status: "draft", - tenant, - version: 1, - webinyVersion: process.env.WEBINY_VERSION, - values: { - "text@title": title, - "text@content": content, - "wby-aco-json@data": { - createdBy, - createdOn, - id, - locked, - path, - pid, - savedOn, - status, - title, - version - }, - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "text@tags": settings.general?.tags || [], - "text@type": PB_PAGE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.35.0/006/ddb-es/index.ts b/packages/migrations/src/migrations/5.35.0/006/ddb-es/index.ts deleted file mode 100644 index fea4d5e5bf1..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/ddb-es/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { AcoRecords_5_35_0_006_PageData } from "./PageDataMigration"; -export * from "../types"; - -export class AcoRecords_5_35_0_006 implements DataMigration { - private migrations: DataMigration[]; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.migrations = [new AcoRecords_5_35_0_006_PageData(table, esTable, elasticsearchClient)]; - } - - getId(): string { - return "5.35.0-006"; - } - - getDescription(): string { - return "ACO search record migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_35_0_006, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts b/packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts deleted file mode 100644 index bd666f99bb9..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; - -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createDdbPageEntity } from "../entities/createPageEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { getSearchablePageContent } from "../utils/getSearchableContent"; - -import { I18NLocale, ListLocalesParams, Page, Tenant } from "../types"; -import { batchWriteAll, ddbQueryAllWithCallback, queryAll, queryOne } from "~/utils"; -import { ACO_SEARCH_MODEL_ID, PB_PAGE_TYPE, ROOT_FOLDER } from "../constants"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type PageDataMigrationCheckpoint = Record; - -export class AcoRecords_5_35_0_006_PageData implements DataMigration { - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly pageEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.pageEntity = createDdbPageEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "PageData"; - } - - getDescription() { - return "Migrate PbPage Data -> Create ACO Search Records"; - } - - async shouldExecute({ logger, forceExecute }: DataMigrationContext): Promise { - if (forceExecute) { - return true; - } - - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - //TODO: check this query - const lastPage = await queryOne<{ pid: string }>({ - entity: this.pageEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#PB#L`, - options: { gt: " ", reverse: true } - }); - - if (!lastPage) { - logger.info( - `No pages found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - const lastSearchRecord = await queryOne<{ id: string }>({ - entity: this.entryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#CME#wby-aco-${lastPage.pid}`, - options: { - eq: "L" - } - }); - - if (lastSearchRecord) { - logger.info( - `Pages already migrated to Search Records in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - await ddbQueryAllWithCallback( - { - entity: this.pageEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#PB#L`, - options: { - gt: status || " " - } - }, - async pages => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${pages.length} pages).` - ); - - const items = await pages.reduce( - async (accumulator: Promise, current) => { - const { pid, tenant, locale } = current; - - /** - * If the content is `gzip`, it means this page is created with the latest version - * of Webiny, and we don't need to migrate it. - */ - if (current.content?.compression === "gzip") { - return await accumulator; - } - - const entry = await this.createSearchRecordCommonFields(current); - - const latestEntry = { - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${pid}`, - SK: "L", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#acoSearchRecord#L`, - GSI1_SK: `wby-aco-${pid}#0001`, - TYPE: "cms.entry.l", - ...entry - }; - - const revisionEntry = { - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${pid}`, - SK: "REV#0001", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#acoSearchRecord#A`, - GSI1_SK: `wby-aco-${pid}#0001`, - TYPE: "cms.entry", - ...entry - }; - - const acc = await accumulator; - - return [ - ...acc, - this.entryEntity.putBatch(latestEntry), - this.entryEntity.putBatch(revisionEntry) - ]; - }, - Promise.resolve([]) - ); - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - const cursor = pages[pages.length - 1]?.id ?? true; - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private async createSearchRecordCommonFields(page: Page) { - const { - createdBy, - createdOn, - id, - locale, - locked, - path, - pid, - savedOn, - status, - tenant, - title, - version, - settings - } = page; - - const content = await getSearchablePageContent(page); - - return { - createdBy, - createdOn, - entryId: `wby-aco-${pid}`, - id: `wby-aco-${pid}#0001`, - locale, - locked: false, - modelId: ACO_SEARCH_MODEL_ID, - modifiedBy: createdBy, - ownedBy: createdBy, - savedOn, - status: "draft", - tenant, - version: 1, - webinyVersion: process.env.WEBINY_VERSION, - values: { - "text@title": title, - "text@content": content, - "wby-aco-json@data": { - createdBy, - createdOn, - id, - locked, - path, - pid, - savedOn, - status, - title, - version - }, - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "text@tags": settings.general?.tags || [], - "text@type": PB_PAGE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.35.0/006/ddb/index.ts b/packages/migrations/src/migrations/5.35.0/006/ddb/index.ts deleted file mode 100644 index 17646210749..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/ddb/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { AcoRecords_5_35_0_006_PageData } from "./PageDataMigration"; - -export class AcoRecords_5_35_0_006 implements DataMigration { - private migrations: DataMigration[]; - - public constructor(table: Table) { - this.migrations = [new AcoRecords_5_35_0_006_PageData(table)]; - } - - public getId() { - return "5.35.0-006"; - } - - public getDescription() { - return "ACO search record migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_35_0_006, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.35.0/006/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.35.0/006/entities/createEntryEntity.ts deleted file mode 100644 index cc0df8f7812..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/entities/createEntryEntity.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.35.0/006/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/entities/createPageEntity.ts b/packages/migrations/src/migrations/5.35.0/006/entities/createPageEntity.ts deleted file mode 100644 index 3cbcffe2a40..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/entities/createPageEntity.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - pid: { - type: "string" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - title: { - type: "string" - }, - titleLC: { - type: "string" - }, - editor: { - type: "string" - }, - createdFrom: { - type: "string" - }, - path: { - type: "string" - }, - category: { - type: "string" - }, - content: { - type: "map" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - settings: { - type: "map" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - webinyVersion: { - type: "string" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbPageEntity = (table: Table) => { - return createLegacyEntity(table, "PbPages", ddbAttributes); -}; - -export const createDdbEsPageEntity = (table: Table) => { - return createStandardEntity(table, "PbPagesEs", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.35.0/006/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/types.ts b/packages/migrations/src/migrations/5.35.0/006/types.ts deleted file mode 100644 index 83ffdc09252..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/types.ts +++ /dev/null @@ -1,94 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; -} - -export interface PageSettings { - social?: { - title: string; - description: string; - image: File; - meta: Array<{ property: string; content: string }>; - }; - seo?: { - title: string; - description: string; - meta: Array<{ name: string; content: string }>; - }; - general?: { - tags?: string[]; - snippet?: string; - layout?: string; - image?: File; - }; - [key: string]: any; -} - -export type PageStatus = "published" | "unpublished" | "draft"; - -export interface Page { - id: string; - pid: string; - locale: string; - tenant: string; - title: string; - editor: string; - createdFrom: string | null; - path: string; - category: string; - content: Record | null; - publishedOn: string | null; - version: number; - settings: PageSettings; - locked: boolean; - status: string; - createdOn: string; - savedOn: string; - createdBy: Identity; - ownedBy: Identity; - webinyVersion: string; -} - -export interface ListLocalesParams { - tenant: Tenant; -} diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.35.0/006/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/getLexicalContentText.ts b/packages/migrations/src/migrations/5.35.0/006/utils/getLexicalContentText.ts deleted file mode 100644 index 0b0743d4fab..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/getLexicalContentText.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const getLexicalContentText = (value: string): string => { - try { - const content = JSON.parse(value); - return traverse(content, "text"); - } catch { - return value; - } -}; - -const traverse = (content: Record, key: string): string => { - if (content.hasOwnProperty(key)) { - return content[key]; - } - - if (Array.isArray(content)) { - return content.map(c => traverse(c, key)).join(" "); - } - - for (const property in content) { - return traverse(content[property], key); - } - - return ""; -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/getSearchableContent.ts b/packages/migrations/src/migrations/5.35.0/006/utils/getSearchableContent.ts deleted file mode 100644 index fc71ad502b8..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/getSearchableContent.ts +++ /dev/null @@ -1,53 +0,0 @@ -import jsonpack from "jsonpack"; - -import { processors } from "~/migrations/5.35.0/006/utils/processors"; - -import { Page } from "../types"; - -export interface CompressedValue { - compression: string; - content: string | null; -} - -const decompress = (page: Pick): Promise | null => { - if (!page || !page.content) { - return null; - } - try { - return jsonpack.unpack(page.content.content); - } catch (ex) { - console.log(`Error while decompressing page content: ${ex.message}`); - return null; - } -}; - -export async function getSearchablePageContent( - page: Pick -): Promise { - const result = [page.title]; - - const content = await decompress(page); - - if (content) { - for (const block of content.elements) { - await traverse(block, async (element: Record) => { - for (const processor of processors) { - const processed = processor(element); - result.push(processed); - } - }); - } - } - - return result.filter(Boolean).join(" ").trim(); -} - -async function traverse(element: Record, callback: any) { - if (element.type !== "block") { - await callback(element); - } - - for (const child of element.elements || []) { - await traverse(child, callback); - } -} diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/processors/button.ts b/packages/migrations/src/migrations/5.35.0/006/utils/processors/button.ts deleted file mode 100644 index 789747aaeb8..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/processors/button.ts +++ /dev/null @@ -1,9 +0,0 @@ -import get from "lodash/get"; - -export const buttonProcessor = (element: Record) => { - if (element.type !== "button") { - return ""; - } - - return get(element, "data.buttonText"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/processors/image.ts b/packages/migrations/src/migrations/5.35.0/006/utils/processors/image.ts deleted file mode 100644 index f66600e391e..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/processors/image.ts +++ /dev/null @@ -1,9 +0,0 @@ -import get from "lodash/get"; - -export const imageProcessor = (element: Record) => { - if (element.type !== "image") { - return ""; - } - - return get(element, "data.image.title"); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/processors/images.ts b/packages/migrations/src/migrations/5.35.0/006/utils/processors/images.ts deleted file mode 100644 index fd81dbe7b4a..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/processors/images.ts +++ /dev/null @@ -1,20 +0,0 @@ -import get from "lodash/get"; - -interface Image { - id: string; - src: string; - name: string; -} - -export const imagesProcessor = (element: Record) => { - if (element.type !== "images-list") { - return ""; - } - - const images: Image[] = get(element, "data.images", []); - - return images - .filter(Boolean) - .map(image => image.name) - .join(" "); -}; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/processors/index.ts b/packages/migrations/src/migrations/5.35.0/006/utils/processors/index.ts deleted file mode 100644 index f9301077c08..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/processors/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { buttonProcessor } from "./button"; -import { imageProcessor } from "./image"; -import { imagesProcessor } from "./images"; -import { paragraphProcessor } from "./paragraph"; - -export const processors = [buttonProcessor, imageProcessor, imagesProcessor, paragraphProcessor]; diff --git a/packages/migrations/src/migrations/5.35.0/006/utils/processors/paragraph.ts b/packages/migrations/src/migrations/5.35.0/006/utils/processors/paragraph.ts deleted file mode 100644 index 533d48e6ae6..00000000000 --- a/packages/migrations/src/migrations/5.35.0/006/utils/processors/paragraph.ts +++ /dev/null @@ -1,21 +0,0 @@ -import get from "lodash/get"; - -import { getLexicalContentText } from "../getLexicalContentText"; - -const supportedTypes = ["paragraph", "heading", "quote", "list"]; - -export const paragraphProcessor = (element: Record) => { - if (!supportedTypes.includes(element.type)) { - return ""; - } - - const value = get(element, "data.text.data.text"); - // Get text from Lexical Editor JSON string. - const text = getLexicalContentText(value); - - return text - .replace(/(<([^>]+)>)/gi, "") // Remove any HTML tag - .replace(/(\n)|(\r)|(\r\n)/gi, "") // Remove any new line char - .replace(/([ ]{2,})/gi, " ") // Replace multiple spaces with one space only - .trim(); -}; diff --git a/packages/migrations/src/migrations/5.36.0/001/constants.ts b/packages/migrations/src/migrations/5.36.0/001/constants.ts deleted file mode 100644 index 4551547b628..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const ROOT_FOLDER = "ROOT"; -export const FM_FILE_TYPE = "FmFile"; -export const ACO_SEARCH_MODEL_ID = "acoSearchRecord"; diff --git a/packages/migrations/src/migrations/5.36.0/001/ddb-es/FileDataMigration.ts b/packages/migrations/src/migrations/5.36.0/001/ddb-es/FileDataMigration.ts deleted file mode 100644 index 04c8480e14c..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/ddb-es/FileDataMigration.ts +++ /dev/null @@ -1,473 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { executeWithRetry } from "@webiny/utils"; -import chunk from "lodash/chunk"; - -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { - createDdbEntryEntity, - createDdbEsEntryEntity -} from "~/migrations/5.36.0/001/entities/createEntryEntity"; -import { addMimeTag } from "~/migrations/5.36.0/001/utils/createMimeTag"; -import { getCompressedData } from "~/migrations/5.36.0/001/utils/getCompressedData"; - -import { - batchWriteAll, - esFindOne, - esGetIndexExist, - esGetIndexName, - esGetIndexSettings, - esPutIndexSettings, - esQueryAllWithCallback, - queryAll, - queryOne -} from "~/utils"; - -import { I18NLocale, ListLocalesParams, File, Tenant } from "../types"; - -import { ACO_SEARCH_MODEL_ID, FM_FILE_TYPE, ROOT_FOLDER } from "../constants"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type FileDataMigrationCheckpoint = Record; - -export class AcoRecords_5_36_0_001_FileData implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "FileData"; - } - - getDescription() { - return "Migrate FmFile Data -> Create ACO Search Records"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - // there is an index? NO -> skip - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager", - isHeadlessCmsModel: false - }); - - if (!indexExists) { - logger.info( - `No elastic search index found for files in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - // Fetch latest file record from ES - const latestFile = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } } - ] - } - }, - sort: [ - { - "id.keyword": { order: "asc", unmapped_type: "keyword" } - } - ] - } - }); - - if (!latestFile) { - logger.info( - `No files found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - // Fetch latest aco search record from DDB using latest file "id" - const latestSearchRecord = await queryOne<{ id: string }>({ - entity: this.ddbEntryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#wby-aco-${latestFile.id}`, - options: { - eq: "L" - } - }); - - if (latestSearchRecord) { - logger.info( - `Files already migrated to Search Records in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus: FileDataMigrationCheckpoint = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - - const acoIndex = esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "acosearchrecord", - isHeadlessCmsModel: true - }); - - // Saving ACO index settings, we are going to reset them and save the original ones later - const settings = await esGetIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index: acoIndex, - fields: ["number_of_replicas", "refresh_interval"] - }); - - await esPutIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index: acoIndex, - settings: { - number_of_replicas: 0, - refresh_interval: -1 - } - }); - - try { - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } } - ] - } - }, - size: 10000, - sort: [ - { - "id.keyword": "asc" - } - ], - search_after: status - }, - callback: async (files, cursor) => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const ddbItems: Array | null | undefined = []; - const ddbEsItems: Array | null | undefined = []; - - for (const file of files) { - const { - tenant: fileTenant, - id, - key, - size, - type, - name, - meta, - createdOn, - createdBy, - tags, - aliases, - locale: fileLocale - } = file; - - if (meta?.private) { - logger.info( - `File "${name}" is marked as private, skipping migration.` - ); - continue; - } - - const entry = await this.createSearchRecordCommonFields(file); - - const rawDatas = { - modelId: ACO_SEARCH_MODEL_ID, - version: 1, - locale: fileLocale, - status: "draft", - values: { - "text@type": FM_FILE_TYPE, - "text@title": name, - "text@tags": addMimeTag(tags, type), - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "wby-aco-json@data": { - id, - key, - size, - type, - name, - createdOn, - createdBy, - aliases, - meta - } - }, - createdBy, - entryId: `wby-aco-${id}`, - tenant: fileTenant, - createdOn, - savedOn: createdOn, - locked: false, - ownedBy: createdBy, - webinyVersion: process.env.WEBINY_VERSION, - id: `wby-aco-${id}#0001`, - modifiedBy: createdBy, - latest: true, - TYPE: "cms.entry.l", - __type: "cms.entry.l", - rawValues: { - "object@location": {} - } - }; - - const latestDdb = { - PK: `T#${fileTenant}#L#${fileLocale}#CMS#CME#wby-aco-${id}`, - SK: "L", - TYPE: "L", - ...entry - }; - - const revisionDdb = { - PK: `T#${fileTenant}#L#${fileLocale}#CMS#CME#wby-aco-${id}`, - SK: "REV#0001", - TYPE: "cms.entry", - ...entry - }; - - const latestDdbEs = { - PK: `T#${fileTenant}#L#${fileLocale}#CMS#CME#wby-aco-${id}`, - SK: "L", - data: await getCompressedData(rawDatas), - index: esGetIndexName({ - tenant: fileTenant, - locale: fileLocale, - type: "acosearchrecord", - isHeadlessCmsModel: true - }) - }; - - ddbItems.push( - this.ddbEntryEntity.putBatch(latestDdb), - this.ddbEntryEntity.putBatch(revisionDdb) - ); - - ddbEsItems.push(this.ddbEsEntryEntity.putBatch(latestDdbEs)); - } - - const executeDdb = () => { - return Promise.all( - chunk(ddbItems, 200).map(ddbItemsChunk => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItemsChunk - }); - }) - ); - }; - - const executeDdbEs = () => { - return Promise.all( - chunk(ddbEsItems, 200).map(ddbEsItemsChunk => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItemsChunk - }); - }) - ); - }; - - await executeWithRetry(executeDdb, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } finally { - // Saving back ACO original settings - await esPutIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index: acoIndex, - settings: { - number_of_replicas: settings.number_of_replicas || null, - refresh_interval: settings.refresh_interval || null - } - }); - } - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private async createSearchRecordCommonFields(file: File) { - const { - tenant, - id, - key, - size, - type, - name, - meta, - createdOn, - createdBy, - tags, - aliases, - locale - } = file; - - return { - createdBy, - createdOn, - entryId: `wby-aco-${id}`, - id: `wby-aco-${id}#0001`, - locked: false, - locale, - modelId: ACO_SEARCH_MODEL_ID, - modifiedBy: createdBy, - ownedBy: createdBy, - savedOn: createdOn, - status: "draft", - tenant, - version: 1, - webinyVersion: process.env.WEBINY_VERSION, - values: { - "text@title": name, - "wby-aco-json@data": { - id, - key, - size, - type, - name, - createdOn, - createdBy, - aliases, - meta - }, - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "text@tags": addMimeTag(tags, type), - "text@type": FM_FILE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.36.0/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.36.0/001/ddb-es/index.ts deleted file mode 100644 index 6174adec2cd..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/ddb-es/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { AcoRecords_5_36_0_001_FileData } from "./FileDataMigration"; -export * from "../types"; - -export class AcoRecords_5_36_0_001 implements DataMigration { - private migrations: DataMigration[]; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.migrations = [new AcoRecords_5_36_0_001_FileData(table, esTable, elasticsearchClient)]; - } - - getId(): string { - return "5.36.0-001"; - } - - getDescription(): string { - return "Migrate FmFile Data -> Create ACO Search Records"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_36_0_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.36.0/001/ddb/FileDataMigration.ts b/packages/migrations/src/migrations/5.36.0/001/ddb/FileDataMigration.ts deleted file mode 100644 index 7dcdb915d16..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/ddb/FileDataMigration.ts +++ /dev/null @@ -1,280 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; - -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createDdbFileEntity } from "../entities/createFileEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; - -import { batchWriteAll, ddbQueryAllWithCallback, queryAll, queryOne } from "~/utils"; -import { addMimeTag } from "~/migrations/5.36.0/001/utils/createMimeTag"; - -import { I18NLocale, ListLocalesParams, Tenant, File, FileItem } from "../types"; - -import { ACO_SEARCH_MODEL_ID, FM_FILE_TYPE, ROOT_FOLDER } from "../constants"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type FileDataMigrationCheckpoint = Record; - -export class AcoRecords_5_36_0_001_FileData implements DataMigration { - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly fileEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.fileEntity = createDdbFileEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "FileData"; - } - - getDescription() { - return "Migrate FmFile Data -> Create ACO Search Records"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - const latestFile = await queryOne({ - entity: this.fileEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#FM#FILES`, - options: { - index: "GSI1", - gte: " ", - reverse: true - } - }); - - if (!latestFile) { - logger.info( - `No file found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - const lastSearchRecord = await queryOne<{ id: string }>({ - entity: this.entryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#CME#wby-aco-${latestFile.data.id}`, - options: { - eq: "L" - } - }); - - if (lastSearchRecord) { - logger.info( - `Files already migrated to Search Records in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - await ddbQueryAllWithCallback( - { - entity: this.fileEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#FM#FILES`, - options: { - index: "GSI1", - gt: status || " " - } - }, - async files => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const items = await files.reduce( - async (accumulator: Promise, current) => { - const data = current.data; - const { id, tenant, locale, meta, name } = data; - - const acc = await accumulator; - - if (meta?.private) { - logger.info( - `File "${name}" is marked as private, skipping migration.` - ); - return acc; - } - - const entry = await this.createSearchRecordCommonFields(data); - - const latestEntry = { - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${id}`, - SK: "L", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#acoSearchRecord#L`, - GSI1_SK: `wby-aco-${id}#0001`, - TYPE: "cms.entry.l", - ...entry - }; - - const revisionEntry = { - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${id}`, - SK: "REV#0001", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#acoSearchRecord#A`, - GSI1_SK: `wby-aco-${id}#0001`, - TYPE: "cms.entry", - ...entry - }; - - return [ - ...acc, - this.entryEntity.putBatch(latestEntry), - this.entryEntity.putBatch(revisionEntry) - ]; - }, - Promise.resolve([]) - ); - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - const cursor = files[files.length - 1]?.data.id; - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private async createSearchRecordCommonFields(file: File) { - const { - tenant, - id, - key, - size, - type, - name, - meta, - createdOn, - createdBy, - tags, - aliases, - locale - } = file; - - return { - createdBy, - createdOn, - entryId: `wby-aco-${id}`, - id: `wby-aco-${id}#0001`, - locked: false, - locale, - modelId: ACO_SEARCH_MODEL_ID, - modifiedBy: createdBy, - ownedBy: createdBy, - savedOn: createdOn, - status: "draft", - tenant, - version: 1, - webinyVersion: process.env.WEBINY_VERSION, - values: { - "text@title": name, - "wby-aco-json@data": { - id, - key, - size, - type, - name, - createdOn, - createdBy, - aliases, - meta - }, - "object@location": { - "text@folderId": ROOT_FOLDER - }, - "text@tags": addMimeTag(tags, type), - "text@type": FM_FILE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.36.0/001/ddb/index.ts b/packages/migrations/src/migrations/5.36.0/001/ddb/index.ts deleted file mode 100644 index 543a0cb5dc5..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/ddb/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { AcoRecords_5_36_0_001_FileData } from "./FileDataMigration"; - -export class AcoRecords_5_36_0_001 implements DataMigration { - private migrations: DataMigration[]; - - public constructor(table: Table) { - this.migrations = [new AcoRecords_5_36_0_001_FileData(table)]; - } - - public getId() { - return "5.36.0-001"; - } - - public getDescription() { - return "Migrate FmFile Data -> Create ACO Search Records"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_36_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.36.0/001/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.36.0/001/entities/createEntryEntity.ts deleted file mode 100644 index cc0df8f7812..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/entities/createEntryEntity.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.36.0/001/entities/createFileEntity.ts b/packages/migrations/src/migrations/5.36.0/001/entities/createFileEntity.ts deleted file mode 100644 index d4c5afcd2d8..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/entities/createFileEntity.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbFileEntity = (table: Table) => { - return createStandardEntity(table, "FM.File"); -}; - -export const createDdbEsFileEntity = (table: Table) => { - return createStandardEntity(table, "FilesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.36.0/001/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.36.0/001/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.36.0/001/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.36.0/001/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.36.0/001/types.ts b/packages/migrations/src/migrations/5.36.0/001/types.ts deleted file mode 100644 index ef84d986a90..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/types.ts +++ /dev/null @@ -1,75 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; -} - -export interface File { - id: string; - key: string; - size: number; - type: string; - name: string; - meta: Record; - tags: string[]; - aliases: string[]; - createdOn: string; - createdBy: Identity; - /** - * Added with new storage operations refactoring. - */ - tenant: string; - locale: string; - webinyVersion: string; - /** - * User can add new fields to the File object so we must allow it in the types. - */ - [key: string]: any; -} - -export interface FileItem { - data: File; -} - -export interface ListLocalesParams { - tenant: Tenant; -} diff --git a/packages/migrations/src/migrations/5.36.0/001/utils/createMimeTag.ts b/packages/migrations/src/migrations/5.36.0/001/utils/createMimeTag.ts deleted file mode 100644 index 4a16b83dee4..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/utils/createMimeTag.ts +++ /dev/null @@ -1 +0,0 @@ -export const addMimeTag = (tags: string[], mime: string): string[] => [...tags, `mime:${mime}`]; diff --git a/packages/migrations/src/migrations/5.36.0/001/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.36.0/001/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.36.0/001/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.37.0/001/TenantLinkDataMigration.ts b/packages/migrations/src/migrations/5.37.0/001/TenantLinkDataMigration.ts deleted file mode 100644 index de3e949dc48..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/TenantLinkDataMigration.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { createTenantLinkEntity } from "./entities/createTenantLinkEntity"; -import { createTenantEntity } from "./entities/createTenantEntity"; -import { queryAll } from "~/utils"; -import { Tenant, TenantLink } from "./types"; -import { isMigratedTenantLink } from "~/migrations/5.37.0/001/utils/isMigratedTenantLink"; -import { update } from "@webiny/db-dynamodb"; - -export type FileDataMigrationCheckpoint = Record; - -export class TenantLinkRecords_5_37_0_001_FileData - implements DataMigration -{ - private readonly tenantEntity: ReturnType; - private readonly tenantLinkEntity: ReturnType; - - constructor(table: Table) { - this.tenantEntity = createTenantEntity(table); - this.tenantLinkEntity = createTenantLinkEntity(table); - } - - getId() { - return "TenantLinkData"; - } - - getDescription() { - return "Migrate Tenant Links Data"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const tenantLinks = await queryAll({ - entity: this.tenantLinkEntity, - partitionKey: `T#${tenant.data.id}`, - options: { - index: "GSI1", - beginsWith: "TYPE#group#" - } - }); - - for (let i = 0; i < tenantLinks.length; i++) { - const tenantLink = tenantLinks[i]; - if (!Array.isArray(tenantLink.data.teams)) { - return true; - } - } - - logger.info(`No tenant links found in tenant "${tenant.data.id}".`); - } - return false; - } - - async execute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - for (const tenant of tenants) { - const tenantLinks = await this.listLegacyTenantLinks({ tenant }); - - for (const tenantLink of tenantLinks) { - if (isMigratedTenantLink(tenantLink)) { - continue; - } - - logger.info(`Updating tenant link ${tenantLink.PK}.`); - - await update({ - entity: this.tenantLinkEntity, - item: { - PK: tenantLink.PK, - SK: tenantLink.SK, - data: { - ...tenantLink.data, - teams: [], - groups: [ - { - id: tenantLink.data.group, - permissions: tenantLink.data.permissions - } - ] - } - } - }); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLegacyTenantLinks({ tenant }: { tenant: Tenant }): Promise { - return await queryAll({ - entity: this.tenantLinkEntity, - partitionKey: `T#${tenant.data.id}`, - options: { - index: "GSI1", - beginsWith: "TYPE#group#" - } - }); - } -} diff --git a/packages/migrations/src/migrations/5.37.0/001/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.37.0/001/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.37.0/001/entities/createTenantLinkEntity.ts b/packages/migrations/src/migrations/5.37.0/001/entities/createTenantLinkEntity.ts deleted file mode 100644 index 0340f2c9514..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/entities/createTenantLinkEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantLinkEntity = (table: Table) => { - return createStandardEntity(table, "SecurityIdentity2Tenant", { type: { type: "string" } }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/001/index.ts b/packages/migrations/src/migrations/5.37.0/001/index.ts deleted file mode 100644 index cd19f7ab6f2..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { makeInjectable, inject } from "@webiny/ioc"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { TenantLinkRecords_5_37_0_001_FileData } from "./TenantLinkDataMigration"; - -export class TenantLinkRecords_5_37_0_001 implements DataMigration { - private migrations: DataMigration[]; - - public constructor(table: Table) { - this.migrations = [new TenantLinkRecords_5_37_0_001_FileData(table)]; - } - - public getId() { - return "5.37.0-001"; - } - - public getDescription() { - return "Migrate Tenant Links Data"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(TenantLinkRecords_5_37_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.37.0/001/types.ts b/packages/migrations/src/migrations/5.37.0/001/types.ts deleted file mode 100644 index 114afce6dfa..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/types.ts +++ /dev/null @@ -1,33 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export type Permissions = Array>; - -export interface TenantLink { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; - identity: string; - tenant: string; - type: string; - data: { - // Old properties. - group: string; - permissions: Permissions; - - // New properties. - - // Groups is an array of objects with `id` and `permissions` properties. - // Note that, despite the property accepting an array, we only allow a single group to be - // assigned to a tenant link. - groups: Array<{ id: string; permissions: Permissions }>; - - // In the migration process, we set `teams` property to an empty array. - teams: []; - }; -} diff --git a/packages/migrations/src/migrations/5.37.0/001/utils/isMigratedTenantLink.ts b/packages/migrations/src/migrations/5.37.0/001/utils/isMigratedTenantLink.ts deleted file mode 100644 index b7a7f821151..00000000000 --- a/packages/migrations/src/migrations/5.37.0/001/utils/isMigratedTenantLink.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TenantLink } from "../types"; - -export const isMigratedTenantLink = (tenantLink: TenantLink): boolean => { - return tenantLink.type === "permissions"; -}; diff --git a/packages/migrations/src/migrations/5.37.0/002/constants.ts b/packages/migrations/src/migrations/5.37.0/002/constants.ts deleted file mode 100644 index 4347c18a4df..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const ROOT_FOLDER = "root"; diff --git a/packages/migrations/src/migrations/5.37.0/002/ddb-es/index.ts b/packages/migrations/src/migrations/5.37.0/002/ddb-es/index.ts deleted file mode 100644 index f673b58b039..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/ddb-es/index.ts +++ /dev/null @@ -1,426 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - Logger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { createDdbEntryEntity, createDdbEsEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - scan -} from "@webiny/db-dynamodb"; -import { CmsEntry } from "../types"; -import { Client } from "@elastic/elasticsearch"; -import { - ddbScanWithCallback, - esGetIndexName, - esGetIndexSettings, - esPutIndexSettings -} from "~/utils"; -import { executeWithRetry } from "@webiny/utils"; -import { getDecompressedData } from "~/migrations/5.37.0/002/utils/getDecompressedData"; -import { getCompressedData } from "~/migrations/5.37.0/002/utils/getCompressedData"; -import { inject, makeInjectable } from "@webiny/ioc"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface IndexSettings { - number_of_replicas: number; - refresh_interval: `${number}s`; -} - -interface CmsEntriesRootFolderDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; - indexes: { - [index: string]: IndexSettings | null; - }; -} - -interface FetchOriginalElasticsearchSettingsParams { - index: string; - logger: Logger; -} - -interface RestoreOriginalElasticsearchSettingsParams { - migrationStatus: CmsEntriesRootFolderDataMigrationCheckpoint; - logger: Logger; -} - -interface DisableElasticsearchIndexingParams { - index: string; - logger: Logger; -} - -interface DynamoDbElasticsearchRecord { - PK: string; - SK: string; - data: string; -} - -export class CmsEntriesRootFolder_5_37_0_002 - implements DataMigration -{ - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - public constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "5.37.0-002"; - } - - getDescription() { - return "Add default folderId to all CMS records."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - /** - * We will load a few CMS entryes - */ - const result = await scan({ - entity: this.ddbEsEntryEntity, - options: { - filters: [ - { - attr: "PK", - contains: "#CMS#CME#" - } - ], - limit: 100 - } - }); - - if (result.items.length === 0) { - logger.info(`No CMS entries found in the system; skipping migration.`); - return false; - } else if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - const data = await getDecompressedData(item.data); - if (!data) { - continue; - } - /** - * If no location.folderId was set, we need to push the upgrade. - */ - if (!data.location?.folderId) { - return true; - } - } - logger.info(`CMS entries already upgraded. skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = - context.checkpoint || ({} as CmsEntriesRootFolderDataMigrationCheckpoint); - - if (migrationStatus.lastEvaluatedKey === true) { - await this.restoreOriginalElasticsearchSettings({ - migrationStatus, - logger - }); - logger.info(`Migration completed, no need to start again.`); - return; - } - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - logger.debug(`Scanning DynamoDB Elasticsearch table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.ddbEntryEntity, - options: { - filters: [ - { - attr: "TYPE", - beginsWith: "cms.entry" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 500 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - const ddbEsGetItems: Record = {}; - /** - * Update the DynamoDB part of the records. - */ - for (const item of result.items) { - const index = esGetIndexName({ - tenant: item.tenant, - locale: item.locale, - type: item.modelId, - isHeadlessCmsModel: true - }); - // Check for the elasticsearch index settings - if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) { - // We need to fetch the index settings first - const settings = await this.fetchOriginalElasticsearchSettings({ - index, - logger - }); - // ... add it to the checkpoint... - migrationStatus.indexes = { - ...migrationStatus.indexes, - [index]: settings - }; - // and then set not to index - await this.disableElasticsearchIndexing({ - index, - logger - }); - } - // - ddbItems.push( - this.ddbEntryEntity.putBatch({ - ...item, - location: { - ...item.location, - folderId: item.location?.folderId || "root" - } - }) - ); - /** - * Prepare the loading of DynamoDB Elasticsearch part of the records. - */ - if (ddbEsGetItems[`${item.entryId}:L`]) { - continue; - } - ddbEsGetItems[`${item.entryId}:L`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "L" - }); - if (item.status === "published" || !!item.locked) { - ddbEsGetItems[`${item.entryId}:P`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "P" - }); - } - } - /** - * Get all the records from DynamoDB Elasticsearch. - */ - const esRecords = await batchReadAll({ - table: this.ddbEsEntryEntity.table, - items: Object.values(ddbEsGetItems) - }); - for (const esRecord of esRecords) { - const decompressedData = await getDecompressedData(esRecord.data); - if (!decompressedData) { - logger.trace( - `Skipping record "${esRecord.PK}" as it is not a valid CMS entry...` - ); - continue; - } else if (!context.forceExecute && decompressedData.location?.folderId) { - logger.trace( - `Skipping record "${decompressedData.entryId}" as it already has folderId defined...` - ); - continue; - } - const compressedData = await getCompressedData({ - ...decompressedData, - location: { - ...decompressedData.location, - folderId: "root" - } - }); - const modified = new Date().toISOString(); - ddbEsItems.push( - this.ddbEsEntryEntity.putBatch({ - ...esRecord, - data: compressedData, - modified - }) - ); - } - - const execute = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - logger.trace("Storing the DynamoDB Elasticsearch records..."); - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - /** - * This is the end of the migration. - */ - await this.restoreOriginalElasticsearchSettings({ - migrationStatus, - logger - }); - migrationStatus.lastEvaluatedKey = true; - migrationStatus.indexes = {}; - context.createCheckpoint(migrationStatus); - } - - private async fetchOriginalElasticsearchSettings( - params: FetchOriginalElasticsearchSettingsParams - ): Promise { - const { index, logger } = params; - try { - const settings = await esGetIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index, - fields: ["number_of_replicas", "refresh_interval"] - }); - return { - number_of_replicas: settings.number_of_replicas || 1, - refresh_interval: settings.refresh_interval || "1s" - }; - } catch (ex) { - logger.error(`Failed to fetch original Elasticsearch settings for index "${index}".`); - logger.error({ - ...ex, - message: ex.message, - code: ex.code, - data: ex.data - }); - } - return null; - } - - private async restoreOriginalElasticsearchSettings( - params: RestoreOriginalElasticsearchSettingsParams - ): Promise { - const { migrationStatus, logger } = params; - const indexes = migrationStatus.indexes; - if (!indexes || typeof indexes !== "object") { - return; - } - for (const index in indexes) { - const settings = indexes[index]; - if (!settings || typeof settings !== "object") { - continue; - } - try { - await esPutIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index, - settings: { - number_of_replicas: settings.number_of_replicas || 1, - refresh_interval: settings.refresh_interval || `1s` - } - }); - } catch (ex) { - logger.error( - `Failed to restore original settings for index "${index}". Please do it manually.` - ); - logger.error({ - ...ex, - message: ex.message, - code: ex.code, - data: ex.data - }); - } - } - } - - private async disableElasticsearchIndexing( - params: DisableElasticsearchIndexingParams - ): Promise { - const { index, logger } = params; - - try { - await esPutIndexSettings({ - elasticsearchClient: this.elasticsearchClient, - index, - settings: { - number_of_replicas: 0, - refresh_interval: -1 - } - }); - } catch (ex) { - logger.error(`Failed to disable indexing for index "${index}".`); - logger.error({ - ...ex, - message: ex.message, - code: ex.code, - data: ex.data - }); - } - } -} - -makeInjectable(CmsEntriesRootFolder_5_37_0_002, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.37.0/002/ddb/index.ts b/packages/migrations/src/migrations/5.37.0/002/ddb/index.ts deleted file mode 100644 index 44ed4132ab1..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/ddb/index.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { batchWriteAll, BatchWriteItem, ddbScanWithCallback, scan } from "~/utils"; -import { CmsEntry } from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface CmsEntriesRootFolderDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; -} - -export class CmsEntriesRootFolder_5_37_0_002 - implements DataMigration -{ - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "5.37.0-002"; - } - - getDescription() { - return "Add default folderId to all CMS records."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - /** - * We will go through a larger amount of the entries, to determine if they need to be updated. - */ - const result = await scan({ - entity: this.entryEntity, - options: { - index: "GSI1", - filters: [ - { - attr: "TYPE", - beginsWith: "cms.entry" - } - ], - limit: 100 - } - }); - - if (result.items.length === 0) { - logger.info(`No CMS entries found in the system; skipping migration.`); - return false; - } else if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - /** - * If no location.folderId was set, we need to push the upgrade. - */ - if (!item.location?.folderId) { - return true; - } - } - logger.info(`CMS entries already upgraded. skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - if (migrationStatus.lastEvaluatedKey === true) { - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - logger.debug(`Scanning DynamoDB table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.entryEntity, - options: { - index: "GSI1", - filters: [ - { - attr: "TYPE", - beginsWith: "cms.entry" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 1000 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const items: BatchWriteItem[] = []; - for (const item of result.items) { - if (!!item.location?.folderId) { - continue; - } - items.push( - this.entryEntity.putBatch({ - ...item, - location: { - ...item.location, - folderId: "root" - } - }) - ); - } - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus.lastEvaluatedKey = true; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(CmsEntriesRootFolder_5_37_0_002, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.37.0/002/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.37.0/002/entities/createEntryEntity.ts deleted file mode 100644 index 40a105f1907..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/entities/createEntryEntity.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - }, - location: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/002/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.37.0/002/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/002/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.37.0/002/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.37.0/002/types.ts b/packages/migrations/src/migrations/5.37.0/002/types.ts deleted file mode 100644 index a34d813f9a5..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/types.ts +++ /dev/null @@ -1,61 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; - location?: { - folderId?: string | null; - }; -} - -export interface ListLocalesParams { - tenant: Tenant; -} - -export interface ListModelsParams { - tenant: Tenant; - locale: I18NLocale; -} - -export interface CmsModel { - modelId: string; - name: string; -} diff --git a/packages/migrations/src/migrations/5.37.0/002/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.37.0/002/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.37.0/002/utils/getDecompressedData.ts b/packages/migrations/src/migrations/5.37.0/002/utils/getDecompressedData.ts deleted file mode 100644 index 593bd0e39a1..00000000000 --- a/packages/migrations/src/migrations/5.37.0/002/utils/getDecompressedData.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { decompress as ungzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; -const FROM_STORAGE_ENCODING = "utf8"; - -const convertToBuffer = (value: string | Buffer) => { - if (typeof value === "string") { - return Buffer.from(value, TO_STORAGE_ENCODING); - } - return value; -}; - -export const getDecompressedData = async (data: any): Promise => { - if (data?.compression !== GZIP) { - return null; - } - try { - const buf = await ungzip(convertToBuffer(data.value)); - const value = buf.toString(FROM_STORAGE_ENCODING); - return JSON.parse(value); - } catch (ex) { - return null; - } -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/constants.ts b/packages/migrations/src/migrations/5.37.0/003/constants.ts deleted file mode 100644 index f066ffd161a..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const ROOT_FOLDER = "root"; -export const UPPERCASE_ROOT_FOLDER = "ROOT"; -export const ACO_FOLDER_MODEL_ID = "acoFolder"; diff --git a/packages/migrations/src/migrations/5.37.0/003/ddb-es/AcoFolderMigration.ts b/packages/migrations/src/migrations/5.37.0/003/ddb-es/AcoFolderMigration.ts deleted file mode 100644 index 9869ada4a64..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/ddb-es/AcoFolderMigration.ts +++ /dev/null @@ -1,392 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { PrimitiveValue, SearchBody } from "@webiny/api-elasticsearch/types"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { executeWithRetry } from "@webiny/utils"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { createDdbEntryEntity, createDdbEsEntryEntity } from "../entities/createEntryEntity"; -import { - batchWriteAll, - BatchWriteItem, - esFindOne, - esGetIndexExist, - esGetIndexName, - esQueryAllWithCallback, - get, - queryAll -} from "~/utils"; -import { CmsEntryAcoFolder, I18NLocale, ListLocalesParams, Tenant } from "../types"; -import { ACO_FOLDER_MODEL_ID, ROOT_FOLDER, UPPERCASE_ROOT_FOLDER } from "../constants"; -import { getElasticsearchLatestEntryData } from "./latestElasticsearchData"; -import { getDecompressedData } from "~/migrations/5.37.0/003/utils/getDecompressedData"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -const hasBuggedParent = (folder: CmsEntryAcoFolder): boolean => { - const parentId = (folder.values.parentId || "").toLowerCase(); - return parentId === ROOT_FOLDER; -}; - -export type AcoFolderDataMigrationCheckpoint = Record< - string, - PrimitiveValue[] | boolean | undefined ->; - -interface CmsEntryAcoFolderElasticsearchRecord { - PK: string; - SK: string; - index: string; - data: any; -} - -export class AcoRecords_5_37_0_003_AcoFolder - implements DataMigration -{ - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "AcoFolderParentId"; - } - - getDescription() { - return "Fix the ACO Folders having set ROOT as parentId"; - } - - private createElasticsearchFolderBody(tenant: string, locale: string): Partial { - return { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant } }, - { term: { "locale.keyword": locale } }, - { - bool: { - should: [ - { - term: { - "values.parentId.keyword": ROOT_FOLDER - } - }, - { - term: { - "values.parentId.keyword": UPPERCASE_ROOT_FOLDER - } - } - ], - minimum_should_match: 1 - } - }, - { term: { latest: true } } - ] - } - }, - sort: [ - { - "id.keyword": "asc" - } - ] - }; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - // there is an index? NO -> skip - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: ACO_FOLDER_MODEL_ID, - isHeadlessCmsModel: true - }); - - if (!indexExists) { - logger.info( - `No Elasticsearch index found for folders in tenant "${tenant.data.id}" and locale "${locale.code}"; skipping.` - ); - continue; - } - - const body = this.createElasticsearchFolderBody(tenant.data.id, locale.code); - const folder = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: ACO_FOLDER_MODEL_ID, - isHeadlessCmsModel: true - }), - body: { - ...body, - sort: undefined - } - }); - if (!folder) { - logger.info( - `No folder with wrong parentId found in tenant "${tenant.data.id}" and locale "${locale.code}"; skipping.` - ); - continue; - } - - return true; - } - } - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus: AcoFolderDataMigrationCheckpoint = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - const tenantId = tenant.data.id; - - for (const locale of locales) { - const localeCode = locale.code; - const groupId = `${tenantId}:${localeCode}`; - - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - // there is an index? NO -> skip - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: ACO_FOLDER_MODEL_ID, - isHeadlessCmsModel: true - }); - - if (!indexExists) { - /** - * No need to do anything with this index as it doesn't exist - querying will produce error. - */ - continue; - } - - let batch = 0; - - const foldersIndexName = esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: ACO_FOLDER_MODEL_ID, - isHeadlessCmsModel: true - }); - - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: foldersIndexName, - body: { - ...this.createElasticsearchFolderBody(tenantId, localeCode), - size: 500, - search_after: status - }, - onError: error => { - const x = JSON.stringify(error); - if (x.includes("No mapping found")) { - return; - } - throw error; - }, - callback: async (folders, cursor) => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${folders.length} folders).` - ); - - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - for (const folder of folders) { - const folderPk = `T#${tenantId}#L#${localeCode}#CMS#CME#${folder.entryId}`; - const ddbFolder = await get({ - entity: this.ddbEntryEntity, - keys: { - PK: folderPk, - SK: "REV#0001" - } - }); - if (!ddbFolder) { - logger.warn( - `Missing DDB item with PK "${folderPk}", SK "REV#0001"; skipping.` - ); - continue; - } else if (!hasBuggedParent(ddbFolder)) { - continue; - } - - const values = { - ...ddbFolder.values, - parentId: null - }; - - const latestDdb = { - ...ddbFolder, - values, - PK: folderPk, - SK: "L", - TYPE: "cms.entry.l" - }; - - const revisionDdb = { - ...ddbFolder, - values, - PK: folderPk, - SK: "REV#0001", - TYPE: "cms.entry" - }; - - ddbItems.push( - this.ddbEntryEntity.putBatch(latestDdb), - this.ddbEntryEntity.putBatch(revisionDdb) - ); - - const esLatestRecord = await get({ - entity: this.ddbEsEntryEntity, - keys: { - PK: folderPk, - SK: "L" - } - }); - if (!esLatestRecord) { - continue; - } - - const esRecord = await getDecompressedData( - esLatestRecord.data - ); - if (!esRecord) { - continue; - } - - const esLatestData = await getElasticsearchLatestEntryData({ - ...esRecord, - values: { - ...esRecord.values, - parentId: null - } - }); - - const latestDdbEs = { - PK: folderPk, - SK: "L", - data: esLatestData, - index: foldersIndexName - }; - - ddbEsItems.push(this.ddbEsEntryEntity.putBatch(latestDdbEs)); - } - - const executeDdb = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - await executeWithRetry(executeDdb, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } -} diff --git a/packages/migrations/src/migrations/5.37.0/003/ddb-es/index.ts b/packages/migrations/src/migrations/5.37.0/003/ddb-es/index.ts deleted file mode 100644 index 8b6909d0503..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/ddb-es/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { AcoRecords_5_37_0_003_AcoFolder } from "./AcoFolderMigration"; - -export * from "../types"; - -export class AcoFolders_5_37_0_003 implements DataMigration { - private readonly migrations: DataMigration[]; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.migrations = [ - new AcoRecords_5_37_0_003_AcoFolder(table, esTable, elasticsearchClient) - ]; - } - - getId(): string { - return "5.37.0-003"; - } - - getDescription(): string { - return "ACO Folder parentId migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoFolders_5_37_0_003, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.37.0/003/ddb-es/latestElasticsearchData.ts b/packages/migrations/src/migrations/5.37.0/003/ddb-es/latestElasticsearchData.ts deleted file mode 100644 index 8c2d238575c..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/ddb-es/latestElasticsearchData.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { CmsEntryAcoFolder } from "../types"; -import { getCompressedData } from "../utils/getCompressedData"; - -const getEntryData = (input: CmsEntryAcoFolder): CmsEntryAcoFolder => { - const output: any = { - ...input - }; - delete output["PK"]; - delete output["SK"]; - delete output["GSI1_PK"]; - delete output["GSI1_SK"]; - delete output["published"]; - delete output["latest"]; - - return output; -}; - -export const getElasticsearchLatestEntryData = async (entry: any) => { - return getCompressedData({ - ...getEntryData(entry), - latest: true, - TYPE: "L", - __type: "cms.entry.l" - }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/ddb/AcoFolderMigration.ts b/packages/migrations/src/migrations/5.37.0/003/ddb/AcoFolderMigration.ts deleted file mode 100644 index 0fb678d3be9..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/ddb/AcoFolderMigration.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { CmsEntryAcoFolder, I18NLocale, ListLocalesParams, Tenant } from "../types"; -import { batchWriteAll, BatchWriteItem, ddbQueryAllWithCallback, queryAll } from "~/utils"; -import { ACO_FOLDER_MODEL_ID, ROOT_FOLDER } from "../constants"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -const hasAcoFolderBug = (entry: CmsEntryAcoFolder): boolean => { - const parentId = String(entry.values.parentId || "").toLowerCase(); - return parentId === ROOT_FOLDER; -}; - -export type AcoFolderMigrationCheckpoint = Record; - -export class AcoRecords_5_37_0_003_AcoFolders - implements DataMigration -{ - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "AcoFolderParentId"; - } - - getDescription() { - return "Fix the ACO Folders having set ROOT as parentId"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - const folders = await queryAll({ - entity: this.entryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#M#${ACO_FOLDER_MODEL_ID}#A`, - options: { - index: "GSI1", - gt: " " - } - }); - - if (!folders.some(hasAcoFolderBug)) { - continue; - } - - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - const tenantId = tenant.data.id; - - for (const locale of locales) { - const groupId = `${tenantId}:${locale.code}`; - const status = migrationStatus[groupId]; - - const localeCode = locale.code; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - - await ddbQueryAllWithCallback( - { - entity: this.entryEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#CMS#CME#M#${ACO_FOLDER_MODEL_ID}#A`, - options: { - index: "GSI1", - gt: status || " " - } - }, - async folders => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${folders.length} folder entries).` - ); - - const items = await folders.reduce>( - async (accumulator: Promise, current) => { - const { entryId, values: initialValues } = current; - - if (!hasAcoFolderBug(current)) { - return await accumulator; - } - - const values = { - ...initialValues, - parentId: null - }; - - const latestEntry = { - ...current, - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#${entryId}`, - SK: "L", - GSI1_PK: `T#${tenantId}#L#${localeCode}#CMS#CME#M#${ACO_FOLDER_MODEL_ID}#L`, - GSI1_SK: current.id, - TYPE: "cms.entry.l", - values - }; - - const revisionEntry = { - ...current, - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#${entryId}`, - SK: `REV#0001`, - GSI1_PK: `T#${tenantId}#L#${localeCode}#CMS#CME#M#${ACO_FOLDER_MODEL_ID}#A`, - GSI1_SK: current.id, - TYPE: "cms.entry", - values - }; - - const acc = await accumulator; - - return [ - ...acc, - this.entryEntity.putBatch(latestEntry), - this.entryEntity.putBatch(revisionEntry) - ]; - }, - Promise.resolve([]) - ); - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = folders[folders.length - 1].id; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } -} diff --git a/packages/migrations/src/migrations/5.37.0/003/ddb/index.ts b/packages/migrations/src/migrations/5.37.0/003/ddb/index.ts deleted file mode 100644 index e73dddc7cc9..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/ddb/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { AcoRecords_5_37_0_003_AcoFolders } from "./AcoFolderMigration"; - -export class AcoFolders_5_37_0_003 implements DataMigration { - private readonly migrations: DataMigration[]; - - public constructor(table: Table) { - this.migrations = [new AcoRecords_5_37_0_003_AcoFolders(table)]; - } - - public getId() { - return "5.37.0-003"; - } - - public getDescription() { - return "ACO Folder parentId migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoFolders_5_37_0_003, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.37.0/003/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.37.0/003/entities/createEntryEntity.ts deleted file mode 100644 index 40a105f1907..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/entities/createEntryEntity.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - }, - location: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.37.0/003/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.37.0/003/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/types.ts b/packages/migrations/src/migrations/5.37.0/003/types.ts deleted file mode 100644 index ea7bbedff54..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; -} - -export interface CmsEntryAcoFolderValues { - parentId?: string | null; -} -export type CmsEntryAcoFolder = CmsEntry; - -export interface ListLocalesParams { - tenant: Tenant; -} diff --git a/packages/migrations/src/migrations/5.37.0/003/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.37.0/003/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.37.0/003/utils/getDecompressedData.ts b/packages/migrations/src/migrations/5.37.0/003/utils/getDecompressedData.ts deleted file mode 100644 index 593bd0e39a1..00000000000 --- a/packages/migrations/src/migrations/5.37.0/003/utils/getDecompressedData.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { decompress as ungzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; -const FROM_STORAGE_ENCODING = "utf8"; - -const convertToBuffer = (value: string | Buffer) => { - if (typeof value === "string") { - return Buffer.from(value, TO_STORAGE_ENCODING); - } - return value; -}; - -export const getDecompressedData = async (data: any): Promise => { - if (data?.compression !== GZIP) { - return null; - } - try { - const buf = await ungzip(convertToBuffer(data.value)); - const value = buf.toString(FROM_STORAGE_ENCODING); - return JSON.parse(value); - } catch (ex) { - return null; - } -}; diff --git a/packages/migrations/src/migrations/5.37.0/004/constants.ts b/packages/migrations/src/migrations/5.37.0/004/constants.ts deleted file mode 100644 index a550a08de76..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const ROOT_FOLDER = "root"; -export const UPPERCASE_ROOT_FOLDER = "ROOT"; -export const FM_FILE_TYPE = "FmFile"; -export const PB_PAGE_TYPE = "PbPage"; -export const ACO_SEARCH_MODEL_ID = "acoSearchRecord"; -export const PB_ACO_SEARCH_MODEL_ID = `acoSearchRecord-${PB_PAGE_TYPE.toLowerCase()}`; -export const FM_ACO_SEARCH_MODEL_ID = `acoSearchRecord-${FM_FILE_TYPE.toLowerCase()}`; diff --git a/packages/migrations/src/migrations/5.37.0/004/ddb-es/PageDataMigration.ts b/packages/migrations/src/migrations/5.37.0/004/ddb-es/PageDataMigration.ts deleted file mode 100644 index 53fe402ac6c..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/ddb-es/PageDataMigration.ts +++ /dev/null @@ -1,418 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { executeWithRetry } from "@webiny/utils"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { createDdbEntryEntity, createDdbEsEntryEntity } from "../entities/createEntryEntity"; -import { createDdbEsPageEntity, createDdbPageEntity } from "../entities/createPageEntity"; - -import { - batchWriteAll, - BatchWriteItem, - esCreateIndex, - esFindOne, - esGetIndexExist, - esGetIndexName, - esQueryAllWithCallback, - get, - queryAll -} from "~/utils"; - -import { - AcoSearchRecord, - ExistingAcoSearchRecord, - I18NLocale, - ListLocalesParams, - Page, - Tenant -} from "../types"; - -import { - PB_ACO_SEARCH_MODEL_ID, - PB_PAGE_TYPE, - ROOT_FOLDER, - UPPERCASE_ROOT_FOLDER -} from "../constants"; -import { getCompressedData } from "../utils/getCompressedData"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type PageDataMigrationCheckpoint = Record; - -export class AcoRecords_5_37_0_004_PageData implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly ddbPageEntity: ReturnType; - private readonly ddbEsPageEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.ddbPageEntity = createDdbPageEntity(table); - this.ddbEsPageEntity = createDdbEsPageEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "PageData"; - } - - getDescription() { - return "Migrate PbPage Data -> Move ACO Search Records to new model"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - // there is an index? NO -> skip - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder", - isHeadlessCmsModel: false - }); - - if (!indexExists) { - logger.info( - `No Elasticsearch index found for pages in tenant "${tenant.data.id}" and locale "${locale.code}"; skipping.` - ); - continue; - } - - // Fetch latest page record from ES - const latestPage = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } }, - { term: { "__type.keyword": "page" } }, - { term: { latest: true } } - ] - } - }, - sort: [ - { - "id.keyword": "asc" - } - ] - } - }); - - if (!latestPage) { - logger.info( - `No pages found in tenant "${tenant.data.id}" and locale "${locale.code}"; skipping.` - ); - continue; - } - - /** - * We need to check if the search records were already migrated to the new ACO Models. - */ - const newAcoIndexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: PB_ACO_SEARCH_MODEL_ID, - isHeadlessCmsModel: true - }); - - if (newAcoIndexExists) { - logger.info(`New Elasticsearch Pages ACO Records index found; skipping.`); - continue; - } - return true; - } - } - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus: PageDataMigrationCheckpoint = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - const tenantId = tenant.data.id; - - for (const locale of locales) { - const localeCode = locale.code; - const groupId = `${tenantId}:${localeCode}`; - - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - - // Since it's the first time we add an ACO record, we also need to create the index - const pageAcoIndexName = await esCreateIndex({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenantId, - locale: localeCode, - type: PB_ACO_SEARCH_MODEL_ID, - isHeadlessCmsModel: true - }); - - const pageBuilderIndexName = esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "page-builder" - }); - - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: pageBuilderIndexName, - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenantId } }, - { term: { "locale.keyword": localeCode } }, - { term: { "__type.keyword": "page" } }, - { term: { latest: true } } - ] - } - }, - size: 500, - sort: [ - { - "id.keyword": "asc" - } - ], - search_after: status - }, - callback: async (pages, cursor) => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${pages.length} pages).` - ); - - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - for (const page of pages) { - /** - * We need to get the search record for the page as it contains necessary data and adjustments. - */ - const searchRecordPartitionKey = `T#${tenantId}#L#${localeCode}#CMS#CME#wby-aco-${page.pid}`; - const existingAcoRecord = await get({ - entity: this.ddbEntryEntity, - keys: { - PK: searchRecordPartitionKey, - SK: "L" - } - }); - if (!existingAcoRecord) { - logger.warn( - `Page ACO Record (PK: ${searchRecordPartitionKey}) not found for page "${page.pid}". Possibly 5.35.0 migration failed; skipping this page.` - ); - continue; - } else if (!existingAcoRecord.values["wby-aco-json@data"]) { - logger.warn( - `Page ACO Record (PK: ${searchRecordPartitionKey}) does not have the wby-aco-json@data field. Possibly 5.35.0 migration failed; skipping this page.` - ); - continue; - } - - const entry = await this.createSearchRecord(existingAcoRecord); - - const latestDdb = { - ...entry, - PK: searchRecordPartitionKey, - SK: "L", - TYPE: "cms.entry.l" - }; - - const revisionDdb = { - ...entry, - PK: searchRecordPartitionKey, - SK: "REV#0001", - TYPE: "cms.entry" - }; - - const rawData = { - ...entry, - latest: true, - TYPE: "cms.entry.l", - __type: "cms.entry.l", - rawValues: { - "object@location": {} - } - }; - - const latestDdbEs = { - PK: searchRecordPartitionKey, - SK: "L", - data: await getCompressedData(rawData), - index: pageAcoIndexName - }; - - ddbItems.push( - this.ddbEntryEntity.putBatch(latestDdb), - this.ddbEntryEntity.putBatch(revisionDdb) - ); - - ddbEsItems.push(this.ddbEsEntryEntity.putBatch(latestDdbEs)); - } - - const executeDdb = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - await executeWithRetry(executeDdb, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - await context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private createSearchRecord(entry: ExistingAcoSearchRecord): AcoSearchRecord { - const { values } = entry; - - const { - ["text@title"]: title, - ["text@content"]: content, - ["wby-aco-json@data"]: data, - ["text@tags"]: tags, - ["object@location"]: location - } = values; - const { id, createdBy, createdOn, locked, path, pid, version, status, savedOn } = data; - let folderId = location?.["text@folderId"] || ROOT_FOLDER; - if (folderId === UPPERCASE_ROOT_FOLDER) { - folderId = ROOT_FOLDER; - } - return { - ...entry, - modelId: PB_ACO_SEARCH_MODEL_ID, - webinyVersion: process.env.WEBINY_VERSION as string, - values: { - "text@title": title, - "text@content": content, - "object@data": { - "text@id": id, - "text@pid": pid, - "text@path": path, - "text@status": status, - "text@title": title, - "object@createdBy": { - "text@id": createdBy.id, - "text@type": createdBy.type, - "text@displayName": createdBy.displayName - }, - "datetime@createdOn": createdOn, - "datetime@savedOn": savedOn, - "boolean@locked": locked, - "number@version": version - }, - "object@location": { - "text@folderId": folderId - }, - "text@tags": tags || [], - "text@type": PB_PAGE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.37.0/004/ddb-es/index.ts b/packages/migrations/src/migrations/5.37.0/004/ddb-es/index.ts deleted file mode 100644 index b2f2068274f..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/ddb-es/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { AcoRecords_5_37_0_004_PageData } from "./PageDataMigration"; - -export * from "../types"; - -export class AcoRecords_5_37_0_004 implements DataMigration { - private readonly migrations: DataMigration[]; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.migrations = [new AcoRecords_5_37_0_004_PageData(table, esTable, elasticsearchClient)]; - } - - getId(): string { - return "5.37.0-004"; - } - - getDescription(): string { - return "Page Builder Pages search record migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_37_0_004, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.37.0/004/ddb/PageDataMigration.ts b/packages/migrations/src/migrations/5.37.0/004/ddb/PageDataMigration.ts deleted file mode 100644 index 54c6f189571..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/ddb/PageDataMigration.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigration, DataMigrationContext } from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createDdbPageEntity } from "../entities/createPageEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { - AcoSearchRecord, - ExistingAcoSearchRecord, - I18NLocale, - ListLocalesParams, - Tenant -} from "../types"; -import { - batchWriteAll, - BatchWriteItem, - ddbQueryAllWithCallback, - queryAll, - queryOne -} from "~/utils"; -import { PB_ACO_SEARCH_MODEL_ID, ROOT_FOLDER, UPPERCASE_ROOT_FOLDER } from "../constants"; -import { PB_PAGE_TYPE } from "~/migrations/5.35.0/006/constants"; -import { Page } from "~/migrations/5.35.0/006/types"; -import { get } from "@webiny/db-dynamodb"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export type PageDataMigrationCheckpoint = Record; - -export class AcoRecords_5_37_0_004_PageData implements DataMigration { - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly pageEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.pageEntity = createDdbPageEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "PageData"; - } - - getDescription() { - return "Migrate PbPage Data -> Move ACO Search Records to new model"; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - /** - * First we check if there are any pages. - */ - const lastPage = await queryOne<{ pid: string }>({ - entity: this.pageEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#PB#L`, - options: { - gt: " ", - reverse: true - } - }); - - if (!lastPage) { - logger.info( - `No pages found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - /** - * And we need to check if the search records were already migrated to the new ACO Models. - */ - const lastSearchRecord = await queryOne({ - entity: this.entryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#M#${PB_ACO_SEARCH_MODEL_ID}#A`, - options: { - index: "GSI1", - eq: `wby-aco-${lastPage.pid}#0001` - } - }); - - if (lastSearchRecord) { - logger.info( - `Pages already migrated to New Search Records in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - const tenantId = tenant.data.id; - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - const localeCode = locale.code; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - let batch = 0; - /** - * We need to load all the pages because search records are mixed. - */ - await ddbQueryAllWithCallback( - { - entity: this.pageEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#L`, - options: { - gt: status || " " - } - }, - async pages => { - batch++; - logger.info( - `Processing batch #${batch} in group ${groupId} (${pages.length} pages).` - ); - - const items = await pages.reduce>( - async (accumulator: Promise, current) => { - /** - * We need to get the search record for the page as it contains necessary data and adjustments. - */ - const existingAcoRecord = await get({ - entity: this.entryEntity, - keys: { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#wby-aco-${current.pid}`, - SK: "L" - } - }); - if (!existingAcoRecord) { - return await accumulator; - } - - const { tenant, locale, values } = existingAcoRecord; - const { ["wby-aco-json@data"]: data } = values; - const { pid } = data; - - const entry = this.createSearchRecord(existingAcoRecord); - - const latestEntry = { - ...entry, - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${pid}`, - SK: "L", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#${PB_ACO_SEARCH_MODEL_ID}#L`, - GSI1_SK: `wby-aco-${pid}#0001`, - TYPE: "cms.entry.l" - }; - - const revisionEntry = { - ...entry, - PK: `T#${tenant}#L#${locale}#CMS#CME#CME#wby-aco-${pid}`, - SK: "REV#0001", - GSI1_PK: `T#${tenant}#L#${locale}#CMS#CME#M#${PB_ACO_SEARCH_MODEL_ID}#A`, - GSI1_SK: `wby-aco-${pid}#0001`, - TYPE: "cms.entry" - }; - - const acc = await accumulator; - - return [ - ...acc, - this.entryEntity.putBatch(latestEntry), - this.entryEntity.putBatch(revisionEntry) - ]; - }, - Promise.resolve([]) - ); - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch. - migrationStatus[groupId] = pages[pages.length - 1]?.id ?? true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private createSearchRecord(entry: ExistingAcoSearchRecord): AcoSearchRecord { - const { values } = entry; - - const { - ["text@title"]: title, - ["text@content"]: content, - ["wby-aco-json@data"]: data, - ["text@tags"]: tags, - ["object@location"]: location - } = values; - const { id, createdBy, createdOn, locked, path, pid, version, status, savedOn } = data; - let folderId = location?.["text@folderId"] || ROOT_FOLDER; - if (folderId === UPPERCASE_ROOT_FOLDER) { - folderId = ROOT_FOLDER; - } - return { - ...entry, - modelId: PB_ACO_SEARCH_MODEL_ID, - webinyVersion: process.env.WEBINY_VERSION as string, - values: { - "text@title": title, - "text@content": content, - "object@data": { - "text@id": id, - "text@pid": pid, - "text@path": path, - "text@status": status, - "text@title": title, - "object@createdBy": { - "text@id": createdBy.id, - "text@type": createdBy.type, - "text@displayName": createdBy.displayName - }, - "datetime@createdOn": createdOn, - "datetime@savedOn": savedOn, - "boolean@locked": locked, - "number@version": version - }, - "object@location": { - "text@folderId": folderId - }, - "text@tags": tags || [], - "text@type": PB_PAGE_TYPE - } - }; - } -} diff --git a/packages/migrations/src/migrations/5.37.0/004/ddb/index.ts b/packages/migrations/src/migrations/5.37.0/004/ddb/index.ts deleted file mode 100644 index cf3881a2abe..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/ddb/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { - DataMigration, - DataMigrationContext, - getChildLogger, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { AcoRecords_5_37_0_004_PageData } from "./PageDataMigration"; - -export class AcoRecords_5_37_0_004 implements DataMigration { - private readonly migrations: DataMigration[]; - - public constructor(table: Table) { - this.migrations = [new AcoRecords_5_37_0_004_PageData(table)]; - } - - public getId() { - return "5.37.0-004"; - } - - public getDescription() { - return "Page Builder Pages search record migration"; - } - - async shouldExecute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - return true; - } - } - return false; - } - - async execute(context: DataMigrationContext): Promise { - for (const migration of this.migrations) { - const childLogger = getChildLogger(context.logger, migration); - const childContext = { ...context, logger: childLogger }; - if (await migration.shouldExecute(childContext)) { - await migration.execute(childContext); - } - } - } -} - -makeInjectable(AcoRecords_5_37_0_004, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.37.0/004/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.37.0/004/entities/createEntryEntity.ts deleted file mode 100644 index 40a105f1907..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/entities/createEntryEntity.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - }, - location: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/004/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.37.0/004/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/004/entities/createPageEntity.ts b/packages/migrations/src/migrations/5.37.0/004/entities/createPageEntity.ts deleted file mode 100644 index 3cbcffe2a40..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/entities/createPageEntity.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - pid: { - type: "string" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - title: { - type: "string" - }, - titleLC: { - type: "string" - }, - editor: { - type: "string" - }, - createdFrom: { - type: "string" - }, - path: { - type: "string" - }, - category: { - type: "string" - }, - content: { - type: "map" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - settings: { - type: "map" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - webinyVersion: { - type: "string" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbPageEntity = (table: Table) => { - return createLegacyEntity(table, "PbPages", ddbAttributes); -}; - -export const createDdbEsPageEntity = (table: Table) => { - return createStandardEntity(table, "PbPagesEs", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/004/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.37.0/004/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.37.0/004/types.ts b/packages/migrations/src/migrations/5.37.0/004/types.ts deleted file mode 100644 index 319daa9ee70..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/types.ts +++ /dev/null @@ -1,155 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; -} - -export interface PageSettings { - social?: { - title: string; - description: string; - image: File; - meta: Array<{ property: string; content: string }>; - }; - seo?: { - title: string; - description: string; - meta: Array<{ name: string; content: string }>; - }; - general?: { - tags?: string[]; - snippet?: string; - layout?: string; - image?: File; - }; - [key: string]: any; -} - -export type PageStatus = "published" | "unpublished" | "draft"; - -export interface Page { - id: string; - pid: string; - locale: string; - tenant: string; - title: string; - editor: string; - createdFrom: string | null; - path: string; - category: string; - content: Record | null; - publishedOn: string | null; - version: number; - settings: PageSettings; - locked: boolean; - status: string; - createdOn: string; - savedOn: string; - createdBy: Identity; - ownedBy: Identity; - webinyVersion: string; -} - -interface BaseAcoSearchRecord { - id: string; - locale: string; - tenant: string; - entryId: string; - modelId: string; - webinyVersion: string; -} - -export interface AcoSearchRecord extends BaseAcoSearchRecord { - values: AcoSearchRecordValues; -} - -interface AcoSearchRecordValues { - ["text@title"]: string; - ["text@content"]: string; - ["text@type"]: string; - ["text@tags"]?: string[]; - ["object@data"]: { - ["text@id"]: string; - ["text@pid"]: string; - ["text@title"]: string; - ["text@status"]: string; - ["object@createdBy"]: { - ["text@id"]: string; - ["text@displayName"]: string | null; - ["text@type"]: string; - }; - ["datetime@createdOn"]: string; - ["datetime@savedOn"]: string; - ["boolean@locked"]: boolean; - ["text@path"]: string; - ["number@version"]: number; - }; - ["object@location"]?: { - ["text@folderId"]?: string; - }; -} - -interface ExistingAcoSearchRecordValues extends Omit { - ["wby-aco-json@data"]: { - id: string; - pid: string; - title: string; - status: string; - createdBy: Identity; - createdOn: string; - savedOn: string; - locked: boolean; - path: string; - version: number; - }; -} -/** - * Existing ACO Search Record has values data in a custom json field. - * We removed that field in 5.37.0, so we need to remap the data. - */ -export interface ExistingAcoSearchRecord extends BaseAcoSearchRecord { - values: ExistingAcoSearchRecordValues; -} - -export interface ListLocalesParams { - tenant: Tenant; -} diff --git a/packages/migrations/src/migrations/5.37.0/004/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.37.0/004/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.37.0/004/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/constants.ts b/packages/migrations/src/migrations/5.37.0/005/constants.ts deleted file mode 100644 index a5e496fff15..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const ROOT_FOLDER = "root"; -export const FM_FILE_TYPE = "FmFile"; -export const ACO_SEARCH_MODEL_ID = "acoSearchRecord"; diff --git a/packages/migrations/src/migrations/5.37.0/005/ddb-es/index.ts b/packages/migrations/src/migrations/5.37.0/005/ddb-es/index.ts deleted file mode 100644 index e9de956898e..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/ddb-es/index.ts +++ /dev/null @@ -1,461 +0,0 @@ -import chunk from "lodash/chunk"; -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { Client } from "@elastic/elasticsearch"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { - batchWriteAll, - esFindOne, - esGetIndexExist, - esGetIndexName, - esQueryAllWithCallback, - queryAll, - queryOne -} from "~/utils"; -import { - I18NLocale, - ListLocalesParams, - Tenant, - CmsEntry, - FileSearchRecordValues, - FileEntryValues -} from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { createDdbEsEntryEntity } from "~/migrations/5.36.0/001/entities/createEntryEntity"; -import { File } from "~/migrations/5.36.0/001/types"; -import { getCompressedData } from "~/migrations/5.36.0/001/utils/getCompressedData"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -type FileDataMigrationCheckpoint = Record; - -export class FileManager_5_37_0_005 implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - this.localeEntity = createLocaleEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "5.37.0-005"; - } - - getDescription() { - return "Migrate File Manager data to Headless CMS records."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager", - isHeadlessCmsModel: false - }); - - if (!indexExists) { - logger.info( - `No elasticsearch index found for File Manager in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - // Fetch the latest file record from ES - const fmIndexName = esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager" - }); - - const latestFile = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: fmIndexName, - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } } - ] - } - }, - sort: [ - { - "id.keyword": { order: "desc", unmapped_type: "keyword" } - } - ] - } - }); - - if (!latestFile) { - logger.info( - `No files found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - const fileCmsRecord = await queryOne<{ id: string }>({ - entity: this.ddbEntryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#${latestFile.id}`, - options: { - eq: "L" - } - }); - - if (fileCmsRecord) { - logger.info( - `Files already migrated to CMS content entries in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - const tenantId = tenant.data.id; - const localeCode = locale.code; - - const searchRecords = await this.listSearchRecords(tenantId, localeCode); - - if (searchRecords.length === 0) { - migrationStatus[groupId] = true; - continue; - } - - let batch = 0; - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName({ - tenant: tenant.data.id, - locale: locale.code, - type: "file-manager" - }), - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant.data.id } }, - { term: { "locale.keyword": locale.code } } - ] - } - }, - size: 10000, - sort: [ - { - "id.keyword": { order: "asc", unmapped_type: "keyword" } - } - ], - search_after: status - }, - callback: async (files, cursor) => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const ddbItems: ReturnType< - ReturnType["putBatch"] - >[] = []; - - const ddbEsItems: ReturnType< - ReturnType["putBatch"] - >[] = []; - - for (const file of files) { - const entry = this.createContentEntryCommonFields(file); - this.assignLocationFromSearchRecord(entry, searchRecords); - - const fileId = file.id; - - const latestEntry = { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#${fileId}`, - SK: "L", - TYPE: "cms.entry.l", - ...entry - }; - - const revisionEntry = { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#${fileId}`, - SK: "REV#0001", - TYPE: "cms.entry", - ...entry - }; - - const latestDdbEs = { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#${fileId}`, - SK: "L", - data: await getCompressedData({ - latest: true, - __type: "cms.entry.l", - ...latestEntry, - rawValues: { - "object@location": {}, - "object@meta": {} - } - }), - index: esGetIndexName({ - tenant: tenantId, - locale: localeCode, - type: "fmfile", - isHeadlessCmsModel: true - }) - }; - - ddbItems.push(this.ddbEntryEntity.putBatch(latestEntry)); - ddbItems.push(this.ddbEntryEntity.putBatch(revisionEntry)); - ddbEsItems.push(this.ddbEsEntryEntity.putBatch(latestDdbEs)); - } - - const executeDdb = () => { - return Promise.all( - chunk(ddbItems, 200).map(ddbItemsChunk => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItemsChunk - }); - }) - ); - }; - - const executeDdbEs = () => { - return Promise.all( - chunk(ddbEsItems, 200).map(ddbEsItemsChunk => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItemsChunk - }); - }) - ); - }; - - await executeWithRetry(executeDdb, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listSearchRecords(tenant: string, locale: string) { - const esParams = { - tenant, - locale, - type: "acosearchrecord", - isHeadlessCmsModel: true - }; - - const acoIndex = esGetIndexName(esParams); - - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - ...esParams - }); - - if (!indexExists) { - return []; - } - - const searchRecords: CmsEntry[] = []; - - await esQueryAllWithCallback>({ - elasticsearchClient: this.elasticsearchClient, - index: acoIndex, - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenant } }, - { term: { "locale.keyword": locale } } - ] - } - }, - size: 10000, - sort: [ - { - "id.keyword": { order: "asc", unmapped_type: "keyword" } - } - ] - }, - callback: async records => { - for (const record of records) { - searchRecords.push(record); - } - } - }); - - return searchRecords; - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private assignLocationFromSearchRecord( - fileEntry: CmsEntry, - search: CmsEntry[] - ) { - const searchRecord = search.find( - rec => rec.values["wby-aco-json@data"].id === fileEntry.entryId - ); - if (!searchRecord) { - return; - } - - const folderId = searchRecord.values["object@location"]["text@folderId"].toLowerCase(); - fileEntry.location = { - folderId - }; - fileEntry.values["object@location"] = { - "text@folderId": folderId - }; - } - - private createContentEntryCommonFields(file: File): CmsEntry { - return { - createdBy: file.createdBy, - createdOn: file.createdOn, - entryId: file.id, - id: `${file.id}#0001`, - locked: false, - locale: file.locale, - location: { - folderId: "root" - }, - modelId: "fmFile", - modifiedBy: file.createdBy, - ownedBy: file.createdBy, - savedOn: file.createdOn, - status: "draft", - tenant: file.tenant, - version: 1, - webinyVersion: String(process.env.WEBINY_VERSION), - values: { - "number@size": file.size, - "object@location": { - "text@folderId": "root" - }, - "object@meta": { - "boolean@private": file.meta?.private || false, - "number@width": file.meta?.width, - "number@height": file.meta?.height - }, - "text@aliases": file.aliases, - "text@key": file.key, - "text@name": file.name, - "text@tags": file.tags.filter(tag => !tag.startsWith("mime:")), - "text@type": file.type - } - }; - } -} - -makeInjectable(FileManager_5_37_0_005, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.37.0/005/ddb/index.ts b/packages/migrations/src/migrations/5.37.0/005/ddb/index.ts deleted file mode 100644 index 41c6f5d6ccf..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/ddb/index.ts +++ /dev/null @@ -1,300 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { executeWithRetry } from "@webiny/utils"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { createLocaleEntity } from "../entities/createLocaleEntity"; -import { createDdbFileEntity } from "../entities/createFileEntity"; -import { createTenantEntity } from "../entities/createTenantEntity"; -import { batchWriteAll, ddbQueryAllWithCallback, queryAll, queryOne } from "~/utils"; -import { - I18NLocale, - ListLocalesParams, - Tenant, - CmsEntry, - FileSearchRecordValues, - FileEntryValues, - FileItem -} from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -type FileDataMigrationCheckpoint = Record; - -export class FileManager_5_37_0_005 implements DataMigration { - private readonly entryEntity: ReturnType; - private readonly localeEntity: ReturnType; - private readonly fileEntity: ReturnType; - private readonly tenantEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - this.localeEntity = createLocaleEntity(table); - this.fileEntity = createDdbFileEntity(table); - this.tenantEntity = createTenantEntity(table); - } - - getId() { - return "5.37.0-005"; - } - - getDescription() { - return "Migrate File Manager data to Headless CMS records."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - if (tenants.length === 0) { - logger.info(`No tenants found in the system; skipping migration.`); - return false; - } - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - if (locales.length === 0) { - logger.info(`No locales found in tenant "${tenant.data.id}".`); - continue; - } - - for (const locale of locales) { - const lastLegacyFile = await queryOne({ - entity: this.fileEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#FM#FILES`, - options: { - index: "GSI1", - gte: " ", - reverse: true - } - }); - - if (!lastLegacyFile) { - logger.info( - `No file found in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - - const fileCmsRecord = await queryOne<{ id: string }>({ - entity: this.entryEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#CMS#CME#CME#${lastLegacyFile.data.id}`, - options: { - eq: "L" - } - }); - - if (fileCmsRecord) { - logger.info( - `Files already migrated to CMS content entries in tenant "${tenant.data.id}" and locale "${locale.code}".` - ); - continue; - } - return true; - } - } - return false; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const tenants = await this.listTenants(); - - const migrationStatus = context.checkpoint || {}; - - for (const tenant of tenants) { - const locales = await this.listLocales({ tenant }); - - for (const locale of locales) { - const groupId = `${tenant.data.id}:${locale.code}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - continue; - } - - const tenantId = tenant.data.id; - const localeCode = locale.code; - - const searchRecords = await this.listSearchRecords(tenantId, localeCode); - - let batch = 0; - await ddbQueryAllWithCallback( - { - entity: this.fileEntity, - partitionKey: `T#${tenant.data.id}#L#${locale.code}#FM#FILES`, - options: { - index: "GSI1", - gt: status || " " - } - }, - async files => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const items: ReturnType< - ReturnType["putBatch"] - >[] = []; - - for (const file of files) { - const entry = this.createContentEntryCommonFields(file); - this.assignLocationFromSearchRecord(entry, searchRecords); - - const fileId = file.data.id; - - const latestEntry = { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#${fileId}`, - SK: "L", - GSI1_PK: `T#${tenantId}#L#${localeCode}#CMS#CME#M#fmFile#L`, - GSI1_SK: `${fileId}#0001`, - TYPE: "cms.entry.l", - ...entry - }; - - const revisionEntry = { - PK: `T#${tenantId}#L#${localeCode}#CMS#CME#CME#${fileId}`, - SK: "REV#0001", - GSI1_PK: `T#${tenantId}#L#${localeCode}#CMS#CME#M#fmFile#A`, - GSI1_SK: `${fileId}#0001`, - TYPE: "cms.entry", - ...entry - }; - - items.push(this.entryEntity.putBatch(latestEntry)); - items.push(this.entryEntity.putBatch(revisionEntry)); - } - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = files[files.length - 1]?.data.id; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus[groupId] = true; - context.createCheckpoint(migrationStatus); - } - } - } - - private async listTenants(): Promise { - return await queryAll({ - entity: this.tenantEntity, - partitionKey: "TENANTS", - options: { - index: "GSI1", - gte: " " - } - }); - } - - private async listSearchRecords(tenant: string, locale: string) { - const records = await queryAll>({ - entity: this.entryEntity, - partitionKey: `T#${tenant}#L#${locale}#CMS#CME#M#acoSearchRecord#L`, - options: { - index: "GSI1", - gt: " " - } - }); - - return records.filter(record => record.values["text@type"] === "FmFile"); - } - - private async listLocales({ tenant }: ListLocalesParams): Promise { - return await queryAll({ - entity: this.localeEntity, - partitionKey: `T#${tenant.data.id}#I18N#L`, - options: { - gte: " " - } - }); - } - - private assignLocationFromSearchRecord( - fileEntry: CmsEntry, - search: CmsEntry[] - ) { - const searchRecord = search.find( - rec => rec.values["wby-aco-json@data"].id === fileEntry.entryId - ); - if (!searchRecord) { - return; - } - - const folderId = searchRecord.values["object@location"]["text@folderId"].toLowerCase(); - fileEntry.location = { - folderId - }; - fileEntry.values["object@location"] = { - "text@folderId": folderId - }; - } - - private createContentEntryCommonFields(file: FileItem): CmsEntry { - return { - createdBy: file.data.createdBy, - createdOn: file.data.createdOn, - entryId: file.data.id, - id: `${file.data.id}#0001`, - locked: false, - locale: file.data.locale, - location: { - folderId: "root" - }, - modelId: "fmFile", - modifiedBy: file.data.createdBy, - ownedBy: file.data.createdBy, - savedOn: file.data.createdOn, - status: "draft", - tenant: file.data.tenant, - version: 1, - webinyVersion: String(process.env.WEBINY_VERSION), - values: { - "number@size": file.data.size, - "object@location": { - "text@folderId": "root" - }, - "object@meta": { - "boolean@private": file.data.meta?.private || false, - "number@width": file.data.meta?.width, - "number@height": file.data.meta?.height - }, - "text@aliases": file.data.aliases, - "text@key": file.data.key, - "text@name": file.data.name, - "text@tags": file.data.tags.filter(tag => !tag.startsWith("mime:")), - "text@type": file.data.type - } - }; - } -} - -makeInjectable(FileManager_5_37_0_005, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.37.0/005/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.37.0/005/entities/createEntryEntity.ts deleted file mode 100644 index 965c96d29e9..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/entities/createEntryEntity.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - location: { - type: "map" - }, - modifiedBy: { - type: "map" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - publishedOn: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/entities/createFileEntity.ts b/packages/migrations/src/migrations/5.37.0/005/entities/createFileEntity.ts deleted file mode 100644 index d4c5afcd2d8..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/entities/createFileEntity.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbFileEntity = (table: Table) => { - return createStandardEntity(table, "FM.File"); -}; - -export const createDdbEsFileEntity = (table: Table) => { - return createStandardEntity(table, "FilesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/entities/createLocaleEntity.ts b/packages/migrations/src/migrations/5.37.0/005/entities/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/entities/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/entities/createTenantEntity.ts b/packages/migrations/src/migrations/5.37.0/005/entities/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/entities/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/entities/createTenantLinkEntity.ts b/packages/migrations/src/migrations/5.37.0/005/entities/createTenantLinkEntity.ts deleted file mode 100644 index 0340f2c9514..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/entities/createTenantLinkEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantLinkEntity = (table: Table) => { - return createStandardEntity(table, "SecurityIdentity2Tenant", { type: { type: "string" } }); -}; diff --git a/packages/migrations/src/migrations/5.37.0/005/types.ts b/packages/migrations/src/migrations/5.37.0/005/types.ts deleted file mode 100644 index df01bbcd929..00000000000 --- a/packages/migrations/src/migrations/5.37.0/005/types.ts +++ /dev/null @@ -1,119 +0,0 @@ -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - createdBy: Identity; - ownedBy: Identity; - modifiedBy?: Identity | null; - createdOn: string; - savedOn: string; - modelId: string; - locale: string; - location: { - folderId: string; - }; - publishedOn?: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; -} - -export interface FileSearchRecordValues { - "object@location": { - "text@folderId": string; - }; - "text@type": "FmFile"; - "wby-aco-json@data": { - aliases: string[]; - size: number; - createdBy: { - type: string; - displayName: string; - id: string; - }; - meta: { - private: boolean; - width?: number; - height?: number; - }; - name: string; - id: string; - type: string; - createdOn: string; - key: string; - }; - "text@tags": string[]; -} - -export interface FileEntryValues { - "object@meta": { - "boolean@private": boolean; - "number@width"?: number; - "number@height"?: number; - }; - "object@location": { - "text@folderId": string; - }; - "text@key": string; - "text@aliases": string[]; - "number@size": number; - "text@name": string; - "text@type": string; - "text@tags": string[]; -} - -export interface ListLocalesParams { - tenant: Tenant; -} - -export interface File { - id: string; - key: string; - size: number; - type: string; - name: string; - meta: Record; - tags: string[]; - aliases: string[]; - createdOn: string; - createdBy: Identity; - tenant: string; - locale: string; - webinyVersion: string; - /** - * User can add new fields to the File object so we must allow it in the types. - */ - [key: string]: any; -} - -export interface FileItem { - data: File; -} diff --git a/packages/migrations/src/migrations/5.38.0/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.38.0/001/ddb-es/index.ts deleted file mode 100644 index 4c3c5fe7283..00000000000 --- a/packages/migrations/src/migrations/5.38.0/001/ddb-es/index.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { createFormEntity } from "../entities/createFormEntity"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - esGetIndexExist, - esGetIndexName, - esQueryAll, - forEachTenantLocale, - queryAll -} from "~/utils"; -import { FbForm } from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { Client } from "@elastic/elasticsearch"; -import { executeWithRetry } from "@webiny/utils"; - -export class MultiStepForms_5_38_0_001 implements DataMigration { - private readonly table: Table; - private readonly formEntity: ReturnType; - private readonly elasticsearchClient: Client; - - constructor(table: Table, elasticsearchClient: Client) { - this.table = table; - this.formEntity = createFormEntity(table); - this.elasticsearchClient = elasticsearchClient; - } - - getId() { - return "5.38.0-001"; - } - - getDescription() { - return "Convert forms to multi-step forms."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const indexNameParams = { - tenant: tenantId, - locale: localeCode, - type: "form-builder", - isHeadlessCmsModel: false - }; - - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - ...indexNameParams - }); - - if (!indexExists) { - logger.info( - `No Elasticsearch index found for folders in tenant "${tenantId}" and locale "${localeCode}"; skipping.` - ); - - // Continue with next locale. - return true; - } - - const esRecords = await esQueryAll({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName(indexNameParams), - body: { - query: { - bool: { - filter: [{ term: { "__type.keyword": "fb.form" } }] - } - }, - size: 10000 - } - }); - - if (!esRecords.length) { - // Continue with next locale. - return true; - } - - const formIds = esRecords.map(item => item.formId).filter(Boolean); - const uniqueFormIds = [...new Set(formIds)]; - - const batchGetItems: BatchReadItem[] = []; - for (const formId of uniqueFormIds) { - batchGetItems.push( - this.formEntity.getBatch({ - PK: `T#${tenantId}#L#${localeCode}#FB#F#${formId}`, - SK: "L" - }) - ); - } - - // Get DynamoDB records for all the forms retrieved from Elasticsearch. - const ddbRecords = await batchReadAll({ - table: this.formEntity.table, - items: batchGetItems - }); - - for (const ddbRecord of ddbRecords) { - if (!ddbRecord.steps) { - shouldExecute = true; - return false; - } - } - - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger }: DataMigrationContext): Promise { - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const indexNameParams = { - tenant: tenantId, - locale: localeCode, - type: "form-builder", - isHeadlessCmsModel: false - }; - - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - ...indexNameParams - }); - - if (!indexExists) { - // Continue with next locale. - return true; - } - - const esRecords = await esQueryAll({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName(indexNameParams), - body: { - query: { - bool: { - filter: [{ term: { "__type.keyword": "fb.form" } }] - } - }, - size: 10000 - } - }); - - if (!esRecords.length) { - // Continue with next locale. - return true; - } - - const formIds = esRecords.map(item => item.formId).filter(Boolean); - const uniqueFormIds = [...new Set(formIds)]; - - // For each form record, let's ensure the "steps" property is defined. - for (const formId of uniqueFormIds) { - const ddbRecords = await Promise.all([ - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#${formId}`, - options: { - eq: "L" - } - }), - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#${formId}`, - options: { - eq: "LP" - } - }), - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#${formId}`, - options: { - beginsWith: "REV#" - } - }) - ]).then(response => response.flat()); - - const items: BatchWriteItem[] = []; - for (const ddbRecord of ddbRecords) { - if (ddbRecord.steps) { - continue; - } - - // If no steps are defined, we need to create a single step. - ddbRecord.steps = []; - - if (Array.isArray(ddbRecord.layout)) { - // If layout is an array, we need to create a single step with all the fields. - ddbRecord.steps.push({ title: "Step 1", layout: ddbRecord.layout }); - delete ddbRecord.layout; - } - - items.push(this.formEntity.putBatch(ddbRecord)); - } - - if (!items.length) { - continue; - } - - const execute = () => { - return batchWriteAll({ table: this.formEntity.table, items }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - } - - // Continue with next locale. - return true; - } - }); - - logger.info("Updated all the forms."); - } -} - -makeInjectable(MultiStepForms_5_38_0_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.38.0/001/ddb/index.ts b/packages/migrations/src/migrations/5.38.0/001/ddb/index.ts deleted file mode 100644 index c4bce145404..00000000000 --- a/packages/migrations/src/migrations/5.38.0/001/ddb/index.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { createFormEntity } from "../entities/createFormEntity"; -import { batchWriteAll, BatchWriteItem, forEachTenantLocale, queryAll } from "~/utils"; -import { FbForm } from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; - -export class MultiStepForms_5_38_0_001 implements DataMigration { - private readonly formEntity: ReturnType; - private readonly table: Table; - - constructor(table: Table) { - this.table = table; - this.formEntity = createFormEntity(table); - } - - getId() { - return "5.38.0-001"; - } - - getDescription() { - return "Convert forms to multi-step forms."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const ddbRecords = await queryAll({ - entity: this.formEntity, - // Pulling all forms via the `T#root#L#en-US#FB#F` PK will suffice. - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F` - }); - - for (const ddbRecord of ddbRecords) { - if (!ddbRecord.steps) { - shouldExecute = true; - return false; - } - } - - // Continue to the next locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger }: DataMigrationContext): Promise { - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const ddbRecords = await Promise.all([ - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F` - }), - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#L` - }), - queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#LP` - }) - ]).then(response => response.flat()); - - if (!ddbRecords.length) { - // Continue to the next locale. - return true; - } - - const items: BatchWriteItem[] = []; - for (const ddbRecord of ddbRecords) { - if (ddbRecord.steps) { - continue; - } - - // If no steps are defined, we need to create a single step. - ddbRecord.steps = []; - - if (Array.isArray(ddbRecord.layout)) { - // If layout is an array, we need to create a single step with all the fields. - ddbRecord.steps = [{ title: "Step 1", layout: ddbRecord.layout }]; - delete ddbRecord.layout; - } - - items.push(this.formEntity.putBatch(ddbRecord)); - } - - const execute = () => { - return batchWriteAll({ table: this.formEntity.table, items }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - - return true; - } - }); - - logger.info("Updated all the forms."); - } -} - -makeInjectable(MultiStepForms_5_38_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.38.0/001/entities/createFormEntity.ts b/packages/migrations/src/migrations/5.38.0/001/entities/createFormEntity.ts deleted file mode 100644 index 2999aedf4d2..00000000000 --- a/packages/migrations/src/migrations/5.38.0/001/entities/createFormEntity.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createFormEntity = (table: Table) => { - return createLegacyEntity(table, "FormBuilderForm", { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - formId: { - type: "string" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - savedOn: { - type: "string" - }, - createdOn: { - type: "string" - }, - name: { - type: "string" - }, - slug: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - published: { - type: "boolean" - }, - publishedOn: { - type: "string" - }, - status: { - type: "string" - }, - fields: { - type: "list" - }, - steps: { - type: "list" - }, - stats: { - type: "map" - }, - settings: { - type: "map" - }, - triggers: { - type: "map" - }, - webinyVersion: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.38.0/001/types.ts b/packages/migrations/src/migrations/5.38.0/001/types.ts deleted file mode 100644 index ec935e1b54a..00000000000 --- a/packages/migrations/src/migrations/5.38.0/001/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type FbFormLayout = Array>; - -export interface FbForm { - id: string; - formId: string; - steps?: Array<{ title: string; layout: FbFormLayout }>; - layout?: FbFormLayout; - TYPE?: string; -} diff --git a/packages/migrations/src/migrations/5.38.0/002/ddb-es/index.ts b/packages/migrations/src/migrations/5.38.0/002/ddb-es/index.ts deleted file mode 100644 index 09c05f68d3d..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/ddb-es/index.ts +++ /dev/null @@ -1,329 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback, - disableElasticsearchIndexing, - esGetIndexExist, - esGetIndexName, - esQueryAll, - fetchOriginalElasticsearchSettings, - forEachTenantLocale, - restoreOriginalElasticsearchSettings -} from "~/utils"; -import { FbForm, FbFormSubmission } from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { Client } from "@elastic/elasticsearch"; -import { executeWithRetry } from "@webiny/utils"; -import { createFormSubmissionEntity } from "~/migrations/5.38.0/002/entities/createFormSubmissionEntity"; -import { createFormSubmissionDdbEsEntity } from "~/migrations/5.38.0/002/entities/createFormSubmissionDdbEsEntity"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface IndexSettings { - refresh_interval: `${number}s`; -} - -interface FormSubmissionsDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; - indexes: { - [index: string]: IndexSettings | null; - }; -} - -export class MultiStepForms_5_38_0_002 implements DataMigration { - private readonly table: Table; - private readonly esTable: Table; - private readonly formSubmissionEntity: ReturnType; - private readonly formSubmissionDdbEsEntity: ReturnType; - private readonly elasticsearchClient: Client; - - constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.table = table; - this.esTable = esTable; - this.formSubmissionEntity = createFormSubmissionEntity(table); - this.formSubmissionDdbEsEntity = createFormSubmissionDdbEsEntity(esTable); - this.elasticsearchClient = elasticsearchClient; - } - - getId() { - return "5.38.0-002"; - } - - getDescription() { - return "Convert forms to multi-step forms (form submissions)."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const indexNameParams = { - tenant: tenantId, - locale: localeCode, - type: "form-builder", - isHeadlessCmsModel: false - }; - - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - ...indexNameParams - }); - - if (!indexExists) { - logger.info( - `No Elasticsearch index found for folders in tenant "${tenantId}" and locale "${localeCode}"; skipping.` - ); - - // Continue with next locale. - return true; - } - - const esRecords = await esQueryAll({ - elasticsearchClient: this.elasticsearchClient, - index: esGetIndexName(indexNameParams), - body: { - query: { - bool: { - filter: [{ term: { "__type.keyword": "fb.submission" } }], - must_not: { - exists: { - field: "form.steps" - } - } - } - }, - size: 1 - } - }); - - if (esRecords.length) { - shouldExecute = true; - return false; - } - - return true; - } - }); - - return shouldExecute; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = - context.checkpoint || ({} as FormSubmissionsDataMigrationCheckpoint); - - if (migrationStatus.lastEvaluatedKey === true) { - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.debug(`Scanning DynamoDB table... ${usingKey}`); - - await ddbScanWithCallback( - { - entity: this.formSubmissionEntity, - options: { - filters: [ - { - attr: "TYPE", - eq: "fb.formSubmission" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 500 - } - }, - async scanResults => { - logger.debug(`Processing ${scanResults.items.length} items...`); - const primaryTableRecordsToWrite: BatchWriteItem[] = []; - const ddbEsTableRecordsToRead: BatchReadItem[] = []; - const ddbEsTableRecordsToWrite: BatchWriteItem[] = []; - - // First, let's prepare a list of records to write to the primary table. - for (const scanResult of scanResults.items) { - if (scanResult.form.steps) { - continue; - } - - // If no steps are defined, we need to create a single step. - scanResult.form.steps = []; - - if (Array.isArray(scanResult.form.layout)) { - // If layout is an array, we need to create a single step with all the fields. - scanResult.form.steps = [ - { title: "Step 1", layout: scanResult.form.layout } - ]; - delete scanResult.form.layout; - } - - primaryTableRecordsToWrite.push(this.formSubmissionEntity.putBatch(scanResult)); - ddbEsTableRecordsToRead.push( - this.formSubmissionDdbEsEntity.getBatch(scanResult) - ); - - const index = esGetIndexName({ - tenant: scanResult.tenant, - locale: scanResult.locale, - type: "form-builder", - isHeadlessCmsModel: false - }); - - // Check for the elasticsearch index settings - if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) { - // We need to fetch the index settings first - const settings = await fetchOriginalElasticsearchSettings({ - index, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - // ... add it to the checkpoint... - migrationStatus.indexes = { - ...migrationStatus.indexes, - [index]: settings - }; - - // and then set not to index - await disableElasticsearchIndexing({ - elasticsearchClient: this.elasticsearchClient, - index, - logger - }); - } - } - - // Second, let's prepare a list of records to write to the DDB-ES table. - const ddbEsTableRecords = await batchReadAll({ - table: this.esTable, - items: ddbEsTableRecordsToRead - }); - - for (const ddbEsTableRecord of ddbEsTableRecords) { - if (!ddbEsTableRecord.data || !ddbEsTableRecord.data.form) { - continue; - } - - if (ddbEsTableRecord.data.form.steps) { - continue; - } - - // If no steps are defined, we need to create a single step. - ddbEsTableRecord.data.form.steps = []; - - if (Array.isArray(ddbEsTableRecord.data.form.layout)) { - // If layout is an array, we need to create a single step with all the fields. - ddbEsTableRecord.data.form.steps = [ - { title: "Step 1", layout: ddbEsTableRecord.data.form.layout } - ]; - delete ddbEsTableRecord.data.form.layout; - } - - ddbEsTableRecordsToWrite.push( - this.formSubmissionDdbEsEntity.putBatch(ddbEsTableRecord) - ); - } - - { - // 1. Update DynamoDB records (primary table). - const execute = () => { - return batchWriteAll({ - table: this.formSubmissionEntity.table, - items: primaryTableRecordsToWrite - }); - }; - - logger.trace("Storing the DynamoDB records (primary table)..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - - logger.trace("...stored."); - } - - { - // 2. Update DynamoDB records (DDB-ES table). - const execute = () => { - return batchWriteAll({ - table: this.formSubmissionDdbEsEntity.table, - items: ddbEsTableRecordsToWrite - }); - }; - - logger.trace("Storing the DynamoDB records (DynamoDB-ES table)..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - - logger.trace("...stored."); - } - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = scanResults.lastEvaluatedKey?.PK - ? (scanResults.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - /** - * This is the end of the migration. - */ - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - migrationStatus.lastEvaluatedKey = true; - migrationStatus.indexes = {}; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(MultiStepForms_5_38_0_002, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.38.0/002/ddb/index.ts b/packages/migrations/src/migrations/5.38.0/002/ddb/index.ts deleted file mode 100644 index 1c84e41419d..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/ddb/index.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { createFormEntity } from "../entities/createFormEntity"; -import { createFormSubmissionEntity } from "../entities/createFormSubmissionEntity"; -import { - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback, - forEachTenantLocale, - queryAll, - queryOne -} from "~/utils"; -import { FbForm, FbFormSubmission } from "../types"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface FolderSubmissionsDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; -} - -export class MultiStepForms_5_38_0_002 implements DataMigration { - private readonly formEntity: ReturnType; - private readonly formSubmissionEntity: ReturnType; - private readonly table: Table; - - constructor(table: Table) { - this.table = table; - this.formEntity = createFormEntity(table); - this.formSubmissionEntity = createFormSubmissionEntity(table); - } - - getId() { - return "5.38.0-002"; - } - - getDescription() { - return "Convert forms to multi-step forms (form submissions)."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const latestFormRecords = await queryAll({ - entity: this.formEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#F#L` - }); - - const formIds = latestFormRecords.map(item => item.formId).filter(Boolean); - const uniqueFormIds = [...new Set(formIds)]; - - for (const formId of uniqueFormIds) { - // Get a form submission. If the "steps" property - // is not defined, we need to execute the migration. - const formSubmission = await queryOne({ - entity: this.formSubmissionEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#FB#FS#${formId}` - }); - - if (!formSubmission) { - continue; - } - - if (!formSubmission.form.steps) { - shouldExecute = true; - return false; - } - } - - // Continue to the next locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - if (migrationStatus.lastEvaluatedKey === true) { - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.debug(`Scanning DynamoDB table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.formSubmissionEntity, - options: { - filters: [ - { - attr: "TYPE", - eq: "fb.formSubmission" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 1000 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const items: BatchWriteItem[] = []; - for (const item of result.items) { - if (item.form.steps) { - continue; - } - - // If no steps are defined, we need to create a single step. - item.form.steps = []; - - if (Array.isArray(item.form.layout)) { - // If layout is an array, we need to create a single step with all the fields. - item.form.steps = [{ title: "Step 1", layout: item.form.layout }]; - delete item.form.layout; - } - - items.push(this.formSubmissionEntity.putBatch(item)); - } - - const execute = () => { - return batchWriteAll({ table: this.formSubmissionEntity.table, items }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus.lastEvaluatedKey = true; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(MultiStepForms_5_38_0_002, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.38.0/002/entities/createFormEntity.ts b/packages/migrations/src/migrations/5.38.0/002/entities/createFormEntity.ts deleted file mode 100644 index 2999aedf4d2..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/entities/createFormEntity.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createFormEntity = (table: Table) => { - return createLegacyEntity(table, "FormBuilderForm", { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - formId: { - type: "string" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - createdBy: { - type: "map" - }, - ownedBy: { - type: "map" - }, - savedOn: { - type: "string" - }, - createdOn: { - type: "string" - }, - name: { - type: "string" - }, - slug: { - type: "string" - }, - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - published: { - type: "boolean" - }, - publishedOn: { - type: "string" - }, - status: { - type: "string" - }, - fields: { - type: "list" - }, - steps: { - type: "list" - }, - stats: { - type: "map" - }, - settings: { - type: "map" - }, - triggers: { - type: "map" - }, - webinyVersion: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionDdbEsEntity.ts b/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionDdbEsEntity.ts deleted file mode 100644 index d8a99e35ce6..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionDdbEsEntity.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createFormSubmissionDdbEsEntity = (table: Table) => { - return createStandardEntity(table, "FormBuilderSubmissionEs", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionEntity.ts b/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionEntity.ts deleted file mode 100644 index 5a34152c174..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/entities/createFormSubmissionEntity.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createFormSubmissionEntity = (table: Table) => { - return createLegacyEntity(table, "FormBuilderForm", { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - id: { - type: "string" - }, - TYPE: { - type: "string" - }, - data: { - type: "map" - }, - meta: { - type: "map" - }, - form: { - type: "map" - }, - logs: { - type: "list" - }, - createdOn: { - type: "string" - }, - savedOn: { - type: "string" - }, - ownedBy: { - type: "map" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - webinyVersion: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.38.0/002/types.ts b/packages/migrations/src/migrations/5.38.0/002/types.ts deleted file mode 100644 index 70217d26994..00000000000 --- a/packages/migrations/src/migrations/5.38.0/002/types.ts +++ /dev/null @@ -1,19 +0,0 @@ -export type FbFormLayout = Array>; - -export interface FbForm { - id: string; - formId: string; - steps?: Array<{ title: string; layout: FbFormLayout }>; - layout?: FbFormLayout; - TYPE?: string; -} - -export interface FbFormSubmission { - tenant: string; - locale: string; - id: string; - form: { - steps?: Array<{ title: string; layout: FbFormLayout }>; - layout?: FbFormLayout; - }; -} diff --git a/packages/migrations/src/migrations/5.38.0/003/ddb/compressContent.ts b/packages/migrations/src/migrations/5.38.0/003/ddb/compressContent.ts deleted file mode 100644 index 186908b8312..00000000000 --- a/packages/migrations/src/migrations/5.38.0/003/ddb/compressContent.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { compress } from "@webiny/utils/compression/gzip"; - -export const compressContent = async (data: Record) => { - const compressedValue = await compress(JSON.stringify(data)); - - return { - compression: "gzip", - value: compressedValue.toString("base64") - }; -}; diff --git a/packages/migrations/src/migrations/5.38.0/003/ddb/index.ts b/packages/migrations/src/migrations/5.38.0/003/ddb/index.ts deleted file mode 100644 index 0ded1c1af95..00000000000 --- a/packages/migrations/src/migrations/5.38.0/003/ddb/index.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - createOldPageBlockEntity, - createNewPageBlockEntity -} from "../entities/createPageBlockEntity"; -import { batchWriteAll, ddbQueryAllWithCallback, forEachTenantLocale, count } from "~/utils"; -import { PbPageBlock } from "../types"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { compressContent } from "./compressContent"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export class PageBlocks_5_38_0_003 implements DataMigration { - private readonly oldPageBlockEntity: ReturnType; - private readonly newPageBlockEntity: ReturnType; - private readonly table: Table; - - constructor(table: Table) { - this.table = table; - this.oldPageBlockEntity = createOldPageBlockEntity(table); - this.newPageBlockEntity = createNewPageBlockEntity(table); - } - - getId() { - return "5.38.0-003"; - } - - getDescription() { - return "Compress block content, and add GSI1."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - // We're doing `queryAll` because, at this point in time, this feature is - // quite new, and we know there won't be a large number of records, so no need to paginate. - const oldBlocksCount = await count({ - entity: this.oldPageBlockEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#B` - }); - - const newBlocksCount = await count({ - entity: this.newPageBlockEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#BLOCKS`, - options: { - index: "GSI1" - } - }); - - if (newBlocksCount < oldBlocksCount) { - shouldExecute = true; - return false; - } - // Continue to the next locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - let batch = 0; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const groupId = `${tenantId}:${localeCode}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - return true; - } - - await ddbQueryAllWithCallback( - { - entity: this.oldPageBlockEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#B`, - options: { - gt: status || " " - } - }, - async oldBlocks => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${oldBlocks.length} blocks).` - ); - - const items = await Promise.all( - oldBlocks.map(async oldBlock => { - const newPageBlock = { - ...oldBlock, - PK: `T#${tenantId}#L#${localeCode}#PB#BLOCK#${oldBlock.id}`, - SK: "A", - GSI1_PK: `T#${tenantId}#L#${localeCode}#PB#BLOCKS`, - // We need the ability to filter by category slug, and `id` is for uniqueness. - GSI1_SK: `${oldBlock.blockCategory}#${oldBlock.id}`, - content: await compressContent(oldBlock.content) - }; - - // We no longer have a `preview`. - delete newPageBlock["preview"]; - - return this.newPageBlockEntity.putBatch(newPageBlock); - }) - ); - - const execute = () => { - return batchWriteAll({ table: this.newPageBlockEntity.table, items }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = oldBlocks[oldBlocks.length - 1]?.id; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - // Mark group as completed. - migrationStatus[groupId] = true; - - // Store checkpoint. - await context.createCheckpoint(migrationStatus); - - // Continue processing. - return true; - } - }); - } -} - -makeInjectable(PageBlocks_5_38_0_003, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.38.0/003/entities/createPageBlockEntity.ts b/packages/migrations/src/migrations/5.38.0/003/entities/createPageBlockEntity.ts deleted file mode 100644 index b3f15d94066..00000000000 --- a/packages/migrations/src/migrations/5.38.0/003/entities/createPageBlockEntity.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Table, AttributeDefinitions } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -const oldAttributes: AttributeDefinitions = { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - name: { - type: "string" - }, - blockCategory: { - type: "string" - }, - content: { - type: "map" - }, - preview: { - type: "map" - }, - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - } -}; - -export const createOldPageBlockEntity = (table: Table) => { - return createLegacyEntity(table, "PbPageBlocks", oldAttributes); -}; - -export const createNewPageBlockEntity = (table: Table) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { preview, ...attrs } = oldAttributes; - - return createLegacyEntity(table, "PbPageBlocks", { - ...attrs, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.38.0/003/types.ts b/packages/migrations/src/migrations/5.38.0/003/types.ts deleted file mode 100644 index bff2549e566..00000000000 --- a/packages/migrations/src/migrations/5.38.0/003/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface PbPageBlock { - id: string; - tenant: string; - locale: string; - blockCategory: string; - content: Record; - preview?: any; -} diff --git a/packages/migrations/src/migrations/5.39.0/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.0/001/ddb-es/index.ts deleted file mode 100644 index eae8ee791f4..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/ddb-es/index.ts +++ /dev/null @@ -1,354 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback, - disableElasticsearchIndexing, - esGetIndexName, - fetchOriginalElasticsearchSettings, - restoreOriginalElasticsearchSettings, - scan -} from "~/utils"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { Client } from "@elastic/elasticsearch"; -import { executeWithRetry } from "@webiny/utils"; -import { createDdbEntryEntity, createDdbEsEntryEntity } from "../entities/createEntryEntity"; -import { CmsEntry } from "../types"; -import { getDecompressedData } from "../utils/getDecompressedData"; -import { getCompressedData } from "../utils/getCompressedData"; -import { assignNewMetaFields } from "../utils/assignNewMetaFields"; -import { fixTypeFieldValue } from "../utils/fixTypeFieldValue"; -import { isMigratedEntry } from "../utils/isMigratedEntry"; -import { getOldestRevisionCreatedOn } from "../utils/getOldestRevisionCreatedOn"; -import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface IndexSettings { - refresh_interval: `${number}s`; -} - -interface CmsEntriesRootFolderDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; - indexes: { - [index: string]: IndexSettings | null; - }; -} - -interface DynamoDbElasticsearchRecord { - PK: string; - SK: string; - data: string; -} - -export class CmsEntriesInitNewMetaFields_5_39_0_001 implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - - public constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - } - - getId() { - return "5.39.0-001"; - } - - getDescription() { - return "Write new revision and entry-level on/by meta fields."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - const result = await scan({ - entity: this.ddbEsEntryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntriesElasticsearch" - } - ], - limit: 100 - } - }); - - if (result.items.length === 0) { - logger.info(`No CMS entries found in the system; skipping migration.`); - return false; - } else if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - const data = await getDecompressedData(item.data); - if (!data) { - continue; - } - - if (!isMigratedEntry(data)) { - return true; - } - } - logger.info(`CMS entries already upgraded. skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = - context.checkpoint || ({} as CmsEntriesRootFolderDataMigrationCheckpoint); - - if (migrationStatus.lastEvaluatedKey === true) { - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.debug(`Scanning DynamoDB Elasticsearch table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.ddbEntryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 100 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - const ddbEsGetItems: Record = {}; - /** - * Update the DynamoDB part of the records. - */ - for (const item of result.items) { - const index = esGetIndexName({ - tenant: item.tenant, - locale: item.locale, - type: item.modelId, - isHeadlessCmsModel: true - }); - - // Check for the elasticsearch index settings - if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) { - // We need to fetch the index settings first - const settings = await fetchOriginalElasticsearchSettings({ - index, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - // ... add it to the checkpoint... - migrationStatus.indexes = { - ...migrationStatus.indexes, - [index]: settings - }; - // and then set not to index - await disableElasticsearchIndexing({ - elasticsearchClient: this.elasticsearchClient, - index, - logger - }); - } - - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(item, { - createdOn, - ...firstLastPublishedOnByFields - }); - - // Fixes the value of the `TYPE` field, if it's not valid. - fixTypeFieldValue(item); - - ddbItems.push(this.ddbEntryEntity.putBatch(item)); - - /** - * Prepare the loading of DynamoDB Elasticsearch part of the records. - */ - if (ddbEsGetItems[`${item.entryId}:L`]) { - continue; - } - - ddbEsGetItems[`${item.entryId}:L`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "L" - }); - - if (item.status === "published" || !!item.locked) { - ddbEsGetItems[`${item.entryId}:P`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "P" - }); - } - } - - /** - * Get all the records from DynamoDB Elasticsearch. - */ - const esRecords = await batchReadAll({ - table: this.ddbEsEntryEntity.table, - items: Object.values(ddbEsGetItems) - }); - - for (const esRecord of esRecords) { - const decompressedData = await getDecompressedData(esRecord.data); - if (!decompressedData) { - logger.trace( - `Skipping record "${esRecord.PK}" as it is not a valid CMS entry...` - ); - continue; - } - - if (isMigratedEntry(decompressedData)) { - const forceExecute = context.forceExecute; - if (!forceExecute) { - logger.trace( - `Skipping record "${decompressedData.entryId}" as it already has meta fields defined...` - ); - continue; - } - } - - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: { ...decompressedData, PK: esRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: { ...decompressedData, PK: esRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(decompressedData, { - createdOn, - ...firstLastPublishedOnByFields - }); - - const compressedData = await getCompressedData(decompressedData); - - ddbEsItems.push( - this.ddbEsEntryEntity.putBatch({ - ...esRecord, - data: compressedData - }) - ); - } - - const execute = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - logger.trace("Storing the DynamoDB Elasticsearch records..."); - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - /** - * This is the end of the migration. - */ - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - migrationStatus.lastEvaluatedKey = true; - migrationStatus.indexes = {}; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(CmsEntriesInitNewMetaFields_5_39_0_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.39.0/001/ddb/index.ts b/packages/migrations/src/migrations/5.39.0/001/ddb/index.ts deleted file mode 100644 index 4e90da7c1f2..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/ddb/index.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { batchWriteAll, BatchWriteItem, ddbScanWithCallback, scan } from "~/utils"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; -import { CmsEntry } from "../types"; -import { createDdbEntryEntity } from "../entities/createEntryEntity"; -import { assignNewMetaFields } from "../utils/assignNewMetaFields"; -import { isMigratedEntry } from "../utils/isMigratedEntry"; -import { getOldestRevisionCreatedOn } from "../utils/getOldestRevisionCreatedOn"; -import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface FolderSubmissionsDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; -} - -export class CmsEntriesInitNewMetaFields_5_39_0_001 implements DataMigration { - private readonly entryEntity: ReturnType; - - constructor(table: Table) { - this.entryEntity = createDdbEntryEntity(table); - } - - getId() { - return "5.39.0-001"; - } - - getDescription() { - return "Write new revision and entry-level on/by meta fields."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - /** - * We will go through a larger amount of the entries, to determine if they need to be updated. - */ - const result = await scan({ - entity: this.entryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - limit: 100 - } - }); - - if (result.items.length === 0) { - logger.info(`No CMS entries found in the system; skipping migration.`); - return false; - } else if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - if (!isMigratedEntry(item)) { - return true; - } - } - - logger.info(`CMS entries already upgraded. skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - if (migrationStatus.lastEvaluatedKey === true) { - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.debug(`Scanning DynamoDB table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.entryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 100 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const items: BatchWriteItem[] = []; - for (const item of result.items) { - if (isMigratedEntry(item)) { - continue; - } - - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: item, - entryEntity: this.entryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: item, - entryEntity: this.entryEntity - }); - - assignNewMetaFields(item, { - createdOn, - ...firstLastPublishedOnByFields - }); - - items.push(this.entryEntity.putBatch(item)); - } - - const execute = () => { - return batchWriteAll({ table: this.entryEntity.table, items }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error(`"batchWriteAll" attempt #${error.attemptNumber} failed.`); - logger.error(error.message); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - migrationStatus.lastEvaluatedKey = true; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(CmsEntriesInitNewMetaFields_5_39_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts deleted file mode 100644 index 3a81dfbd5f1..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity, createStandardEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - modelId: { - type: "string" - }, - locale: { - type: "string" - }, - - /** - * Revision-level meta fields. 👇 - */ - revisionCreatedOn: { type: "string" }, - revisionSavedOn: { type: "string" }, - revisionModifiedOn: { type: "string" }, - revisionDeletedOn: { type: "string" }, - revisionRestoredOn: { type: "string" }, - revisionFirstPublishedOn: { type: "string" }, - revisionLastPublishedOn: { type: "string" }, - revisionCreatedBy: { type: "map" }, - revisionSavedBy: { type: "map" }, - revisionModifiedBy: { type: "map" }, - revisionDeletedBy: { type: "map" }, - revisionRestoredBy: { type: "map" }, - revisionFirstPublishedBy: { type: "map" }, - revisionLastPublishedBy: { type: "map" }, - - /** - * Entry-level meta fields. 👇 - */ - createdOn: { type: "string" }, - savedOn: { type: "string" }, - modifiedOn: { type: "string" }, - deletedOn: { type: "string" }, - restoredOn: { type: "string" }, - firstPublishedOn: { type: "string" }, - lastPublishedOn: { type: "string" }, - createdBy: { type: "map" }, - savedBy: { type: "map" }, - modifiedBy: { type: "map" }, - deletedBy: { type: "map" }, - restoredBy: { type: "map" }, - firstPublishedBy: { type: "map" }, - lastPublishedBy: { type: "map" }, - - // Deprecated fields. - ownedBy: { type: "map" }, - publishedOn: { type: "string" }, - - version: { - type: "number" - }, - locked: { - type: "boolean" - }, - status: { - type: "string" - }, - values: { - type: "map" - }, - meta: { - type: "map" - }, - location: { - type: "map" - } -}; - -const ddbEsAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - index: { - type: "string" - }, - data: { - type: "map" - } -}; - -export const createDdbEntryEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; - -export const createDdbEsEntryEntity = (table: Table) => { - return createStandardEntity(table, "CmsEntriesElasticsearch", ddbEsAttributes); -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/types.ts b/packages/migrations/src/migrations/5.39.0/001/types.ts deleted file mode 100644 index 0dc96c3a4da..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/types.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { CmsIdentity } from "@webiny/api-headless-cms/types"; - -export interface Tenant { - data: { - id: string; - name: string; - }; -} - -export interface I18NLocale { - code: string; -} - -export interface Identity { - id: string; - displayName: string | null; - type: string; -} - -export interface CmsEntryValues { - [key: string]: any; -} - -export type CmsEntryStatus = "published" | "unpublished" | "draft"; - -export interface CmsEntry { - webinyVersion: string; - tenant: string; - entryId: string; - id: string; - modelId: string; - locale: string; - version: number; - locked: boolean; - status: CmsEntryStatus; - values: T; - meta?: { - [key: string]: any; - }; - location?: { - folderId?: string | null; - }; - - /** - * Revision-level meta fields. 👇 - */ - - /** - * An ISO 8601 date/time string. - */ - revisionCreatedOn: string; - /** - * An ISO 8601 date/time string. - */ - revisionSavedOn: string; - /** - * An ISO 8601 date/time string. - */ - revisionModifiedOn: string | null; - /** - * An ISO 8601 date/time string. - */ - revisionFirstPublishedOn: string | null; - /** - * An ISO 8601 date/time string. - */ - revisionLastPublishedOn: string | null; - - /** - * Identity that last ionCreated the entry. - */ - revisionCreatedBy: CmsIdentity; - /** - * Identity that last ionSaved the entry. - */ - revisionSavedBy: CmsIdentity; - /** - * Identity that last ionModified the entry. - */ - revisionModifiedBy: CmsIdentity | null; - /** - * Identity that first published the entry. - */ - revisionFirstPublishedBy: CmsIdentity | null; - /** - * Identity that last published the entry. - */ - revisionLastPublishedBy: CmsIdentity | null; - - /** - * Entry-level meta fields. 👇 - */ - - /** - * An ISO 8601 date/time string. - */ - createdOn: string; - /** - * An ISO 8601 date/time string. - */ - savedOn: string; - /** - * An ISO 8601 date/time string. - */ - modifiedOn: string | null; - /** - * An ISO 8601 date/time string. - */ - firstPublishedOn: string | null; - /** - * An ISO 8601 date/time string. - */ - lastPublishedOn: string | null; - - /** - * Identity that last created the entry. - */ - createdBy: CmsIdentity; - /** - * Identity that last saved the entry. - */ - savedBy: CmsIdentity; - /** - * Identity that last modified the entry. - */ - modifiedBy: CmsIdentity | null; - /** - * Identity that first published the entry. - */ - firstPublishedBy: CmsIdentity | null; - /** - * Identity that last published the entry. - */ - lastPublishedBy: CmsIdentity | null; - - // Deprecated fields. - ownedBy: CmsIdentity; - publishedOn?: string | null; -} - -export interface ListLocalesParams { - tenant: Tenant; -} - -export interface ListModelsParams { - tenant: Tenant; - locale: I18NLocale; -} - -export interface CmsModel { - modelId: string; - name: string; -} diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/assignNewMetaFields.ts b/packages/migrations/src/migrations/5.39.0/001/utils/assignNewMetaFields.ts deleted file mode 100644 index 85ca5b2ef43..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/assignNewMetaFields.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { CmsEntry } from "../types"; -import { CmsIdentity } from "@webiny/api-headless-cms/types"; - -interface SpecialFields { - createdOn: string; - firstPublishedOn: string | null; - lastPublishedOn: string | null; - firstPublishedBy: CmsIdentity | null; - lastPublishedBy: CmsIdentity | null; -} - -export const assignNewMetaFields = (entry: CmsEntry, specialFields: SpecialFields) => { - const isDraft = entry.status === "draft"; - - // We don't have `publishedBy`, that's why we're relying on `modifiedBy` or `createdBy`. - const revisionFirstLastPublishedOn = isDraft ? null : entry.publishedOn || null; - const revisionFirstLastPublishedBy = isDraft ? null : entry.modifiedBy || entry.createdBy; - - Object.assign(entry, { - // Revision-level meta fields. - revisionCreatedOn: entry.createdOn, - - // `modifiedOn` does not exist, that's why we're using `savedOn`. - // We only use it if there's a `modifiedBy` set. - revisionModifiedOn: entry.modifiedBy ? entry.savedOn : null, - - revisionSavedOn: entry.savedOn, - revisionCreatedBy: entry.createdBy, - revisionModifiedBy: entry.modifiedBy || null, - revisionSavedBy: entry.modifiedBy || entry.createdBy, - - revisionFirstPublishedOn: revisionFirstLastPublishedOn, - revisionFirstPublishedBy: revisionFirstLastPublishedBy, - - revisionLastPublishedOn: revisionFirstLastPublishedOn, - revisionLastPublishedBy: revisionFirstLastPublishedBy, - - // Entry-level meta fields. - createdOn: specialFields.createdOn, - - // `modifiedOn` does not exist, that's why we're using `savedOn`. - // We only use it if there's a `modifiedBy` set. - modifiedOn: entry.modifiedBy ? entry.savedOn : null, - - savedOn: entry.savedOn, - createdBy: entry.ownedBy, - modifiedBy: entry.modifiedBy || null, - savedBy: entry.modifiedBy || entry.createdBy, - - firstPublishedOn: specialFields.firstPublishedOn, - firstPublishedBy: specialFields.firstPublishedBy, - - lastPublishedOn: specialFields.lastPublishedOn, - lastPublishedBy: specialFields.lastPublishedBy - }); -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts deleted file mode 100644 index ddcf42ed155..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { CmsIdentity } from "@webiny/api-headless-cms/types"; - -interface Fallbacks { - dateTime: string; - identity: CmsIdentity; -} - -// All non-nullable meta fields must have values assigned. -export const ensureAllNonNullableValues = (entry: CmsEntry, fallbacks: Fallbacks) => { - const entryFallbackDateTime = - entry.savedOn || - entry.modifiedOn || - entry.createdOn || - entry.revisionCreatedOn || - entry.revisionModifiedOn || - entry.revisionSavedOn || - fallbacks.dateTime; - - const entryFallbackIdentity = - entry.savedBy || - entry.modifiedBy || - entry.createdBy || - entry.revisionCreatedBy || - entry.revisionModifiedBy || - entry.revisionSavedBy || - fallbacks.identity; - - if (!entry.revisionCreatedOn) { - entry.revisionCreatedOn = entryFallbackDateTime; - } - - if (!entry.revisionSavedOn) { - entry.revisionSavedOn = entryFallbackDateTime; - } - - if (!entry.revisionCreatedBy) { - entry.revisionCreatedBy = entryFallbackIdentity; - } - - if (!entry.revisionSavedBy) { - entry.revisionSavedBy = entryFallbackIdentity; - } - - if (!entry.createdOn) { - entry.createdOn = entryFallbackDateTime; - } - - if (!entry.savedOn) { - entry.savedOn = entryFallbackDateTime; - } - - if (!entry.createdBy) { - entry.createdBy = entryFallbackIdentity; - } - - if (!entry.savedBy) { - entry.savedBy = entryFallbackIdentity; - } -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/fixTypeFieldValue.ts b/packages/migrations/src/migrations/5.39.0/001/utils/fixTypeFieldValue.ts deleted file mode 100644 index b991a77293a..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/fixTypeFieldValue.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { CmsEntry } from "../types"; -import { ScanDbItem } from "@webiny/db-dynamodb"; -import { - createRecordType, - createLatestRecordType, - createPublishedRecordType -} from "@webiny/api-headless-cms-ddb-es/operations/entry/recordType"; - -export const fixTypeFieldValue = (entry: ScanDbItem) => { - if (entry.SK.startsWith("REV#")) { - const TYPE = createRecordType(); - if (entry.TYPE !== TYPE) { - entry.TYPE = TYPE; - } - return; - } - - if (entry.SK === "L") { - const TYPE = createLatestRecordType(); - if (entry.TYPE !== TYPE) { - entry.TYPE = TYPE; - } - return; - } - - if (entry.SK === "P") { - const TYPE = createPublishedRecordType(); - if (entry.TYPE !== TYPE) { - entry.TYPE = TYPE; - } - return; - } -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getCompressedData.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getCompressedData.ts deleted file mode 100644 index 31f77e45314..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getCompressedData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { compress as gzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; - -export const getCompressedData = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getDecompressedData.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getDecompressedData.ts deleted file mode 100644 index 593bd0e39a1..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getDecompressedData.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { decompress as ungzip } from "@webiny/utils/compression/gzip"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; -const FROM_STORAGE_ENCODING = "utf8"; - -const convertToBuffer = (value: string | Buffer) => { - if (typeof value === "string") { - return Buffer.from(value, TO_STORAGE_ENCODING); - } - return value; -}; - -export const getDecompressedData = async (data: any): Promise => { - if (data?.compression !== GZIP) { - return null; - } - try { - const buf = await ungzip(convertToBuffer(data.value)); - const value = buf.toString(FROM_STORAGE_ENCODING); - return JSON.parse(value); - } catch (ex) { - return null; - } -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts deleted file mode 100644 index f7ef6318ebe..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { CmsIdentity } from "@webiny/api-headless-cms/types"; -import { queryAll } from "@webiny/db-dynamodb"; -import { Entity } from "@webiny/db-dynamodb/toolbox"; -import { executeWithRetry, ExecuteWithRetryOptions } from "@webiny/utils"; - -const NON_EXISTING_DATA_MIGRATION_IDENTITY: CmsIdentity = { - id: "data-migration", - type: "data-migration", - displayName: "Data Migration" -}; - -interface GetFallbackIdentityParams { - entity: Entity; - tenant: string; - retryOptions?: ExecuteWithRetryOptions; -} - -interface AdminUserRecord { - data: { - createdOn: string; - id: string; - displayName: string; - }; -} - -const identitiesPerTenantCache: Record = {}; - -export const getFallbackIdentity = async ({ - entity, - tenant, - retryOptions -}: GetFallbackIdentityParams): Promise => { - if (identitiesPerTenantCache[tenant]) { - return identitiesPerTenantCache[tenant]; - } - - const executeQueryAll = () => { - return queryAll({ - entity, - partitionKey: `T#${tenant}#ADMIN_USERS`, - options: { - index: "GSI1" - } - }); - }; - - const allAdminUsersRecords = await executeWithRetry(executeQueryAll, retryOptions); - - if (allAdminUsersRecords.length === 0) { - // Hopefully it doesn't come to this, but we still need to consider it. - return NON_EXISTING_DATA_MIGRATION_IDENTITY; - } - - const [oldestAdminUser] = allAdminUsersRecords.sort((prev, next) => { - return prev.data.createdOn < next.data.createdOn ? -1 : 1; - }); - - identitiesPerTenantCache[tenant] = { - id: oldestAdminUser.data.id, - type: "admin", - displayName: oldestAdminUser.data.displayName - }; - - return identitiesPerTenantCache[tenant]; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getFirstLastPublishedOn.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getFirstLastPublishedOn.ts deleted file mode 100644 index bc7129cf3bf..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getFirstLastPublishedOn.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { createDdbEntryEntity } from "./../entities/createEntryEntity"; -import { CmsEntry } from "../types"; -import { executeWithRetry, ExecuteWithRetryOptions } from "@webiny/utils"; - -const cachedEntryFirstLastPublishedOnBy: Record< - string, - Pick -> = {}; - -interface CmsEntryWithPK extends CmsEntry { - PK: string; -} - -export interface getFirstLastPublishedOnParams { - entry: CmsEntryWithPK; - entryEntity: ReturnType; - retryOptions?: ExecuteWithRetryOptions; -} - -export const getFirstLastPublishedOnBy = async (params: getFirstLastPublishedOnParams) => { - const { entry, entryEntity } = params; - - if (cachedEntryFirstLastPublishedOnBy[entry.PK]) { - return cachedEntryFirstLastPublishedOnBy[entry.PK]; - } - - cachedEntryFirstLastPublishedOnBy[entry.PK] = { - firstPublishedOn: null, - lastPublishedOn: null, - firstPublishedBy: null, - lastPublishedBy: null - }; - - const executeQuery = () => { - return entryEntity.query(entry.PK, { - limit: 1, - eq: "P", - attributes: ["modifiedBy", "createdBy", "publishedOn"] - }); - }; - - const result = await executeWithRetry(executeQuery, params.retryOptions); - - const publishedRecord = result.Items?.[0]; - if (publishedRecord) { - cachedEntryFirstLastPublishedOnBy[entry.PK] = { - firstPublishedOn: publishedRecord.publishedOn || null, - lastPublishedOn: publishedRecord.publishedOn || null, - firstPublishedBy: entry.modifiedBy || entry.createdBy || null, - lastPublishedBy: entry.modifiedBy || entry.createdBy || null - }; - } - - return cachedEntryFirstLastPublishedOnBy[entry.PK]; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts deleted file mode 100644 index 9265ef492a5..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { - EntryMetaFieldName, - isNonNullableEntryMetaField, - pickEntryMetaFields -} from "@webiny/api-headless-cms/constants"; - -export const getNonNullableFieldsWithMissingValues = (entry: CmsEntry) => { - // Only `modifiedX` and `publishedX` fields are nullable. - const nonNullableMetaFields = pickEntryMetaFields(entry, isNonNullableEntryMetaField); - - const missingFields: EntryMetaFieldName[] = []; - for (const fieldName in nonNullableMetaFields) { - const value = nonNullableMetaFields[fieldName as EntryMetaFieldName]; - if (!value) { - missingFields.push(fieldName as EntryMetaFieldName); - } - } - - return missingFields; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn.ts deleted file mode 100644 index 8a930406063..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { createDdbEntryEntity } from "./../entities/createEntryEntity"; -import { CmsEntry } from "../types"; -import { executeWithRetry, ExecuteWithRetryOptions } from "@webiny/utils"; - -const cachedEntryCreatedOn: Record = {}; - -interface CmsEntryWithPK extends CmsEntry { - PK: string; -} - -export interface GetOldestRevisionCreatedOnParams { - entry: CmsEntryWithPK; - entryEntity: ReturnType; - retryOptions?: ExecuteWithRetryOptions; -} - -export const getOldestRevisionCreatedOn = async (params: GetOldestRevisionCreatedOnParams) => { - const { entry, entryEntity } = params; - - if (cachedEntryCreatedOn[entry.PK]) { - return cachedEntryCreatedOn[entry.PK]; - } - - if (entry.version === 1) { - cachedEntryCreatedOn[entry.PK] = entry.createdOn; - } else { - const executeQuery = () => { - return entryEntity.query(entry.PK, { - limit: 1, - beginsWith: "REV#", - attributes: ["createdOn"] - }); - }; - - const result = await executeWithRetry(executeQuery, params.retryOptions); - - const oldestRevision = result.Items?.[0]; - if (oldestRevision) { - cachedEntryCreatedOn[entry.PK] = oldestRevision.createdOn; - } - } - - return cachedEntryCreatedOn[entry.PK]; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts deleted file mode 100644 index a3d97e5920a..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { - EntryMetaFieldName, - isNonNullableEntryMetaField, - pickEntryMetaFields -} from "@webiny/api-headless-cms/constants"; - -export const hasAllNonNullableValues = (entry: CmsEntry) => { - // Only `modifiedX` and `publishedX` fields are nullable. - const nonNullableMetaFields = pickEntryMetaFields(entry, isNonNullableEntryMetaField); - - for (const fieldName in nonNullableMetaFields) { - const value = nonNullableMetaFields[fieldName as EntryMetaFieldName]; - if (!value) { - return false; - } - } - - return true; -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts b/packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts deleted file mode 100644 index 6757ec17567..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - createRecordType, - createLatestRecordType, - createPublishedRecordType -} from "@webiny/api-headless-cms-ddb-es/operations/entry/recordType"; - -export const hasValidTypeFieldValue = (entry: { SK: string; TYPE?: string }) => { - if (entry.SK.startsWith("REV#")) { - return entry.TYPE === createRecordType(); - } - - if (entry.SK === "L") { - return entry.TYPE === createLatestRecordType(); - } - - // SK === "P" - return entry.TYPE === createPublishedRecordType(); -}; diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts b/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts deleted file mode 100644 index 961b8011c53..00000000000 --- a/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { CmsEntry } from "../types"; - -export const isMigratedEntry = (entry: CmsEntry) => { - return "revisionCreatedOn" in entry && entry.revisionCreatedOn; -}; diff --git a/packages/migrations/src/migrations/5.39.0/002/ddb-es/FileManager_5_39_0_002.ts b/packages/migrations/src/migrations/5.39.0/002/ddb-es/FileManager_5_39_0_002.ts deleted file mode 100644 index 897640e202c..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/ddb-es/FileManager_5_39_0_002.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { Client } from "@elastic/elasticsearch"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { S3 } from "@webiny/aws-sdk/client-s3"; -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - esQueryAllWithCallback, - forEachTenantLocale, - esFindOne, - esGetIndexExist, - esGetIndexName -} from "~/utils"; -import { FileEntry } from "../utils/createFileEntity"; -import { FileMetadata } from "../utils/FileMetadata"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export class FileManager_5_39_0_002 implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly bucket: string; - private readonly s3: S3; - private readonly table: Table; - - constructor(table: Table, elasticsearchClient: Client) { - this.table = table; - this.elasticsearchClient = elasticsearchClient; - this.s3 = new S3({ region: process.env.AWS_REGION }); - this.bucket = String(process.env.S3_BUCKET); - } - - getId() { - return "5.39.0-002"; - } - - getDescription() { - return "Generate a metadata file for every File Manager file."; - } - - private getIndexParams(tenantId: string, localeCode: string) { - return { - tenant: tenantId, - locale: localeCode, - type: "fmFile", - isHeadlessCmsModel: true - }; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const indexExists = await esGetIndexExist({ - elasticsearchClient: this.elasticsearchClient, - ...this.getIndexParams(tenantId, localeCode) - }); - - if (!indexExists) { - logger.info( - `No elasticsearch index found for File Manager in tenant "${tenantId}" and locale "${localeCode}".` - ); - return true; - } - - // Fetch the latest file record from ES - const fmIndexName = esGetIndexName(this.getIndexParams(tenantId, localeCode)); - - const latestFile = await esFindOne({ - elasticsearchClient: this.elasticsearchClient, - index: fmIndexName, - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenantId } }, - { term: { "locale.keyword": localeCode } } - ] - } - }, - sort: [ - { - "id.keyword": { order: "desc", unmapped_type: "keyword" } - } - ] - } - }); - - if (!latestFile) { - logger.info( - `No files found in tenant "${tenantId}" and locale "${localeCode}".` - ); - return true; - } - - const fileMetadata = new FileMetadata(this.s3, this.bucket, latestFile); - const hasMetadata = await fileMetadata.exists(); - - if (!hasMetadata) { - shouldExecute = true; - return false; - } - - // Continue to the next tenant/locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const groupId = `${tenantId}:${localeCode}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - return true; - } - - const esIndexName = esGetIndexName(this.getIndexParams(tenantId, localeCode)); - - let batch = 0; - await esQueryAllWithCallback({ - elasticsearchClient: this.elasticsearchClient, - index: esIndexName, - body: { - query: { - bool: { - filter: [ - { term: { "tenant.keyword": tenantId } }, - { term: { "locale.keyword": localeCode } } - ] - } - }, - size: 10000, - sort: [ - { - "id.keyword": { order: "asc", unmapped_type: "keyword" } - } - ], - search_after: status - }, - callback: async (files, cursor) => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const writers = files.map(file => { - const fileMetadata = new FileMetadata(this.s3, this.bucket, file); - const writeMetadata = () => fileMetadata.create(); - - return executeWithRetry(writeMetadata, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - }); - - await Promise.all(writers); - - // Update checkpoint after every batch - migrationStatus[groupId] = cursor; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - }); - - // Mark group as completed. - migrationStatus[groupId] = true; - - // Store checkpoint. - await context.createCheckpoint(migrationStatus); - - // Continue processing. - return true; - } - }); - } -} - -makeInjectable(FileManager_5_39_0_002, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.39.0/002/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.0/002/ddb-es/index.ts deleted file mode 100644 index 9dba853fd0d..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/ddb-es/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./FileManager_5_39_0_002"; diff --git a/packages/migrations/src/migrations/5.39.0/002/ddb/FileManager_5_39_0_002.ts b/packages/migrations/src/migrations/5.39.0/002/ddb/FileManager_5_39_0_002.ts deleted file mode 100644 index be28032d93b..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/ddb/FileManager_5_39_0_002.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry } from "@webiny/utils"; -import { PrimitiveValue } from "@webiny/api-elasticsearch/types"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { S3 } from "@webiny/aws-sdk/client-s3"; -import { QueryAllParams } from "@webiny/db-dynamodb"; -import { ddbQueryAllWithCallback, forEachTenantLocale, queryOne } from "~/utils"; -import { createFileEntity, FileEntry } from "../utils/createFileEntity"; -import { FileMetadata } from "../utils/FileMetadata"; - -const isGroupMigrationCompleted = ( - status: PrimitiveValue[] | boolean | undefined -): status is boolean => { - return typeof status === "boolean"; -}; - -export class FileManager_5_39_0_002 implements DataMigration { - private readonly fileEntity: ReturnType; - private readonly table: Table; - private readonly bucket: string; - private readonly s3: S3; - - constructor(table: Table) { - this.table = table; - this.fileEntity = createFileEntity(table); - this.s3 = new S3({ region: process.env.AWS_REGION }); - this.bucket = String(process.env.S3_BUCKET); - } - - getId() { - return "5.39.0-002"; - } - - getDescription() { - return "Generate a metadata file for every File Manager file."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const latestFile = await queryOne( - this.getFileQuery(tenantId, localeCode) - ); - - if (!latestFile) { - return false; - } - - const fileMetadata = new FileMetadata(this.s3, this.bucket, latestFile); - - const hasMetadata = await fileMetadata.exists(); - - if (!hasMetadata) { - shouldExecute = true; - return false; - } - - // Continue to the next tenant/locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - let batch = 0; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const groupId = `${tenantId}:${localeCode}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - return true; - } - - await ddbQueryAllWithCallback( - this.getFileQuery(tenantId, localeCode, { gt: status || " ", limit: 1000 }), - async files => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${files.length} files).` - ); - - const writers = files.map(file => { - const fileMetadata = new FileMetadata(this.s3, this.bucket, file); - const writeMetadata = () => fileMetadata.create(); - - return executeWithRetry(writeMetadata, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - logger.error(error.message); - } - }); - }); - - await Promise.all(writers); - - // Update checkpoint after every batch - migrationStatus[groupId] = files[files.length - 1]?.id; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - // Mark group as completed. - migrationStatus[groupId] = true; - - // Store checkpoint. - await context.createCheckpoint(migrationStatus); - - // Continue processing. - return true; - } - }); - } - - private getFileQuery( - tenantId: string, - localeCode: string, - options: QueryAllParams["options"] = {} - ) { - return { - entity: this.fileEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#CMS#CME#M#fmFile#L`, - options: { - index: "GSI1", - gt: " ", - ...options - } - }; - } -} - -makeInjectable(FileManager_5_39_0_002, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.39.0/002/ddb/index.ts b/packages/migrations/src/migrations/5.39.0/002/ddb/index.ts deleted file mode 100644 index 9dba853fd0d..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/ddb/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./FileManager_5_39_0_002"; diff --git a/packages/migrations/src/migrations/5.39.0/002/utils/FileMetadata.ts b/packages/migrations/src/migrations/5.39.0/002/utils/FileMetadata.ts deleted file mode 100644 index 7ac7b077fbc..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/utils/FileMetadata.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { S3 } from "@webiny/aws-sdk/client-s3"; -import { FileEntry } from "./createFileEntity"; - -export class FileMetadata { - private s3: S3; - private fileEntry: FileEntry; - private readonly bucket: string; - private readonly metadataKey: string; - private attempt = 0; - - constructor(s3: S3, bucket: string, fileEntry: FileEntry) { - this.bucket = bucket; - this.s3 = s3; - this.fileEntry = fileEntry; - - const fileKey = fileEntry.values["text@key"]; - this.metadataKey = `${fileKey}.metadata`; - } - - async create() { - const metadata = { - id: this.fileEntry.entryId, - tenant: this.fileEntry.tenant, - locale: this.fileEntry.locale, - size: this.fileEntry.values["number@size"], - contentType: this.fileEntry.values["text@type"] - }; - - try { - this.attempt++; - console.log(`Attempt #${this.attempt}: create metadata file at ${this.metadataKey}`); - await this.s3.putObject({ - Bucket: this.bucket, - Key: this.metadataKey, - Body: JSON.stringify(metadata, null, 2) - }); - console.log(`Attempt #${this.attempt} succeeded! Created ${this.metadataKey}`); - } catch (error) { - console.log( - `ERROR #${this.attempt} for ${this.metadataKey}`, - JSON.stringify(error, null, 2) - ); - } - } - - async exists() { - try { - await this.s3.headObject({ Bucket: this.bucket, Key: this.metadataKey }); - return true; - } catch (error) { - if (error.name === "NotFound") { - return false; - } - - console.log("ERROR: couldn't check for metadata", JSON.stringify(error, null, 2)); - - return false; - } - } -} diff --git a/packages/migrations/src/migrations/5.39.0/002/utils/createFileEntity.ts b/packages/migrations/src/migrations/5.39.0/002/utils/createFileEntity.ts deleted file mode 100644 index 1be94a29c30..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/utils/createFileEntity.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -const ddbAttributes: Parameters[2] = { - PK: { - type: "string", - partitionKey: true - }, - SK: { - type: "string", - sortKey: true - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - }, - TYPE: { - type: "string" - }, - __type: { - type: "string" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - entryId: { - type: "string" - }, - id: { - type: "string" - }, - values: { - type: "map" - } -}; - -export interface FileEntry { - id: string; - entryId: string; - tenant: string; - locale: string; - values: { - "text@key": string; - "number@size": number; - "text@type": string; - }; -} - -export const createFileEntity = (table: Table) => { - return createLegacyEntity(table, "CmsEntries", ddbAttributes); -}; diff --git a/packages/migrations/src/migrations/5.39.0/002/utils/createLocaleEntity.ts b/packages/migrations/src/migrations/5.39.0/002/utils/createLocaleEntity.ts deleted file mode 100644 index 80fa7c4b29a..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/utils/createLocaleEntity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -export const createLocaleEntity = (table: Table) => { - return createLegacyEntity(table, "I18NLocale", { - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - code: { - type: "string" - }, - default: { - type: "boolean" - }, - webinyVersion: { - type: "string" - }, - tenant: { - type: "string" - } - }); -}; diff --git a/packages/migrations/src/migrations/5.39.0/002/utils/createTenantEntity.ts b/packages/migrations/src/migrations/5.39.0/002/utils/createTenantEntity.ts deleted file mode 100644 index 5b7f8a7e7ef..00000000000 --- a/packages/migrations/src/migrations/5.39.0/002/utils/createTenantEntity.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { createStandardEntity } from "~/utils"; - -export const createTenantEntity = (table: Table) => { - return createStandardEntity(table, "TenancyTenant"); -}; diff --git a/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts deleted file mode 100644 index 3cb23aeebea..00000000000 --- a/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts +++ /dev/null @@ -1,373 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback, - disableElasticsearchIndexing, - esGetIndexName, - fetchOriginalElasticsearchSettings, - restoreOriginalElasticsearchSettings -} from "~/utils"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { Client } from "@elastic/elasticsearch"; -import { executeWithRetry } from "@webiny/utils"; -import { - createDdbEntryEntity, - createDdbEsEntryEntity -} from "~/migrations/5.39.0/001/entities/createEntryEntity"; -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { getDecompressedData } from "~/migrations/5.39.0/001/utils/getDecompressedData"; -import { getCompressedData } from "~/migrations/5.39.0/001/utils/getCompressedData"; -import { assignNewMetaFields } from "~/migrations/5.39.0/001/utils/assignNewMetaFields"; -import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldValue"; -import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry"; -import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn"; -import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn"; -import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue"; -import { ScanDbItem } from "@webiny/db-dynamodb"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface IndexSettings { - refresh_interval: `${number}s`; -} - -interface CmsEntriesRootFolderDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; - indexes: { - [index: string]: IndexSettings | null; - }; -} - -interface DynamoDbElasticsearchRecord { - PK: string; - SK: string; - data: string; -} - -export class CmsEntriesInitNewMetaFields_5_39_2_001 implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - - public constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - } - - getId() { - return "5.39.2-001"; - } - - getDescription() { - return "Write new revision and entry-level on/by meta fields (second pass)."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await ddbScanWithCallback>( - { - entity: this.ddbEntryEntity, - options: { - attributes: ["TYPE", "SK"], - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - limit: 100 - } - }, - async result => { - if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - if (!hasValidTypeFieldValue(item)) { - shouldExecute = true; - - // Stop further scanning. - return false; - } - } - - // Continue further scanning. - return true; - } - ); - - if (shouldExecute) { - return true; - } - - logger.info(`CMS entries already upgraded. Skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = - context.checkpoint || ({} as CmsEntriesRootFolderDataMigrationCheckpoint); - - if (migrationStatus.lastEvaluatedKey === true) { - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.debug(`Scanning DynamoDB Elasticsearch table... ${usingKey}`); - await ddbScanWithCallback( - { - entity: this.ddbEntryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 100 - } - }, - async result => { - logger.debug(`Processing ${result.items.length} items...`); - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - - const ddbEsGetItems: Record = {}; - /** - * Update the DynamoDB part of the records. - */ - for (const item of result.items) { - if (hasValidTypeFieldValue(item) && isMigratedEntry(item)) { - continue; - } - - const index = esGetIndexName({ - tenant: item.tenant, - locale: item.locale, - type: item.modelId, - isHeadlessCmsModel: true - }); - - // Check for the elasticsearch index settings - if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) { - // We need to fetch the index settings first - const settings = await fetchOriginalElasticsearchSettings({ - index, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - // ... add it to the checkpoint... - migrationStatus.indexes = { - ...migrationStatus.indexes, - [index]: settings - }; - // and then set not to index - await disableElasticsearchIndexing({ - elasticsearchClient: this.elasticsearchClient, - index, - logger - }); - } - - if (!isMigratedEntry(item)) { - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(item, { - createdOn, - ...firstLastPublishedOnByFields - }); - } - - // Fixes the value of the `TYPE` field, if it's not valid. - fixTypeFieldValue(item); - - ddbItems.push(this.ddbEntryEntity.putBatch(item)); - - /** - * Prepare the loading of DynamoDB Elasticsearch part of the records. - */ - if (ddbEsGetItems[`${item.entryId}:L`]) { - continue; - } - - ddbEsGetItems[`${item.entryId}:L`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "L" - }); - - if (item.status === "published" || !!item.locked) { - ddbEsGetItems[`${item.entryId}:P`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "P" - }); - } - } - - /** - * Get all the records from DynamoDB Elasticsearch. - */ - const esRecords = await batchReadAll({ - table: this.ddbEsEntryEntity.table, - items: Object.values(ddbEsGetItems) - }); - - for (const esRecord of esRecords) { - const decompressedData = await getDecompressedData(esRecord.data); - if (!decompressedData) { - logger.trace( - `Skipping record "${esRecord.PK}" as it is not a valid CMS entry...` - ); - continue; - } - - if (isMigratedEntry(decompressedData)) { - const forceExecute = context.forceExecute; - if (!forceExecute) { - logger.trace( - `Skipping record "${decompressedData.entryId}" as it already has meta fields defined...` - ); - continue; - } - } - - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: { ...decompressedData, PK: esRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: { ...decompressedData, PK: esRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(decompressedData, { - createdOn, - ...firstLastPublishedOnByFields - }); - - const compressedData = await getCompressedData(decompressedData); - - ddbEsItems.push( - this.ddbEsEntryEntity.putBatch({ - ...esRecord, - data: compressedData - }) - ); - } - - const execute = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - logger.trace("Storing the DynamoDB records..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - logger.trace("Storing the DynamoDB Elasticsearch records..."); - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb + es" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - /** - * This is the end of the migration. - */ - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - migrationStatus.lastEvaluatedKey = true; - migrationStatus.indexes = {}; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(CmsEntriesInitNewMetaFields_5_39_2_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts deleted file mode 100644 index bb6fcf8366b..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { Logger } from "@webiny/logger"; -import { SegmentProcessor } from "./SegmentProcessor"; -import { - disableElasticsearchIndexing, - esListIndexes, - fetchOriginalElasticsearchSettings, - restoreOriginalElasticsearchSettings -} from "~/utils"; -import { createElasticsearchClient } from "@webiny/api-elasticsearch"; -import { createWaitUntilHealthy } from "@webiny/api-elasticsearch/utils/waitUntilHealthy"; -import { - DEFAULT_ES_HEALTH_CHECKS_PARAMS, - EsHealthChecksParams, - migrationSkippedDdbRecordExists, - createMigrationSkippedDdbRecord -} from "~/migrations/5.39.6/001/ddb-es/utils"; -import path from "path"; -import os from "os"; -import fs from "fs"; -import glob from "fast-glob"; -import { getDocumentClient } from "@webiny/aws-sdk/client-dynamodb"; - -export interface MetaFieldsMigrationParams { - ddbTable: string; - ddbEsTable: string; - esEndpoint: string; - totalSegments: number; - logger: Logger; - - // Elasticsearch health check options. - esHealthChecks?: Partial; -} - -export class MetaFieldsMigration { - private readonly runId: string; - private readonly ddbTable: string; - private readonly ddbEsTable: string; - private readonly esEndpoint: string; - private readonly totalSegments: number; - private readonly logger: Logger; - - private readonly esHealthChecks: EsHealthChecksParams; - - constructor(params: MetaFieldsMigrationParams) { - this.runId = String(new Date().getTime()); - this.ddbTable = params.ddbTable; - this.ddbEsTable = params.ddbEsTable; - this.esEndpoint = params.esEndpoint; - this.totalSegments = params.totalSegments; - this.logger = params.logger; - this.esHealthChecks = { - ...DEFAULT_ES_HEALTH_CHECKS_PARAMS, - ...params.esHealthChecks - }; - } - - async execute() { - const scanProcessesPromises = []; - - const start = Date.now(); - const getDuration = () => { - return (Date.now() - start) / 1000; - }; - - const documentClient = getDocumentClient(); - - // Was the migration already executed? - const dataMigrationRecordExists = await migrationSkippedDdbRecordExists({ - documentClient, - ddbTable: this.ddbTable - }); - - if (dataMigrationRecordExists) { - const forceExecuteEnvVar = process.env["WEBINY_MIGRATION_FORCE_EXECUTE_5_39_6_001"]; - const forceExecute = forceExecuteEnvVar === "true"; - if (!forceExecute) { - this.logger.info("5.39.6-001 migration has already been executed. Exiting..."); - return; - } - - this.logger.info( - "5.39.6-001 migration has already been executed, but force execution was requested." - ); - } - - this.logger.info("Starting 5.39.6-001 meta fields data migration..."); - this.logger.info( - { - ddbTable: this.ddbTable, - ddbEsTable: this.ddbEsTable, - esEndpoint: this.esEndpoint, - totalSegments: this.totalSegments, - esHealthChecks: this.esHealthChecks - }, - "Received the following parameters:" - ); - - const elasticsearchClient = createElasticsearchClient({ - endpoint: `https://${this.esEndpoint}` - }); - - this.logger.info("Checking Elasticsearch health status..."); - const waitUntilHealthy = createWaitUntilHealthy(elasticsearchClient, this.esHealthChecks); - this.logger.info("Elasticsearch is healthy."); - - await waitUntilHealthy.wait(); - - const indexes = await esListIndexes({ elasticsearchClient, match: "-headless-cms-" }); - const indexSettings: Record = {}; - for (const indexName of indexes) { - this.logger.info(`Disabling indexing for Elasticsearch index "${indexName}"...`); - indexSettings[indexName] = await fetchOriginalElasticsearchSettings({ - elasticsearchClient, - index: indexName, - logger: this.logger - }); - - await disableElasticsearchIndexing({ - elasticsearchClient, - index: indexName, - logger: this.logger - }); - } - - this.logger.info("Proceeding with the migration..."); - - for (let segmentIndex = 0; segmentIndex < this.totalSegments; segmentIndex++) { - const segmentProcessor = new SegmentProcessor({ - segmentIndex, - runId: this.runId, - totalSegments: this.totalSegments, - ddbTable: this.ddbTable, - ddbEsTable: this.ddbEsTable, - esEndpoint: this.esEndpoint, - esHealthChecks: this.esHealthChecks - }); - - scanProcessesPromises.push(segmentProcessor.execute()); - } - - await Promise.all(scanProcessesPromises); - - this.logger.info("Restoring original Elasticsearch settings..."); - await restoreOriginalElasticsearchSettings({ - elasticsearchClient, - indexSettings, - logger: this.logger - }); - - // Insert a record that the migration was executed. - await createMigrationSkippedDdbRecord({ - documentClient, - ddbTable: this.ddbTable - }); - - const duration = getDuration(); - this.logger.info(`5.39.6-001 migration completed in ${duration}s, here are the results...`); - - // Wait for 1 second. - await new Promise(resolve => setTimeout(resolve, 1000)); - - this.logger.info( - { - totalSegments: this.totalSegments, - esHealthChecks: this.esHealthChecks - }, - "The migration was performed with the following following parameters:" - ); - - // Pickup all log files and print a summary of the migration. - const logFilePaths = await glob( - path.join( - os.tmpdir(), - `webiny-5-39-6-meta-fields-data-migration-log-${this.runId}-*.log` - ) - ); - - const migrationStats = { - iterationsCount: 0, - avgIterationDuration: 0, - recordsScanned: 0, - avgRecordsScannedPerIteration: 0, - recordsScannedPerSecond: 0, - recordsUpdated: 0, - recordsSkipped: 0, - esHealthChecks: { - timeSpentWaiting: 0, - checksCount: 0, - unhealthyReasons: {} as Record - } - }; - - for (const logFilePath of logFilePaths) { - const logFileContent = fs.readFileSync(logFilePath, "utf-8"); - const logFile = JSON.parse(logFileContent); - - migrationStats.iterationsCount += logFile.iterationsCount; - migrationStats.recordsScanned += logFile.recordsScanned; - migrationStats.recordsUpdated += logFile.recordsUpdated; - migrationStats.recordsSkipped += logFile.recordsSkipped; - - migrationStats.esHealthChecks.timeSpentWaiting += - logFile.esHealthChecks.timeSpentWaiting; - migrationStats.esHealthChecks.checksCount += logFile.esHealthChecks.checksCount; - - for (const unhealthyReasonType in logFile.esHealthChecks.unhealthyReasons) { - if (!logFile.esHealthChecks.unhealthyReasons.hasOwnProperty(unhealthyReasonType)) { - continue; - } - - const hasCount = - unhealthyReasonType in migrationStats.esHealthChecks.unhealthyReasons; - if (hasCount) { - migrationStats.esHealthChecks.unhealthyReasons[unhealthyReasonType] += - logFile.esHealthChecks.unhealthyReasons[unhealthyReasonType]; - } else { - migrationStats.esHealthChecks.unhealthyReasons[unhealthyReasonType] = - logFile.esHealthChecks.unhealthyReasons[unhealthyReasonType]; - } - } - } - - migrationStats.avgIterationDuration = duration / migrationStats.iterationsCount; - - migrationStats.avgRecordsScannedPerIteration = - migrationStats.recordsScanned / migrationStats.iterationsCount; - - migrationStats.recordsScannedPerSecond = migrationStats.recordsScanned / duration; - - this.logger.info( - migrationStats, - `Migration summary (based on ${logFilePaths.length} generated logs):` - ); - - const logFilePath = path.join( - os.tmpdir(), - `webiny-5-39-6-meta-fields-data-migration-log-${this.runId}.log` - ); - - // Save segment processing stats to a file. - fs.writeFileSync(logFilePath, JSON.stringify(migrationStats, null, 2)); - this.logger.trace(`Migration summary saved to "${logFilePath}".`); - } -} diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts deleted file mode 100644 index 7199d35cf3b..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts +++ /dev/null @@ -1,70 +0,0 @@ -import execa from "execa"; -import path from "path"; -import { EsHealthChecksParams } from "~/migrations/5.39.6/001/ddb-es/utils"; - -interface SegmentProcessorParams { - runId: string; - ddbTable: string; - ddbEsTable: string; - esEndpoint: string; - segmentIndex: number; - totalSegments: number; - esHealthChecks: EsHealthChecksParams; -} - -export class SegmentProcessor { - private readonly runId: string; - private readonly ddbTable: string; - private readonly ddbEsTable: string; - private readonly esEndpoint: string; - private readonly segmentIndex: number; - private readonly totalSegments: number; - private readonly esHealthChecks: EsHealthChecksParams; - - constructor(params: SegmentProcessorParams) { - this.runId = params.runId; - this.ddbTable = params.ddbTable; - this.ddbEsTable = params.ddbEsTable; - this.esEndpoint = params.esEndpoint; - this.segmentIndex = params.segmentIndex; - this.totalSegments = params.totalSegments; - this.esHealthChecks = params.esHealthChecks; - } - - execute() { - return execa( - "node", - [ - path.join(__dirname, "worker"), - "--runId", - this.runId, - "--ddbTable", - this.ddbTable, - "--ddbEsTable", - this.ddbEsTable, - "--esEndpoint", - this.esEndpoint, - "--segmentIndex", - String(this.segmentIndex), - "--totalSegments", - String(this.totalSegments), - - // Elasticsearch health check options. - "--esHealthMinClusterHealthStatus", - this.esHealthChecks.minClusterHealthStatus, - "--esHealthMaxProcessorPercent", - String(this.esHealthChecks.maxProcessorPercent), - "--esHealthMaxRamPercent", - String(this.esHealthChecks.maxRamPercent), - "--esHealthMaxWaitingTime", - String(this.esHealthChecks.maxWaitingTime), - "--esHealthWaitingTimeStep", - String(this.esHealthChecks.waitingTimeStep) - ], - { - stdio: "inherit", - env: process.env - } - ); - } -} diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts deleted file mode 100644 index f70fc2efe4d..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env node -import yargs from "yargs/yargs"; -import { hideBin } from "yargs/helpers"; -import { MetaFieldsMigration } from "./MetaFieldsMigration"; -import { createPinoLogger, getLogLevel } from "@webiny/logger"; -import pinoPretty from "pino-pretty"; -import { - DEFAULT_ES_HEALTH_CHECKS_PARAMS, - EsHealthChecksParams -} from "~/migrations/5.39.6/001/ddb-es/utils"; - -const argv = yargs(hideBin(process.argv)) - .options({ - ddbTable: { type: "string", demandOption: true }, - ddbEsTable: { type: "string", demandOption: true }, - esEndpoint: { type: "string", demandOption: true }, - segments: { type: "number", demandOption: true }, - - // Elasticsearch health check options. - esHealthMinClusterHealthStatus: { - type: "string", - demandOption: false, - default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.minClusterHealthStatus, - description: `Minimum cluster health status to wait for before proceeding with the migration.` - }, - esHealthMaxProcessorPercent: { - type: "number", - demandOption: false, - default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxProcessorPercent, - description: `Maximum CPU usage percentage to wait for before proceeding with the migration.` - }, - esHealthMaxRamPercent: { - type: "number", - demandOption: false, - default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxRamPercent, - description: `Maximum RAM usage percentage to wait for before proceeding with the migration.` - }, - esHealthMaxWaitingTime: { - type: "number", - demandOption: false, - default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxWaitingTime, - description: `Maximum time to wait (seconds) for before proceeding with the migration.` - }, - esHealthWaitingTimeStep: { - type: "number", - demandOption: false, - default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.waitingTimeStep, - description: `Time step (seconds) to wait before checking Elasticsearch health status again.` - } - }) - .parseSync(); - -(async () => { - const logger = createPinoLogger( - { - level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace") - }, - pinoPretty({ ignore: "pid,hostname" }) - ); - - const migration = new MetaFieldsMigration({ - totalSegments: argv.segments, - ddbTable: argv.ddbTable, - ddbEsTable: argv.ddbEsTable, - esEndpoint: argv.esEndpoint, - esHealthChecks: { - minClusterHealthStatus: - argv.esHealthMinClusterHealthStatus as EsHealthChecksParams["minClusterHealthStatus"], - maxProcessorPercent: argv.esHealthMaxProcessorPercent, - maxRamPercent: argv.esHealthMaxRamPercent, - maxWaitingTime: argv.esHealthMaxWaitingTime, - waitingTimeStep: argv.esHealthWaitingTimeStep - }, - logger - }); - - await migration.execute(); -})(); diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts deleted file mode 100644 index 9d6e22fb61d..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { CliContext } from "@webiny/cli/types"; -import { getStackOutput } from "@webiny/cli-plugin-deploy-pulumi/utils"; -import { createPinoLogger, getLogLevel } from "@webiny/logger"; -import pinoPretty from "pino-pretty"; -import { - MetaFieldsMigrationParams, - MetaFieldsMigration -} from "~/migrations/5.39.6/001/ddb-es/MetaFieldsMigration"; - -interface CoreOutput { - primaryDynamodbTableName: string; - elasticsearchDynamodbTableName: string; - elasticsearchDomainEndpoint: string; -} - -const REQUIRED_AWS_ENV_VARS = [ - "AWS_REGION", - "AWS_ACCESS_KEY_ID", - "AWS_SECRET_ACCESS_KEY", - "AWS_SESSION_TOKEN" -]; - -const ensureAwsEnvVars = () => { - const missingAwsEnvVars = []; - for (const variable of REQUIRED_AWS_ENV_VARS) { - if (!process.env[variable]) { - missingAwsEnvVars.push(variable); - } - } - - if (missingAwsEnvVars.length > 0) { - throw new Error( - `Cannot run 5.39.6 meta fields data migration. Missing required environment variables: ${missingAwsEnvVars.join( - ", " - )}.` - ); - } -}; - -/** - * Creates an after-deployment hook that triggers the meta fields data migration. - * @param params - */ -export const createMetaFieldsDataMigrationDeploymentHook = ( - params: Pick -) => { - return [ - { - type: "hook-before-deploy", - name: "hook-before-deploy-skip-5-39-6-001-migration", - async hook({ projectApplication }: Record) { - // Only run migrations for `api` app - if (projectApplication.id !== "api") { - return; - } - - process.env.WEBINY_MIGRATION_SKIP_5_39_6_001 = "true"; - } - }, - { - type: "hook-after-deploy", - name: "hook-after-deploy-api-run-5-39-6-meta-fields-data-migrations", - async hook( - { inputs, env, projectApplication }: Record, - context: CliContext - ) { - // Only run migrations for `api` app - if (projectApplication.id !== "api") { - return; - } - - // No need to run migrations if we're doing a preview. - if (inputs.preview) { - return; - } - - ensureAwsEnvVars(); - - const coreOutput = getStackOutput({ folder: "apps/core", env }); - - context.info("Executing 5.39.6-001 meta fields data migration..."); - - const logger = createPinoLogger( - { - level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace") - }, - pinoPretty({ ignore: "pid,hostname" }) - ); - - const migration = new MetaFieldsMigration({ - ddbTable: coreOutput.primaryDynamodbTableName, - ddbEsTable: coreOutput.elasticsearchDynamodbTableName, - esEndpoint: coreOutput.elasticsearchDomainEndpoint, - ...params, - logger - }); - - await migration.execute(); - } - } - ]; -}; diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts deleted file mode 100644 index 392c76a254e..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - ElasticsearchClientSymbol, - ElasticsearchDynamoTableSymbol, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback, - disableElasticsearchIndexing, - esGetIndexName, - fetchOriginalElasticsearchSettings, - restoreOriginalElasticsearchSettings -} from "~/utils"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { Client } from "@elastic/elasticsearch"; -import { executeWithRetry } from "@webiny/utils"; -import { - createDdbEntryEntity, - createDdbEsEntryEntity -} from "~/migrations/5.39.0/001/entities/createEntryEntity"; -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { getDecompressedData } from "~/migrations/5.39.0/001/utils/getDecompressedData"; -import { getCompressedData } from "~/migrations/5.39.0/001/utils/getCompressedData"; -import { assignNewMetaFields } from "~/migrations/5.39.0/001/utils/assignNewMetaFields"; -import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldValue"; -import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn"; -import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn"; -import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue"; -import { hasAllNonNullableValues } from "~/migrations/5.39.0/001/utils/hasAllNonNullableValues"; -import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry"; -import { getFallbackIdentity } from "~/migrations/5.39.0/001/utils/getFallbackIdentity"; -import { ensureAllNonNullableValues } from "~/migrations/5.39.0/001/utils/ensureAllNonNullableValues"; -import { ScanDbItem } from "@webiny/db-dynamodb"; - -interface LastEvaluatedKey { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -interface IndexSettings { - refresh_interval: `${number}s`; -} - -interface CmsEntriesRootFolderDataMigrationCheckpoint { - lastEvaluatedKey?: LastEvaluatedKey | boolean; - indexes: { - [index: string]: IndexSettings | null; - }; -} - -interface DynamoDbElasticsearchRecord { - PK: string; - SK: string; - data: string; -} - -export class CmsEntriesInitNewMetaFields_5_39_6_001 implements DataMigration { - private readonly elasticsearchClient: Client; - private readonly ddbEntryEntity: ReturnType; - private readonly ddbEsEntryEntity: ReturnType; - - public constructor( - table: Table, - esTable: Table, - elasticsearchClient: Client - ) { - this.elasticsearchClient = elasticsearchClient; - this.ddbEntryEntity = createDdbEntryEntity(table); - this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable); - } - - getId() { - return "5.39.6-001"; - } - - getDescription() { - return "Write new revision and entry-level on/by meta fields."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await ddbScanWithCallback>( - { - entity: this.ddbEntryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - limit: 100 - } - }, - async result => { - if (result.error) { - logger.error(result.error); - throw new Error(result.error); - } - - for (const item of result.items) { - const isFullyMigrated = - isMigratedEntry(item) && - hasValidTypeFieldValue(item) && - hasAllNonNullableValues(item); - - if (!isFullyMigrated) { - shouldExecute = true; - - // Stop further scanning. - return false; - } - } - - // Continue further scanning. - return true; - } - ); - - if (shouldExecute) { - return true; - } - - logger.info(`CMS entries already upgraded. Skipping...`); - return false; - } - - async execute({ - logger, - ...context - }: DataMigrationContext): Promise { - const migrationStatus = - context.checkpoint || ({} as CmsEntriesRootFolderDataMigrationCheckpoint); - - if (migrationStatus.lastEvaluatedKey === true) { - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - logger.info(`Migration completed, no need to start again.`); - return; - } - - let usingKey = ""; - if (migrationStatus?.lastEvaluatedKey) { - usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey); - } - - logger.trace(`Scanning primary DynamoDB table.`, { - usingKey - }); - - let currentDdbScanIteration = 0; - - await ddbScanWithCallback( - { - entity: this.ddbEntryEntity, - options: { - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - startKey: migrationStatus.lastEvaluatedKey || undefined, - limit: 100 - } - }, - async result => { - currentDdbScanIteration++; - - logger.trace(`Primary DynamoDB table scan iteration: ${currentDdbScanIteration}.`); - logger.trace(`Analyzing ${result.items.length} record(s)...`); - - const ddbItems: BatchWriteItem[] = []; - const ddbEsItems: BatchWriteItem[] = []; - const ddbEsGetItems: Record = {}; - - const fallbackDateTime = new Date().toISOString(); - - // Update records in primary DynamoDB table. Also do preparations for - // subsequent updates on DDB-ES DynamoDB table, and in Elasticsearch. - for (const item of result.items) { - const isFullyMigrated = - isMigratedEntry(item) && - hasValidTypeFieldValue(item) && - hasAllNonNullableValues(item); - - if (isFullyMigrated) { - continue; - } - - const index = esGetIndexName({ - tenant: item.tenant, - locale: item.locale, - type: item.modelId, - isHeadlessCmsModel: true - }); - - // Check ES index settings. - if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) { - // We need to fetch the index settings first - const settings = await fetchOriginalElasticsearchSettings({ - index, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - // ... add it to the checkpoint... - migrationStatus.indexes = { - ...migrationStatus.indexes, - [index]: settings - }; - // and then set not to index - await disableElasticsearchIndexing({ - elasticsearchClient: this.elasticsearchClient, - index, - logger - }); - } - - // 1. Check if the data migration was ever performed. If not, let's perform it. - if (!isMigratedEntry(item)) { - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: item, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(item, { - createdOn, - ...firstLastPublishedOnByFields - }); - } - - // 2. We've noticed some of the records had an invalid `TYPE` field value - // in the database. This step addresses this issue. - if (!hasValidTypeFieldValue(item)) { - // Fixes the value of the `TYPE` field, if it's not valid. - fixTypeFieldValue(item); - } - - // 3. Finally, once both of the steps were performed, ensure that all - // new non-nullable meta fields have a value and nothing is missing. - if (!hasAllNonNullableValues(item)) { - logger.trace( - `Detected an entry with missing values for non-nullable meta fields (${item.modelId}/${item.id}).` - ); - - try { - const fallbackIdentity = await getFallbackIdentity({ - entity: this.ddbEntryEntity, - tenant: item.tenant - }); - - ensureAllNonNullableValues(item, { - dateTime: fallbackDateTime, - identity: fallbackIdentity - }); - - logger.trace( - `Successfully ensured all non-nullable meta fields have values (${item.modelId}/${item.id}). Will be saving into the database soon.` - ); - } catch (e) { - logger.debug( - `Failed to ensure all non-nullable meta fields have values (${item.modelId}/${item.id}): ${e.message}` - ); - } - } - - ddbItems.push(this.ddbEntryEntity.putBatch(item)); - - /** - * Prepare the loading of DynamoDB Elasticsearch part of the records. - */ - if (ddbEsGetItems[`${item.entryId}:L`]) { - continue; - } - - ddbEsGetItems[`${item.entryId}:L`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "L" - }); - - if (item.status === "published" || !!item.locked) { - ddbEsGetItems[`${item.entryId}:P`] = this.ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "P" - }); - } - } - - /** - * Get all the records from DynamoDB Elasticsearch. - */ - const ddbEsRecords = await batchReadAll({ - table: this.ddbEsEntryEntity.table, - items: Object.values(ddbEsGetItems) - }); - - for (const ddbEsRecord of ddbEsRecords) { - const decompressedData = await getDecompressedData(ddbEsRecord.data); - if (!decompressedData) { - logger.trace( - `[DDB-ES Table] Skipping record "${ddbEsRecord.PK}" as it is not a valid CMS entry...` - ); - continue; - } - - // 1. Check if the data migration was ever performed. If not, let's perform it. - if (!isMigratedEntry(decompressedData)) { - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: { ...decompressedData, PK: ddbEsRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: { ...decompressedData, PK: ddbEsRecord.PK }, - entryEntity: this.ddbEntryEntity - }); - - assignNewMetaFields(decompressedData, { - createdOn, - ...firstLastPublishedOnByFields - }); - } - - // 2. Ensure new non-nullable meta fields have a value and nothing is missing. - if (!hasAllNonNullableValues(decompressedData)) { - logger.trace( - [ - "[DDB-ES Table] Detected an entry with missing values for non-nullable meta fields", - `(${decompressedData.modelId}/${decompressedData.id}).` - ].join(" ") - ); - - try { - const fallbackIdentity = await getFallbackIdentity({ - entity: this.ddbEntryEntity, - tenant: decompressedData.tenant - }); - - ensureAllNonNullableValues(decompressedData, { - dateTime: fallbackDateTime, - identity: fallbackIdentity - }); - - logger.trace( - [ - "[DDB-ES Table] Successfully ensured all non-nullable meta fields", - `have values (${decompressedData.modelId}/${decompressedData.id}).`, - "Will be saving the changes soon." - ].join(" ") - ); - } catch (e) { - logger.debug( - [ - "[DDB-ES Table] Failed to ensure all non-nullable meta fields have values", - `(${decompressedData.modelId}/${decompressedData.id}): ${e.message}` - ].join(" ") - ); - } - } - - const compressedData = await getCompressedData(decompressedData); - - ddbEsItems.push( - this.ddbEsEntryEntity.putBatch({ - ...ddbEsRecord, - data: compressedData - }) - ); - } - - // Store data in primary DynamoDB table. - const execute = () => { - return batchWriteAll({ - table: this.ddbEntryEntity.table, - items: ddbItems - }); - }; - - logger.trace("Storing records in primary DynamoDB table..."); - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - // Store data in DDB-ES DynamoDB table. - const executeDdbEs = () => { - return batchWriteAll({ - table: this.ddbEsEntryEntity.table, - items: ddbEsItems - }); - }; - - logger.trace("Storing records in DDB-ES DynamoDB table..."); - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll ddb-es" attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - logger.trace("...stored."); - - // Update checkpoint after every batch. - migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK - ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey) - : true; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - /** - * This is the end of the migration. - */ - await restoreOriginalElasticsearchSettings({ - indexSettings: migrationStatus.indexes, - logger, - elasticsearchClient: this.elasticsearchClient - }); - - migrationStatus.lastEvaluatedKey = true; - migrationStatus.indexes = {}; - context.createCheckpoint(migrationStatus); - } -} - -makeInjectable(CmsEntriesInitNewMetaFields_5_39_6_001, [ - inject(PrimaryDynamoTableSymbol), - inject(ElasticsearchDynamoTableSymbol), - inject(ElasticsearchClientSymbol) -]); diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts deleted file mode 100644 index 87bb8d59a8a..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb"; -import { - ElasticsearchCatClusterHealthStatus, - IWaitUntilHealthyParams -} from "@webiny/api-elasticsearch"; - -export type EsHealthChecksParams = Required; - -export const DEFAULT_ES_HEALTH_CHECKS_PARAMS: EsHealthChecksParams = { - minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow, - maxProcessorPercent: 90, - maxRamPercent: 100, - maxWaitingTime: 90, - waitingTimeStep: 2 -}; - -export const migrationSkippedDdbRecord = { - PK: "MIGRATION#5.39.6-001", - SK: "A", - data: { - description: "Meta fields data migration (skipped via improved meta fields migration)", - finishedOn: "2024-06-01T12:00:00.000Z", - id: "5.39.6-001", - reason: "skipped", - startedOn: "2024-06-01T12:00:00.000Z" - }, - GSI1_PK: "MIGRATIONS", - GSI1_SK: "5.39.6-001", - TYPE: "migration", - _ct: "2024-06-01T12:00:00.000Z", - _et: "Migration", - _md: "2024-06-01T12:00:00.000Z" -}; - -interface MigrationSkippedDdbRecordParams { - documentClient: DynamoDBDocument; - ddbTable: string; -} - -export const migrationSkippedDdbRecordExists = async ({ - documentClient, - ddbTable -}: MigrationSkippedDdbRecordParams) => { - // Was the migration already executed? - const { Item } = await documentClient.get({ - TableName: ddbTable, - Key: { - PK: "MIGRATION#5.39.6-001", - SK: "A" - } - }); - - return !!Item; -}; - -export const createMigrationSkippedDdbRecord = async ({ - documentClient, - ddbTable -}: MigrationSkippedDdbRecordParams) => { - await documentClient.put({ - TableName: ddbTable, - Item: migrationSkippedDdbRecord - }); -}; diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts deleted file mode 100644 index 408ef414b62..00000000000 --- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts +++ /dev/null @@ -1,596 +0,0 @@ -import { executeWithRetry } from "@webiny/utils"; -import { createPinoLogger, getLogLevel } from "@webiny/logger"; -import { createTable } from "@webiny/data-migration"; -import { getDocumentClient } from "@webiny/aws-sdk/client-dynamodb"; -import { createElasticsearchClient } from "@webiny/api-elasticsearch"; -import yargs from "yargs/yargs"; -import { hideBin } from "yargs/helpers"; -import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry"; -import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue"; -import { hasAllNonNullableValues } from "~/migrations/5.39.0/001/utils/hasAllNonNullableValues"; -import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn"; -import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn"; -import { assignNewMetaFields } from "~/migrations/5.39.0/001/utils/assignNewMetaFields"; -import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldValue"; -import { getFallbackIdentity } from "~/migrations/5.39.0/001/utils/getFallbackIdentity"; -import { ensureAllNonNullableValues } from "~/migrations/5.39.0/001/utils/ensureAllNonNullableValues"; -import { getDecompressedData } from "~/migrations/5.39.0/001/utils/getDecompressedData"; -import { getCompressedData } from "~/migrations/5.39.0/001/utils/getCompressedData"; -import { CmsEntry } from "~/migrations/5.39.0/001/types"; -import { - createDdbEntryEntity, - createDdbEsEntryEntity -} from "~/migrations/5.39.0/001/entities/createEntryEntity"; -import { - batchReadAll, - BatchReadItem, - batchWriteAll, - BatchWriteItem, - ddbScanWithCallback -} from "~/utils"; -import { createWaitUntilHealthy } from "@webiny/api-elasticsearch/utils/waitUntilHealthy"; -import pinoPretty from "pino-pretty"; -import { EsHealthChecksParams } from "~/migrations/5.39.6/001/ddb-es/utils"; -import path from "path"; -import os from "os"; -import fs from "fs"; -import { getNonNullableFieldsWithMissingValues } from "~/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues"; - -const argv = yargs(hideBin(process.argv)) - .options({ - runId: { type: "string", demandOption: true }, - ddbTable: { type: "string", demandOption: true }, - ddbEsTable: { type: "string", demandOption: true }, - esEndpoint: { type: "string", demandOption: true }, - segmentIndex: { type: "number", demandOption: true }, - totalSegments: { type: "number", demandOption: true }, - - // Elasticsearch health check options. - esHealthMinClusterHealthStatus: { type: "string", demandOption: true }, - esHealthMaxProcessorPercent: { type: "number", demandOption: true }, - esHealthMaxRamPercent: { type: "number", demandOption: true }, - esHealthMaxWaitingTime: { type: "number", demandOption: true }, - esHealthWaitingTimeStep: { type: "number", demandOption: true } - }) - .parseSync(); - -interface LastEvaluatedKeyObject { - PK: string; - SK: string; - GSI1_PK: string; - GSI1_SK: string; -} - -type LastEvaluatedKey = LastEvaluatedKeyObject | true | null; - -interface MigrationStatus { - lastEvaluatedKey: LastEvaluatedKey; - stats: { - iterationsCount: number; - recordsScanned: number; - recordsUpdated: number; - recordsSkipped: number; - esHealthChecks: { - timeSpentWaiting: number; - checksCount: number; - unhealthyReasons: { - [key: string]: number; - }; - }; - }; -} - -interface DynamoDbElasticsearchRecord { - PK: string; - SK: string; - data: string; -} - -const createInitialStatus = (): MigrationStatus => { - return { - lastEvaluatedKey: null, - stats: { - iterationsCount: 0, - recordsScanned: 0, - recordsUpdated: 0, - recordsSkipped: 0, - esHealthChecks: { - timeSpentWaiting: 0, - checksCount: 0, - unhealthyReasons: {} - } - } - }; -}; - -let BATCH_WRITE_MAX_CHUNK = 20; -if (process.env.WEBINY_MIGRATION_5_39_6_001_BATCH_WRITE_MAX_CHUNK) { - BATCH_WRITE_MAX_CHUNK = parseInt(process.env.WEBINY_MIGRATION_5_39_6_001_BATCH_WRITE_MAX_CHUNK); -} - -(async () => { - const logger = createPinoLogger( - { - level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace"), - msgPrefix: `[segment #${argv.segmentIndex}] ` - }, - pinoPretty({ ignore: "pid,hostname" }) - ); - - const documentClient = getDocumentClient(); - const elasticsearchClient = createElasticsearchClient({ - endpoint: `https://${argv.esEndpoint}` - }); - - const primaryTable = createTable({ - name: argv.ddbTable, - documentClient - }); - const dynamoToEsTable = createTable({ - name: argv.ddbEsTable, - documentClient - }); - - const ddbEntryEntity = createDdbEntryEntity(primaryTable); - const ddbEsEntryEntity = createDdbEsEntryEntity(dynamoToEsTable); - - const status = createInitialStatus(); - - const waitUntilHealthy = createWaitUntilHealthy(elasticsearchClient, { - minClusterHealthStatus: - argv.esHealthMinClusterHealthStatus as EsHealthChecksParams["minClusterHealthStatus"], - maxProcessorPercent: argv.esHealthMaxProcessorPercent, - maxRamPercent: argv.esHealthMaxRamPercent, - maxWaitingTime: argv.esHealthMaxWaitingTime, - waitingTimeStep: argv.esHealthWaitingTimeStep - }); - - try { - await ddbScanWithCallback( - { - entity: ddbEntryEntity, - options: { - segment: argv.segmentIndex, - segments: argv.totalSegments, - filters: [ - { - attr: "_et", - eq: "CmsEntries" - } - ], - startKey: status.lastEvaluatedKey || undefined, - limit: 100 - } - }, - async result => { - status.stats.iterationsCount++; - status.stats.recordsScanned += result.items.length; - - if (status.stats.iterationsCount % 5 === 0) { - // We log every 5th iteration. - logger.trace( - `[iteration #${status.stats.iterationsCount}] Reading ${result.items.length} record(s)...` - ); - } - - const ddbItemsToBatchWrite: BatchWriteItem[] = []; - const ddbEsItemsToBatchWrite: BatchWriteItem[] = []; - const ddbEsItemsToBatchRead: Record = {}; - - const fallbackDateTime = new Date().toISOString(); - - // Update records in primary DynamoDB table. Also do preparations for - // subsequent updates on DDB-ES DynamoDB table, and in Elasticsearch. - for (const item of result.items) { - const isFullyMigrated = - isMigratedEntry(item) && - hasValidTypeFieldValue(item) && - hasAllNonNullableValues(item); - - if (isFullyMigrated) { - status.stats.recordsSkipped++; - continue; - } - - // 1. Check if the data migration was ever performed. If not, let's perform it. - if (!isMigratedEntry(item)) { - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: item, - entryEntity: ddbEntryEntity, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { error, item }, - `getOldestRevisionCreatedOn attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: item, - entryEntity: ddbEntryEntity, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { error, item }, - `getFirstLastPublishedOnBy attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - assignNewMetaFields(item, { - createdOn, - ...firstLastPublishedOnByFields - }); - } - - // 2. We've noticed some of the records had an invalid `TYPE` field value - // in the database. This step addresses this issue. - if (!hasValidTypeFieldValue(item)) { - // Fixes the value of the `TYPE` field, if it's not valid. - fixTypeFieldValue(item); - } - - // 3. Finally, once both of the steps were performed, ensure that all - // new non-nullable meta fields have a value and nothing is missing. - if (!hasAllNonNullableValues(item)) { - logger.trace( - getNonNullableFieldsWithMissingValues(item), - `Detected an entry with missing values for non-nullable meta fields (${item.modelId}/${item.id}).` - ); - - try { - const fallbackIdentity = await getFallbackIdentity({ - entity: ddbEntryEntity, - tenant: item.tenant, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { error, item }, - `getFallbackIdentity attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - ensureAllNonNullableValues(item, { - dateTime: fallbackDateTime, - identity: fallbackIdentity - }); - - logger.trace( - `Successfully ensured all non-nullable meta fields have values (${item.modelId}/${item.id}). Will be saving into the database soon.` - ); - } catch (e) { - logger.debug( - `Failed to ensure all non-nullable meta fields have values (${item.modelId}/${item.id}): ${e.message}` - ); - } - } - - ddbItemsToBatchWrite.push(ddbEntryEntity.putBatch(item)); - - /** - * Prepare the loading of DynamoDB Elasticsearch part of the records. - */ - - const ddbEsLatestRecordKey = `${item.entryId}:L`; - if (ddbEsItemsToBatchRead[ddbEsLatestRecordKey]) { - continue; - } - - ddbEsItemsToBatchRead[ddbEsLatestRecordKey] = ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "L" - }); - - const ddbEsPublishedRecordKey = `${item.entryId}:P`; - if (item.status === "published" || !!item.locked) { - ddbEsItemsToBatchRead[ddbEsPublishedRecordKey] = ddbEsEntryEntity.getBatch({ - PK: item.PK, - SK: "P" - }); - } - } - - if (Object.keys(ddbEsItemsToBatchRead).length > 0) { - /** - * Get all the records from DynamoDB Elasticsearch. - */ - const executeBatchReadAll = () => { - return batchReadAll({ - table: ddbEsEntryEntity.table, - items: Object.values(ddbEsItemsToBatchRead) - }); - }; - - const ddbEsRecords = await executeWithRetry(executeBatchReadAll, { - onFailedAttempt: error => { - logger.warn( - { error, items: Object.values(ddbEsItemsToBatchRead) }, - `[DDB-ES Table] Batch (ddbEsItemsToBatchRead) read attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - - for (const ddbEsRecord of ddbEsRecords) { - const decompressedData = await getDecompressedData( - ddbEsRecord.data - ); - if (!decompressedData) { - logger.trace( - `[DDB-ES Table] Skipping record "${ddbEsRecord.PK}" as it is not a valid CMS entry...` - ); - continue; - } - - // 1. Check if the data migration was ever performed. If not, let's perform it. - if (!isMigratedEntry(decompressedData)) { - // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value. - const createdOn = await getOldestRevisionCreatedOn({ - entry: { ...decompressedData, PK: ddbEsRecord.PK }, - entryEntity: ddbEntryEntity, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { - error, - item: { ...decompressedData, PK: ddbEsRecord.PK } - }, - `[DDB-ES Table] getOldestRevisionCreatedOn attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({ - entry: { ...decompressedData, PK: ddbEsRecord.PK }, - entryEntity: ddbEntryEntity, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { - error, - item: { ...decompressedData, PK: ddbEsRecord.PK } - }, - `[DDB-ES Table] getFirstLastPublishedOnBy attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - assignNewMetaFields(decompressedData, { - createdOn, - ...firstLastPublishedOnByFields - }); - } - - // 2. Ensure new non-nullable meta fields have a value and nothing is missing. - if (!hasAllNonNullableValues(decompressedData)) { - logger.trace( - getNonNullableFieldsWithMissingValues(decompressedData), - [ - `[DDB-ES Table] Detected an entry with missing values for non-nullable meta fields`, - `(${decompressedData.modelId}/${decompressedData.id}).` - ].join(" ") - ); - - try { - const fallbackIdentity = await getFallbackIdentity({ - entity: ddbEntryEntity, - tenant: decompressedData.tenant, - retryOptions: { - onFailedAttempt: error => { - logger.warn( - { error, item: ddbEntryEntity }, - `[DDB-ES Table] getFallbackIdentity attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - }); - - ensureAllNonNullableValues(decompressedData, { - dateTime: fallbackDateTime, - identity: fallbackIdentity - }); - - logger.trace( - [ - `[DDB-ES Table] Successfully ensured all non-nullable meta fields`, - `have values (${decompressedData.modelId}/${decompressedData.id}).`, - "Will be saving the changes soon." - ].join(" ") - ); - } catch (e) { - logger.error( - [ - "[DDB-ES Table] Failed to ensure all non-nullable meta fields have values", - `(${decompressedData.modelId}/${decompressedData.id}): ${e.message}` - ].join(" ") - ); - } - } - - const compressedData = await getCompressedData(decompressedData); - - ddbEsItemsToBatchWrite.push( - ddbEsEntryEntity.putBatch({ - ...ddbEsRecord, - data: compressedData - }) - ); - } - } - - if (ddbItemsToBatchWrite.length) { - let ddbWriteError = false; - let ddbEsWriteError = false; - - // Store data in primary DynamoDB table. - const execute = () => { - return batchWriteAll( - { - table: ddbEntryEntity.table, - items: ddbItemsToBatchWrite - }, - BATCH_WRITE_MAX_CHUNK - ); - }; - - logger.trace( - `Storing ${ddbItemsToBatchWrite.length} record(s) in primary DynamoDB table...` - ); - - try { - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.warn( - `Batch write attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - } catch (e) { - ddbWriteError = true; - logger.error( - { - error: e, - ddbItemsToBatchWrite - }, - "After multiple retries, failed to batch-store records in primary DynamoDB table." - ); - } - - if (ddbEsItemsToBatchWrite.length) { - logger.trace( - `Storing ${ddbEsItemsToBatchWrite.length} record(s) in DDB-ES DynamoDB table...` - ); - - try { - const results = await waitUntilHealthy.wait({ - async onUnhealthy(params) { - const shouldWaitReason = params.waitingReason.name; - - logger.warn( - `Cluster is unhealthy (${shouldWaitReason}). Waiting for the cluster to become healthy...`, - params - ); - - if ( - status.stats.esHealthChecks.unhealthyReasons[ - shouldWaitReason - ] - ) { - status.stats.esHealthChecks.unhealthyReasons[ - shouldWaitReason - ]++; - } else { - status.stats.esHealthChecks.unhealthyReasons[ - shouldWaitReason - ] = 1; - } - } - }); - - status.stats.esHealthChecks.checksCount++; - status.stats.esHealthChecks.timeSpentWaiting += results.runningTime; - - // Store data in DDB-ES DynamoDB table. - const executeDdbEs = () => { - return batchWriteAll( - { - table: ddbEsEntryEntity.table, - items: ddbEsItemsToBatchWrite - }, - BATCH_WRITE_MAX_CHUNK - ); - }; - - await executeWithRetry(executeDdbEs, { - onFailedAttempt: error => { - logger.warn( - `[DDB-ES Table] Batch write attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - }); - } catch (e) { - ddbEsWriteError = true; - logger.error( - { - error: e, - ddbEsItemsToBatchWrite - }, - "After multiple retries, failed to batch-store records in DDB-ES DynamoDB table." - ); - } - } - - if (ddbEsWriteError || ddbWriteError) { - logger.warn( - 'Not increasing the "recordsUpdated" count due to write errors.' - ); - } else { - status.stats.recordsUpdated += ddbItemsToBatchWrite.length; - } - } - - // Update checkpoint after every batch. - let lastEvaluatedKey: LastEvaluatedKey = true; - if (result.lastEvaluatedKey) { - lastEvaluatedKey = result.lastEvaluatedKey as unknown as LastEvaluatedKeyObject; - } - - status.lastEvaluatedKey = lastEvaluatedKey; - - if (lastEvaluatedKey === true) { - return false; - } - - // Continue further scanning. - return true; - }, - { - retry: { - onFailedAttempt: error => { - logger.warn( - { - lastEvaluatedKey: status.lastEvaluatedKey, - error - }, - `ddbScanWithCallback attempt #${error.attemptNumber} failed: ${error.message}` - ); - } - } - } - ); - - // Store status in tmp file. - logger.trace({ status }, "Segment processing completed. Saving status to tmp file..."); - const logFilePath = path.join( - os.tmpdir(), - `webiny-5-39-6-meta-fields-data-migration-log-${argv.runId}-${argv.segmentIndex}.log` - ); - - // Save segment processing stats to a file. - fs.writeFileSync(logFilePath, JSON.stringify(status.stats, null, 2)); - - logger.trace(`Segment processing stats saved in ${logFilePath}.`); - } catch (error) { - // Store status in tmp file. - logger.error( - { status, error }, - "Segment processing failed to complete. Saving status to tmp file..." - ); - const logFilePath = path.join( - os.tmpdir(), - `webiny-5-39-6-meta-fields-data-migration-log-${argv.runId}-${argv.segmentIndex}.log` - ); - - // Save segment processing stats to a file. - fs.writeFileSync(logFilePath, JSON.stringify(status.stats, null, 2)); - - logger.trace(`Segment processing stats saved in ${logFilePath}.`); - } -})(); diff --git a/packages/migrations/src/migrations/5.40.0/001/ddb/compression.ts b/packages/migrations/src/migrations/5.40.0/001/ddb/compression.ts deleted file mode 100644 index aa7bd7460f6..00000000000 --- a/packages/migrations/src/migrations/5.40.0/001/ddb/compression.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { compress as gzip, decompress as ungzip } from "@webiny/utils/compression/gzip"; -import { PageBlock } from "./types"; - -const GZIP = "gzip"; -const TO_STORAGE_ENCODING = "base64"; -const FROM_STORAGE_ENCODING = "utf8"; - -const convertToBuffer = (value: string | Buffer) => { - if (typeof value === "string") { - return Buffer.from(value, TO_STORAGE_ENCODING); - } - return value; -}; - -export const compress = async (data: any) => { - const value = await gzip(JSON.stringify(data)); - - return { - compression: GZIP, - value: value.toString(TO_STORAGE_ENCODING) - }; -}; - -export const decompress = async (pageBlock: PageBlock) => { - try { - const buf = await ungzip(convertToBuffer(pageBlock.content.value)); - const value = buf.toString(FROM_STORAGE_ENCODING); - return { - ...pageBlock, - content: JSON.parse(value) - }; - } catch (ex) { - return { ...pageBlock, content: null }; - } -}; diff --git a/packages/migrations/src/migrations/5.40.0/001/ddb/createBlockEntity.ts b/packages/migrations/src/migrations/5.40.0/001/ddb/createBlockEntity.ts deleted file mode 100644 index 7100e1280e3..00000000000 --- a/packages/migrations/src/migrations/5.40.0/001/ddb/createBlockEntity.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Table, AttributeDefinitions } from "@webiny/db-dynamodb/toolbox"; -import { createLegacyEntity } from "~/utils"; - -const attributes: AttributeDefinitions = { - PK: { - partitionKey: true - }, - SK: { - sortKey: true - }, - TYPE: { - type: "string" - }, - id: { - type: "string" - }, - name: { - type: "string" - }, - blockCategory: { - type: "string" - }, - content: { - type: "map" - }, - createdOn: { - type: "string" - }, - createdBy: { - type: "map" - }, - tenant: { - type: "string" - }, - locale: { - type: "string" - }, - GSI1_PK: { - type: "string" - }, - GSI1_SK: { - type: "string" - } -}; - -export const createBlockEntity = (table: Table) => { - return createLegacyEntity(table, "PbPageBlocks", attributes); -}; diff --git a/packages/migrations/src/migrations/5.40.0/001/ddb/index.ts b/packages/migrations/src/migrations/5.40.0/001/ddb/index.ts deleted file mode 100644 index 47166648883..00000000000 --- a/packages/migrations/src/migrations/5.40.0/001/ddb/index.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { Table } from "@webiny/db-dynamodb/toolbox"; -import { - DataMigration, - DataMigrationContext, - PrimaryDynamoTableSymbol -} from "@webiny/data-migration"; -import { - batchWriteAll, - BatchWriteItem, - count, - ddbQueryAllWithCallback, - forEachTenantLocale -} from "~/utils"; -import { inject, makeInjectable } from "@webiny/ioc"; -import { executeWithRetry, generateAlphaNumericId } from "@webiny/utils"; -import { createBlockEntity } from "~/migrations/5.40.0/001/ddb/createBlockEntity"; -import { ContentElement, PageBlock } from "./types"; -import { compress, decompress } from "./compression"; - -const isGroupMigrationCompleted = (status: boolean | undefined): status is boolean => { - return typeof status === "boolean"; -}; - -export class PbUniqueBlockElementIds_5_40_0_001 implements DataMigration { - private readonly table: Table; - private readonly blockEntity: ReturnType; - - constructor(table: Table) { - this.table = table; - this.blockEntity = createBlockEntity(table); - } - - getId() { - return "5.40.0-001"; - } - - getDescription() { - return "Generate unique element IDs in existing PB blocks."; - } - - async shouldExecute({ logger }: DataMigrationContext): Promise { - let shouldExecute = false; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - // We simply need to find out if there are any blocks stored in the system. - const blocksCount = await count({ - entity: this.blockEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#BLOCKS`, - options: { - index: "GSI1" - } - }); - - if (blocksCount > 0) { - shouldExecute = true; - return false; - } - - // Continue to the next locale. - return true; - } - }); - - return shouldExecute; - } - - async execute({ logger, ...context }: DataMigrationContext): Promise { - const migrationStatus = context.checkpoint || {}; - - let batch = 0; - - await forEachTenantLocale({ - table: this.table, - logger, - callback: async ({ tenantId, localeCode }) => { - const groupId = `${tenantId}:${localeCode}`; - const status = migrationStatus[groupId]; - - if (isGroupMigrationCompleted(status)) { - return true; - } - - await ddbQueryAllWithCallback( - { - entity: this.blockEntity, - partitionKey: `T#${tenantId}#L#${localeCode}#PB#BLOCKS`, - options: { - index: "GSI1", - gt: status || " " - } - }, - async blocks => { - batch++; - - logger.info( - `Processing batch #${batch} in group ${groupId} (${blocks.length} blocks).` - ); - - const items = await Promise.all( - blocks.map(async block => { - const newContent = await this.generateElementIds(block); - if (!newContent) { - return null; - } - - return this.blockEntity.putBatch({ - ...block, - content: newContent - }); - }) - ); - - const execute = () => { - return batchWriteAll({ - table: this.blockEntity.table, - items: items.filter(Boolean) as BatchWriteItem[] - }); - }; - - await executeWithRetry(execute, { - onFailedAttempt: error => { - logger.error( - `"batchWriteAll" attempt #${error.attemptNumber} failed.` - ); - console.log(items); - console.log(error); - } - }); - - // Update checkpoint after every batch - migrationStatus[groupId] = blocks[blocks.length - 1]?.id; - - // Check if we should store checkpoint and exit. - if (context.runningOutOfTime()) { - await context.createCheckpointAndExit(migrationStatus); - } else { - await context.createCheckpoint(migrationStatus); - } - } - ); - - // Mark group as completed. - migrationStatus[groupId] = true; - - // Store checkpoint. - await context.createCheckpoint(migrationStatus); - - // Continue processing. - return true; - } - }); - } - - private async generateElementIds(block: PageBlock) { - const { content } = await decompress(block); - - // If block content already has an `id`, it means the block was already migrated. - if (content.id) { - return null; - } - - const contentWithIds = this.ensureElementId(content); - return compress(contentWithIds); - } - - private ensureElementId(element: ContentElement): ContentElement { - const id = element.id || element.data.variableId || generateAlphaNumericId(10); - - return { - ...element, - id, - elements: element.elements.map(element => this.ensureElementId(element)) - }; - } -} - -makeInjectable(PbUniqueBlockElementIds_5_40_0_001, [inject(PrimaryDynamoTableSymbol)]); diff --git a/packages/migrations/src/migrations/5.40.0/001/ddb/types.ts b/packages/migrations/src/migrations/5.40.0/001/ddb/types.ts deleted file mode 100644 index e93d73483f4..00000000000 --- a/packages/migrations/src/migrations/5.40.0/001/ddb/types.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface CreatedBy { - id: string; - displayName: string | null; - type: string; -} - -export interface PageBlock { - id: string; - name: string; - blockCategory: string; - content: any; - createdOn: string; - createdBy: CreatedBy; - tenant: string; - locale: string; -} - -export interface ContentElement { - id: string; - data: Record; - elements: ContentElement[]; -} diff --git a/packages/migrations/src/migrations/5.41.0/001/index.ts b/packages/migrations/src/migrations/5.41.0/001/index.ts index 6cec0e2917d..b6dad0fcaf4 100644 --- a/packages/migrations/src/migrations/5.41.0/001/index.ts +++ b/packages/migrations/src/migrations/5.41.0/001/index.ts @@ -1,9 +1,10 @@ import { Table } from "@webiny/db-dynamodb/toolbox"; -import { DataMigrationContext, PrimaryDynamoTableSymbol } from "@webiny/data-migration"; -import { queryOne, queryAll, batchWriteAll } from "~/utils"; +import { DataMigrationContext } from "@webiny/data-migration"; +import { PrimaryDynamoTableSymbol } from "@webiny/data-migration/symbols"; +import { batchWriteAll, queryAll, queryOne } from "~/utils"; import { createTenantEntity } from "./createTenantEntity"; import { createUserEntity } from "./createUserEntity"; -import { makeInjectable, inject } from "@webiny/ioc"; +import { inject, makeInjectable } from "@webiny/ioc"; import { executeWithRetry } from "@webiny/utils"; export class AdminUsers_5_41_0_001 { diff --git a/packages/migrations/src/utils/forEachTenantLocale.ts b/packages/migrations/src/utils/forEachTenantLocale.ts index a88284551a9..bd1f7cb13c7 100644 --- a/packages/migrations/src/utils/forEachTenantLocale.ts +++ b/packages/migrations/src/utils/forEachTenantLocale.ts @@ -1,8 +1,18 @@ import { createLocaleEntity, createTenantEntity, queryAll } from "~/utils"; -import { I18NLocale, Tenant } from "~/migrations/5.37.0/003/types"; import { Table } from "@webiny/db-dynamodb/toolbox"; import { Logger } from "@webiny/logger"; +export interface Tenant { + data: { + id: string; + name: string; + }; +} + +export interface I18NLocale { + code: string; +} + type ForEachTenantLocaleCallback = (params: { tenantId: string; localeCode: string; diff --git a/packages/plugins/package.json b/packages/plugins/package.json index b02599e3bb6..046516dd6be 100644 --- a/packages/plugins/package.json +++ b/packages/plugins/package.json @@ -20,7 +20,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/project-utils/package.json b/packages/project-utils/package.json index 5c0b7e5d18a..bad40352956 100644 --- a/packages/project-utils/package.json +++ b/packages/project-utils/package.json @@ -76,7 +76,7 @@ "style-loader": "3.3.1", "terser-webpack-plugin": "^5.3.10", "ts-patch": "^3.3.0", - "typescript": "5.7.2", + "typescript": "5.3.3", "url": "^0.11.4", "url-loader": "4.1.1", "vm-browserify": "^1.1.2", diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json index e0e93b1dbd0..48fc2118495 100644 --- a/packages/pubsub/package.json +++ b/packages/pubsub/package.json @@ -17,7 +17,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/pulumi-aws/package.json b/packages/pulumi-aws/package.json index 331d0da8f1b..916966c1a85 100644 --- a/packages/pulumi-aws/package.json +++ b/packages/pulumi-aws/package.json @@ -32,7 +32,7 @@ "lodash": "^4.17.21", "mime": "^3.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/pulumi-sdk/package.json b/packages/pulumi-sdk/package.json index cec4382b459..c91eed9446c 100644 --- a/packages/pulumi-sdk/package.json +++ b/packages/pulumi-sdk/package.json @@ -29,7 +29,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "adio": { "ignore": { diff --git a/packages/pulumi/package.json b/packages/pulumi/package.json index 7be51e80998..24b90808eba 100644 --- a/packages/pulumi/package.json +++ b/packages/pulumi/package.json @@ -23,7 +23,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/react-composition/package.json b/packages/react-composition/package.json index 5e8d523c2e5..91c81abf91e 100644 --- a/packages/react-composition/package.json +++ b/packages/react-composition/package.json @@ -22,7 +22,7 @@ "@testing-library/react": "^15.0.7", "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/react-rich-text-renderer/package.json b/packages/react-rich-text-renderer/package.json index 9267d4eea91..60dae19a1ef 100644 --- a/packages/react-rich-text-renderer/package.json +++ b/packages/react-rich-text-renderer/package.json @@ -20,7 +20,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/react-router/package.json b/packages/react-router/package.json index be98402763e..c6ceb388603 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -27,7 +27,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "peerDependencies": { "react": "18.2.0" diff --git a/packages/serverless-cms-aws/package.json b/packages/serverless-cms-aws/package.json index fd77406907e..62d149e7590 100644 --- a/packages/serverless-cms-aws/package.json +++ b/packages/serverless-cms-aws/package.json @@ -69,7 +69,7 @@ "@webiny/cli": "0.0.0", "@webiny/migrations": "0.0.0", "@webiny/project-utils": "0.0.0", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "scripts": { "build": "yarn webiny run build", diff --git a/packages/tasks/package.json b/packages/tasks/package.json index 2b33afecb57..87bc56fbb58 100644 --- a/packages/tasks/package.json +++ b/packages/tasks/package.json @@ -37,7 +37,7 @@ "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", "type-fest": "^3.13.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/theme/package.json b/packages/theme/package.json index 4619dcd6292..a0db4f4bcd6 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -22,7 +22,7 @@ "@webiny/project-utils": "0.0.0", "execa": "^5.1.1", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/ui-composer/package.json b/packages/ui-composer/package.json index 0c1d6175890..6fcb0e8ef8e 100644 --- a/packages/ui-composer/package.json +++ b/packages/ui-composer/package.json @@ -18,7 +18,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/ui/package.json b/packages/ui/package.json index a68cb97f074..8ddbdd7e278 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -83,7 +83,7 @@ "ncp": "^2.0.0", "raw-loader": "^4.0.2", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "peerDependencies": { "minimatch": "^5.1.6", diff --git a/packages/utils/package.json b/packages/utils/package.json index e4dc94ce1fc..6c64e4c8528 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -25,7 +25,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "peerDependencies": { "zod": "^3.23.8" diff --git a/packages/validation/package.json b/packages/validation/package.json index 133214dbc4d..48ce52801ba 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -23,7 +23,7 @@ "@webiny/project-utils": "0.0.0", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/wcp/package.json b/packages/wcp/package.json index ff3ead539dd..ccf45e53993 100644 --- a/packages/wcp/package.json +++ b/packages/wcp/package.json @@ -17,7 +17,7 @@ "@webiny/cli": "0.0.0", "@webiny/project-utils": "0.0.0", "rimraf": "^6.0.1", - "typescript": "5.7.2" + "typescript": "5.3.3" }, "publishConfig": { "access": "public", diff --git a/packages/wcp/src/types.ts b/packages/wcp/src/types.ts index d2671a17a02..823c0872e06 100644 --- a/packages/wcp/src/types.ts +++ b/packages/wcp/src/types.ts @@ -16,7 +16,14 @@ export enum PROJECT_PACKAGE_FEATURE_NAME { MT = "multiTenancy", APW = "advancedPublishingWorkflow", AACL = "advancedAccessControlLayer", + /** + * @deprecated Use `AUDIT_LOGS` instead. + */ AL = "auditLogs", + /** + * TODO: remove eslint disable when removing AL enum value. + */ + // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values AUDIT_LOGS = "auditLogs", RECORD_LOCKING = "recordLocking" } diff --git a/yarn.lock b/yarn.lock index 3019941b6fc..e9829ab496a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5212,6 +5212,24 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10/ae92a11412674329b4bd38422518601ec9ceae28e251104d1cad83715da9d38e321f68c817c39b64e66d0af7d98df6f9a10ad2dc638911254b47fb8932df00ef + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" @@ -10608,6 +10626,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.12": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 + languageName: node + linkType: hard + "@types/json2csv@npm:^4.5.1": version: 4.5.1 resolution: "@types/json2csv@npm:4.5.1" @@ -11042,7 +11067,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.6": +"@types/semver@npm:^7.5.0, @types/semver@npm:^7.5.6": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: 10/3496808818ddb36deabfe4974fd343a78101fa242c4690044ccdc3b95dcf8785b494f5d628f2f47f38a702f8db9c53c67f47d7818f2be1b79f2efb09692e1178 @@ -11260,27 +11285,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.5.0": - version: 5.51.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.51.0" +"@typescript-eslint/eslint-plugin@npm:^6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" dependencies: - "@typescript-eslint/scope-manager": "npm:5.51.0" - "@typescript-eslint/type-utils": "npm:5.51.0" - "@typescript-eslint/utils": "npm:5.51.0" + "@eslint-community/regexpp": "npm:^4.5.1" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/type-utils": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" - grapheme-splitter: "npm:^1.0.4" - ignore: "npm:^5.2.0" - natural-compare-lite: "npm:^1.4.0" - regexpp: "npm:^3.2.0" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.4" + natural-compare: "npm:^1.4.0" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/5218449bab404c0b20d9e616daa0cdb8612366a5bdcc2f655b8035c095511a5fe59f26834c368a340912f98b8f08df3959bbdcace8939cdfdca594d7ba3f80b4 + checksum: 10/a57de0f630789330204cc1531f86cfc68b391cafb1ba67c8992133f1baa2a09d629df66e71260b040de4c9a3ff1252952037093c4128b0d56c4dbb37720b4c1d languageName: node linkType: hard @@ -11295,20 +11321,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.5.0": - version: 5.51.0 - resolution: "@typescript-eslint/parser@npm:5.51.0" +"@typescript-eslint/parser@npm:^6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" dependencies: - "@typescript-eslint/scope-manager": "npm:5.51.0" - "@typescript-eslint/types": "npm:5.51.0" - "@typescript-eslint/typescript-estree": "npm:5.51.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/489b5e91037750682f67f67695b4a1f613621fbcf8086a0f6e851d5a513933a2a1598856f7a77b470384c7a1e0651b48e937a6a6cef1b846d42129ac1e70a696 + checksum: 10/4d51cdbc170e72275efc5ef5fce48a81ec431e4edde8374f4d0213d8d370a06823e1a61ae31d502a5f1b0d1f48fc4d29a1b1b5c2dcf809d66d3872ccf6e46ac7 languageName: node linkType: hard @@ -11322,20 +11349,30 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.51.0": - version: 5.51.0 - resolution: "@typescript-eslint/type-utils@npm:5.51.0" +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:5.51.0" - "@typescript-eslint/utils": "npm:5.51.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + checksum: 10/fe91ac52ca8e09356a71dc1a2f2c326480f3cccfec6b2b6d9154c1a90651ab8ea270b07c67df5678956c3bbf0bbe7113ab68f68f21b20912ea528b1214197395 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" debug: "npm:^4.3.4" - tsutils: "npm:^3.21.0" + ts-api-utils: "npm:^1.0.1" peerDependencies: - eslint: "*" + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/6c8ffe1ef9d9e219125506b168b687da6b1135a8241f7da6fcdd9806187d9f8c764824fbdadffdb6f08fa2f95f3a910c9c40c2e3bc7f5c055d2cc3a1a16abc1f + checksum: 10/d03fb3ee1caa71f3ce053505f1866268d7ed79ffb7fed18623f4a1253f5b8f2ffc92636d6fd08fcbaf5bd265a6de77bf192c53105131e4724643dfc910d705fc languageName: node linkType: hard @@ -11346,6 +11383,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 10/e26da86d6f36ca5b6ef6322619f8ec55aabcd7d43c840c977ae13ae2c964c3091fc92eb33730d8be08927c9de38466c5323e78bfb270a9ff1d3611fe821046c5 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.51.0": version: 5.51.0 resolution: "@typescript-eslint/typescript-estree@npm:5.51.0" @@ -11364,6 +11408,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/b32fa35fca2a229e0f5f06793e5359ff9269f63e9705e858df95d55ca2cd7fdb5b3e75b284095a992c48c5fc46a1431a1a4b6747ede2dd08929dc1cbacc589b8 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.51.0": version: 5.51.0 resolution: "@typescript-eslint/utils@npm:5.51.0" @@ -11382,6 +11445,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@types/json-schema": "npm:^7.0.12" + "@types/semver": "npm:^7.5.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + semver: "npm:^7.5.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 10/b404a2c55a425a79d054346ae123087d30c7ecf7ed7abcf680c47bf70c1de4fabadc63434f3f460b2fa63df76bc9e4a0b9fa2383bb8a9fcd62733fb5c4e4f3e3 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.51.0": version: 5.51.0 resolution: "@typescript-eslint/visitor-keys@npm:5.51.0" @@ -11392,6 +11472,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10/30422cdc1e2ffad203df40351a031254b272f9c6f2b7e02e9bfa39e3fc2c7b1c6130333b0057412968deda17a3a68a578a78929a8139c6acef44d9d841dc72e1 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -11813,7 +11903,7 @@ __metadata: lodash: "npm:^4.17.21" prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11835,7 +11925,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11852,7 +11942,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11877,7 +11967,7 @@ __metadata: lodash: "npm:^4.17.21" md5: "npm:^2.3.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -11901,7 +11991,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11939,7 +12029,7 @@ __metadata: lodash: "npm:^4.17.21" prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -11971,7 +12061,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" graphql: "npm:^15.9.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11985,7 +12075,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -11999,7 +12089,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12012,7 +12102,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/tasks": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12027,7 +12117,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/tasks": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12042,7 +12132,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/tasks": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12059,7 +12149,7 @@ __metadata: jwk-to-pem: "npm:^2.0.1" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12076,7 +12166,7 @@ __metadata: "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" p-retry: "npm:^4.6.2" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12108,7 +12198,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" rimraf: "npm:^6.0.1" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12126,7 +12216,7 @@ __metadata: aws-elasticsearch-connector: "npm:^9.2.0" elastic-ts: "npm:^0.12.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12145,7 +12235,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" jsonpack: "npm:^1.1.5" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12176,7 +12266,7 @@ __metadata: rimraf: "npm:^6.0.1" sanitize-filename: "npm:^1.6.3" sharp: "npm:^0.32.6" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12205,7 +12295,7 @@ __metadata: lodash: "npm:^4.17.21" object-hash: "npm:^3.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -12233,7 +12323,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12254,7 +12344,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12293,7 +12383,7 @@ __metadata: node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" slugify: "npm:^1.6.6" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -12319,7 +12409,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/wcp": "npm:0.0.0" graphql: "npm:^15.9.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12344,7 +12434,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" "@webiny/wcp": "npm:0.0.0" graphql: "npm:^15.9.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12382,7 +12472,7 @@ __metadata: lodash: "npm:^4.17.21" prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12407,7 +12497,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" jsonpack: "npm:^1.1.5" lodash: "npm:^4.17.21" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12432,7 +12522,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/tasks": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12467,7 +12557,7 @@ __metadata: aws-sdk-client-mock: "npm:^4.1.0" bytes: "npm:^3.1.2" graphql: "npm:^15.9.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" unzipper: "npm:^0.12.3" zod: "npm:^3.23.8" @@ -12482,7 +12572,7 @@ __metadata: "@webiny/api-headless-cms-import-export": "npm:0.0.0" "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12509,7 +12599,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/tasks": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -12555,7 +12645,7 @@ __metadata: rimraf: "npm:^6.0.1" semver: "npm:^7.6.3" slugify: "npm:^1.6.6" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" zod: "npm:^3.23.8" languageName: unknown @@ -12572,7 +12662,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" graphql: "npm:^15.9.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12597,7 +12687,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12623,7 +12713,7 @@ __metadata: i18n-locales: "npm:^0.0.5" jest: "npm:^29.7.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12647,7 +12737,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -12680,7 +12770,7 @@ __metadata: lodash: "npm:^4.17.21" nodemailer: "npm:^6.9.16" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -12708,7 +12798,7 @@ __metadata: "@webiny/wcp": "npm:0.0.0" graphql: "npm:^15.9.0" lodash: "npm:^4.17.21" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12729,7 +12819,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12771,7 +12861,7 @@ __metadata: node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" stream: "npm:^0.0.3" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" yauzl: "npm:^2.10.0" zod: "npm:^3.23.8" @@ -12818,7 +12908,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12844,7 +12934,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12886,7 +12976,7 @@ __metadata: node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" stream: "npm:^0.0.3" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" zod: "npm:^3.23.8" languageName: unknown @@ -12908,7 +12998,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12927,7 +13017,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12958,7 +13048,7 @@ __metadata: puppeteer-core: "npm:^23.9.0" rimraf: "npm:^6.0.1" srcset: "npm:^4.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -12985,7 +13075,7 @@ __metadata: graphql: "npm:^15.9.0" rimraf: "npm:^6.0.1" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13010,7 +13100,7 @@ __metadata: jwk-to-pem: "npm:^2.0.1" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13037,7 +13127,7 @@ __metadata: deep-equal: "npm:^2.2.3" md5: "npm:^2.3.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13060,7 +13150,7 @@ __metadata: jwk-to-pem: "npm:^2.0.1" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13077,7 +13167,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13107,7 +13197,7 @@ __metadata: jsonwebtoken: "npm:^9.0.1" minimatch: "npm:^5.1.6" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -13150,7 +13240,7 @@ __metadata: "@webiny/tasks": "npm:0.0.0" graphql: "npm:^15.9.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13167,7 +13257,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13189,7 +13279,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13210,7 +13300,7 @@ __metadata: jest: "npm:^29.7.0" jest-dynalite: "npm:^3.6.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13225,7 +13315,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" jest: "npm:^29.7.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13242,7 +13332,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13270,7 +13360,7 @@ __metadata: graphql: "npm:^15.9.0" rimraf: "npm:^6.0.1" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -13284,7 +13374,7 @@ __metadata: "@webiny/plugins": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13328,7 +13418,7 @@ __metadata: rimraf: "npm:^6.0.1" slugify: "npm:^1.6.6" store: "npm:^2.0.12" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -13363,7 +13453,7 @@ __metadata: react-dom: "npm:18.2.0" react-helmet: "npm:^6.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13391,7 +13481,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13426,7 +13516,7 @@ __metadata: react-dom: "npm:18.2.0" react-helmet: "npm:^6.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13462,7 +13552,7 @@ __metadata: react-transition-group: "npm:^4.4.5" rimraf: "npm:^6.0.1" store: "npm:^2.0.12" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13494,7 +13584,7 @@ __metadata: react-dom: "npm:18.2.0" react-helmet: "npm:^6.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13560,7 +13650,7 @@ __metadata: reset-css: "npm:^5.0.1" rimraf: "npm:^6.0.1" store: "npm:^2.0.12" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" unicode-emoji-json: "npm:^0.4.0" languageName: unknown linkType: soft @@ -13605,7 +13695,7 @@ __metadata: react-helmet: "npm:^6.1.0" react-spinner-material: "npm:1.1.4" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13637,7 +13727,7 @@ __metadata: graphql-tag: "npm:^2.12.6" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -13655,7 +13745,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13669,7 +13759,7 @@ __metadata: graphql-tag: "npm:^2.12.6" p-retry: "npm:^4.6.2" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13727,7 +13817,7 @@ __metadata: react-hotkeyz: "npm:^1.0.4" react-lazy-load: "npm:^3.1.14" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -13786,7 +13876,7 @@ __metadata: react-google-recaptcha: "npm:^1.1.0" react-hotkeyz: "npm:^1.0.4" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13816,7 +13906,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13840,7 +13930,7 @@ __metadata: prop-types: "npm:^15.7.2" react: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13915,7 +14005,7 @@ __metadata: react-hotkeyz: "npm:^1.0.4" react-virtualized: "npm:^9.22.5" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" use-deep-compare-effect: "npm:^1.6.1" languageName: unknown linkType: soft @@ -13938,7 +14028,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -13973,7 +14063,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14004,7 +14094,7 @@ __metadata: react-dom: "npm:18.2.0" react-helmet: "npm:^6.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14024,7 +14114,7 @@ __metadata: facepaint: "npm:^1.2.1" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: "@editorjs/editorjs": 2.26.5 aos: ^2.3.4 @@ -14138,7 +14228,7 @@ __metadata: slugify: "npm:^1.6.6" store: "npm:^2.0.12" swiper: "npm:^9.3.2" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" languageName: unknown linkType: soft @@ -14153,7 +14243,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14184,7 +14274,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14214,7 +14304,7 @@ __metadata: react-dom: "npm:18.2.0" react-helmet: "npm:^6.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14231,7 +14321,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14277,7 +14367,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14301,7 +14391,7 @@ __metadata: react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" store: "npm:^2.0.12" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14336,7 +14426,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14372,7 +14462,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14388,7 +14478,7 @@ __metadata: "@webiny/theme": "npm:0.0.0" execa: "npm:^5.1.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -14418,7 +14508,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14430,7 +14520,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" "@webiny/utils": "npm:0.0.0" mobx: "npm:^6.9.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14450,7 +14540,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14479,7 +14569,7 @@ __metadata: react-helmet: "npm:^6.1.0" reset-css: "npm:^5.0.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14497,7 +14587,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14537,7 +14627,7 @@ __metadata: react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" ts-invariant: "npm:^0.10.3" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" warning: "npm:^4.0.2" languageName: unknown linkType: soft @@ -14592,7 +14682,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" aws-lambda: "npm:^1.0.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14611,7 +14701,7 @@ __metadata: rimraf: "npm:^6.0.1" semver: "npm:^7.6.3" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" languageName: unknown linkType: soft @@ -14675,7 +14765,7 @@ __metadata: replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" ts-morph: "npm:^11.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" validate-npm-package-name: "npm:^3.0.0" write-json-file: "npm:^4.3.0" languageName: unknown @@ -14701,7 +14791,7 @@ __metadata: replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14725,7 +14815,7 @@ __metadata: open: "npm:^8.4.2" rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" validate-npm-package-name: "npm:^3.0.0" languageName: unknown linkType: soft @@ -14743,7 +14833,7 @@ __metadata: "@webiny/cli-plugin-scaffold": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14765,7 +14855,7 @@ __metadata: replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -14790,7 +14880,7 @@ __metadata: replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" languageName: unknown linkType: soft @@ -14817,7 +14907,7 @@ __metadata: rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" ts-morph: "npm:^11.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" languageName: unknown linkType: soft @@ -14842,7 +14932,7 @@ __metadata: replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" terminal-link: "npm:^2.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" languageName: unknown linkType: soft @@ -14868,7 +14958,7 @@ __metadata: pluralize: "npm:^8.0.0" replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" validate-npm-package-name: "npm:^3.0.0" write-json-file: "npm:^4.3.0" languageName: unknown @@ -14892,7 +14982,7 @@ __metadata: ncp: "npm:^2.0.0" replace-in-path: "npm:^1.1.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" validate-npm-package-name: "npm:^3.0.0" write-json-file: "npm:^4.3.0" languageName: unknown @@ -14916,7 +15006,7 @@ __metadata: prettier: "npm:^2.8.8" rimraf: "npm:^6.0.1" ts-morph: "npm:^11.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" write-json-file: "npm:^4.3.0" languageName: unknown linkType: soft @@ -14958,7 +15048,7 @@ __metadata: pirates: "npm:^4.0.6" semver: "npm:^7.6.3" ts-morph: "npm:^11.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" yargs: "npm:^17.7.2" bin: @@ -15013,7 +15103,7 @@ __metadata: pino-pretty: "npm:^9.4.0" rimraf: "npm:^6.0.1" semver: "npm:^7.6.3" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15039,7 +15129,7 @@ __metadata: jest-dynalite: "npm:^3.6.1" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15052,7 +15142,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15063,7 +15153,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" reflect-metadata: "npm:^0.2.2" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15074,7 +15164,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15086,7 +15176,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15106,7 +15196,7 @@ __metadata: mobx: "npm:^6.9.0" mobx-react-lite: "npm:^3.4.3" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -15136,7 +15226,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" fastify: "npm:4.15.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15151,7 +15241,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" jest: "npm:^29.7.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15164,7 +15254,7 @@ __metadata: "@webiny/db": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15190,7 +15280,7 @@ __metadata: jest: "npm:^29.7.0" jest-mock-console: "npm:^2.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15205,7 +15295,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15224,7 +15314,7 @@ __metadata: "@webiny/utils": "npm:0.0.0" fastify: "npm:4.15.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15237,7 +15327,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -15258,7 +15348,7 @@ __metadata: lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" short-hash: "npm:^1.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" yargs: "npm:^17.7.2" peerDependencies: react: 18.2.0 @@ -15273,7 +15363,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" inversify: "npm:^6.1.6" reflect-metadata: "npm:^0.2.2" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -15405,7 +15495,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" pino: "npm:^8.21.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15437,7 +15527,7 @@ __metadata: lodash: "npm:^4.17.21" pino-pretty: "npm:^9.4.0" pluralize: "npm:^8.0.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" yargs: "npm:^17.7.2" languageName: unknown linkType: soft @@ -15450,7 +15540,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" languageName: unknown linkType: soft @@ -15529,7 +15619,7 @@ __metadata: style-loader: "npm:3.3.1" terser-webpack-plugin: "npm:^5.3.10" ts-patch: "npm:^3.3.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" url: "npm:^0.11.4" url-loader: "npm:4.1.1" vm-browserify: "npm:^1.1.2" @@ -15548,7 +15638,7 @@ __metadata: "@webiny/cli": "npm:0.0.0" "@webiny/project-utils": "npm:0.0.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15573,7 +15663,7 @@ __metadata: mime: "npm:^3.0.0" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15594,7 +15684,7 @@ __metadata: rimraf: "npm:^6.0.1" semver: "npm:^7.6.3" tar: "npm:^6.2.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15609,7 +15699,7 @@ __metadata: find-up: "npm:^5.0.0" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15623,7 +15713,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" react: "npm:18.2.0" react-dom: "npm:18.2.0" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15674,7 +15764,7 @@ __metadata: react: "npm:18.2.0" rimraf: "npm:^6.0.1" sanitize-html: "npm:2.12.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15693,7 +15783,7 @@ __metadata: react-dom: "npm:18.2.0" react-router-dom: "npm:6.3.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -15756,7 +15846,7 @@ __metadata: invariant: "npm:^2.2.4" node-fetch: "npm:2.6.7" ora: "npm:^4.1.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" webpack: "npm:^5.97.0" languageName: unknown linkType: soft @@ -15787,7 +15877,7 @@ __metadata: object-sizeof: "npm:^2.6.4" rimraf: "npm:^6.0.1" type-fest: "npm:^3.13.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" zod: "npm:^3.23.8" languageName: unknown linkType: soft @@ -15815,7 +15905,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" execa: "npm:^5.1.1" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: react: 18.2.0 languageName: unknown @@ -15832,7 +15922,7 @@ __metadata: react: "npm:18.2.0" react-dom: "npm:18.2.0" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15907,7 +15997,7 @@ __metadata: react-transition-group: "npm:^4.4.5" rimraf: "npm:^6.0.1" timeago-react: "npm:^3.0.6" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: minimatch: ^5.1.6 react: 18.2.0 @@ -15927,7 +16017,7 @@ __metadata: nanoid-dictionary: "npm:^4.3.0" p-retry: "npm:^4.6.2" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" peerDependencies: zod: ^3.23.8 languageName: unknown @@ -15944,7 +16034,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -15956,7 +16046,7 @@ __metadata: "@webiny/project-utils": "npm:0.0.0" node-fetch: "npm:2.6.7" rimraf: "npm:^6.0.1" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -20429,7 +20519,7 @@ __metadata: lodash: "npm:^4.17.21" nanoid: "npm:^3.3.8" node-fetch: "npm:2.6.7" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" uniqid: "npm:^5.4.0" languageName: unknown linkType: soft @@ -24374,13 +24464,6 @@ __metadata: languageName: node linkType: hard -"grapheme-splitter@npm:^1.0.4": - version: 1.0.4 - resolution: "grapheme-splitter@npm:1.0.4" - checksum: 10/fdb2f51fd430ce881e18e44c4934ad30e59736e46213f7ad35ea5970a9ebdf7d0fe56150d15cc98230d55d2fd48c73dc6781494c38d8cf2405718366c36adb88 - languageName: node - linkType: hard - "graphemer@npm:^1.4.0": version: 1.4.0 resolution: "graphemer@npm:1.4.0" @@ -25277,6 +25360,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.4": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 + languageName: node + linkType: hard + "immediate@npm:^3.2.3": version: 3.3.0 resolution: "immediate@npm:3.3.0" @@ -29483,13 +29573,6 @@ __metadata: languageName: node linkType: hard -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 10/5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -34170,7 +34253,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.0.0, regexpp@npm:^3.2.0": +"regexpp@npm:^3.0.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: 10/3310010895a906873262f4b494fc99bcef1e71ef6720a0532c5999ca586498cbd4a284c8e3c2423f9d1d37512fd08d6064b7564e0e59508cf938f76dd15ace84 @@ -34737,8 +34820,8 @@ __metadata: "@types/prettier": "npm:^2.7.3" "@types/react": "npm:18.2.79" "@types/react-dom": "npm:18.2.25" - "@typescript-eslint/eslint-plugin": "npm:^5.5.0" - "@typescript-eslint/parser": "npm:^5.5.0" + "@typescript-eslint/eslint-plugin": "npm:^6.21.0" + "@typescript-eslint/parser": "npm:^6.21.0" adio: "npm:^1.0.1" axios: "npm:^1.7.9" babel-jest: "npm:29.7.0" @@ -34795,7 +34878,7 @@ __metadata: ts-expect: "npm:^1.3.0" ts-jest: "npm:^29.1.2" ts-node: "npm:^10.9.2" - typescript: "npm:5.7.2" + typescript: "npm:5.3.3" typescript-transform-paths: "npm:^3.5.3" verdaccio: "npm:^5.29.1" write-json-file: "npm:^4.3.0" @@ -37214,6 +37297,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.0.1": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10/713c51e7392323305bd4867422ba130fbf70873ef6edbf80ea6d7e9c8f41eeeb13e40e8e7fe7cd321d74e4864777329797077268c9f570464303a1723f1eed39 + languageName: node + linkType: hard + "ts-expect@npm:^1.3.0": version: 1.3.0 resolution: "ts-expect@npm:1.3.0" @@ -37653,23 +37745,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.7.2": - version: 5.7.2 - resolution: "typescript@npm:5.7.2" +"typescript@npm:5.3.3": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/4caa3904df69db9d4a8bedc31bafc1e19ffb7b24fbde2997a1633ae1398d0de5bdbf8daf602ccf3b23faddf1aeeb9b795223a2ed9c9a4fdcaf07bfde114a401a + checksum: 10/6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.7.2#optional!builtin": - version: 5.7.2 - resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" +"typescript@patch:typescript@npm%3A5.3.3#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/d75ca10141afc64fd3474b41a8b082b640555bed388d237558aed64e5827ddadb48f90932c7f4205883f18f5bcab8b6a739a2cfac95855604b0dfeb34bc2f3eb + checksum: 10/c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d languageName: node linkType: hard