payload 4.0.0-internal.5b1e7cd → 4.0.0-internal.5d5a2b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/RichText.d.ts +24 -17
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/admin/adapters/cookies.d.ts +21 -0
- package/dist/admin/adapters/cookies.d.ts.map +1 -0
- package/dist/admin/adapters/cookies.js +3 -0
- package/dist/admin/adapters/cookies.js.map +1 -0
- package/dist/admin/adapters/devReload.d.ts +9 -0
- package/dist/admin/adapters/devReload.d.ts.map +1 -0
- package/dist/admin/adapters/devReload.js +6 -0
- package/dist/admin/adapters/devReload.js.map +1 -0
- package/dist/admin/adapters/index.d.ts +7 -0
- package/dist/admin/adapters/index.d.ts.map +1 -0
- package/dist/admin/adapters/index.js +3 -0
- package/dist/admin/adapters/index.js.map +1 -0
- package/dist/admin/adapters/render.d.ts +16 -0
- package/dist/admin/adapters/render.d.ts.map +1 -0
- package/dist/admin/adapters/render.js +7 -0
- package/dist/admin/adapters/render.js.map +1 -0
- package/dist/admin/adapters/router.d.ts +56 -0
- package/dist/admin/adapters/router.d.ts.map +1 -0
- package/dist/admin/adapters/router.js +3 -0
- package/dist/admin/adapters/router.js.map +1 -0
- package/dist/admin/adapters/server.d.ts +23 -0
- package/dist/admin/adapters/server.d.ts.map +1 -0
- package/dist/admin/adapters/server.js +6 -0
- package/dist/admin/adapters/server.js.map +1 -0
- package/dist/admin/adapters/views.d.ts +36 -0
- package/dist/admin/adapters/views.d.ts.map +1 -0
- package/dist/admin/adapters/views.js +7 -0
- package/dist/admin/adapters/views.js.map +1 -0
- package/dist/admin/elements/Nav.d.ts +13 -0
- package/dist/admin/elements/Nav.d.ts.map +1 -1
- package/dist/admin/elements/Nav.js.map +1 -1
- package/dist/admin/elements/Table.d.ts +1 -0
- package/dist/admin/elements/Table.d.ts.map +1 -1
- package/dist/admin/elements/Table.js.map +1 -1
- package/dist/admin/forms/Field.d.ts +7 -0
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +29 -0
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/functions/index.d.ts +10 -38
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/types.d.ts +5 -4
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/dashboard.d.ts +7 -0
- package/dist/admin/views/dashboard.d.ts.map +1 -1
- package/dist/admin/views/dashboard.js.map +1 -1
- package/dist/admin/views/document.d.ts +7 -1
- package/dist/admin/views/document.d.ts.map +1 -1
- package/dist/admin/views/document.js.map +1 -1
- package/dist/admin/views/hierarchyList.d.ts +10 -0
- package/dist/admin/views/hierarchyList.d.ts.map +1 -0
- package/dist/admin/views/hierarchyList.js +3 -0
- package/dist/admin/views/hierarchyList.js.map +1 -0
- package/dist/admin/views/index.d.ts +1 -3
- package/dist/admin/views/index.d.ts.map +1 -1
- package/dist/admin/views/index.js.map +1 -1
- package/dist/admin/views/list.d.ts +47 -2
- package/dist/admin/views/list.d.ts.map +1 -1
- package/dist/admin/views/list.js.map +1 -1
- package/dist/auth/cookies.d.ts.map +1 -1
- package/dist/auth/defaultAccess.d.ts +1 -1
- package/dist/auth/defaultAccess.d.ts.map +1 -1
- package/dist/auth/defaultAccess.js +1 -1
- package/dist/auth/defaultAccess.js.map +1 -1
- package/dist/auth/defaultUser.d.ts.map +1 -1
- package/dist/auth/defaultUser.js +2 -1
- package/dist/auth/defaultUser.js.map +1 -1
- package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
- package/dist/auth/executeAccess.d.ts.map +1 -1
- package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
- package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
- package/dist/auth/extractJWT.d.ts.map +1 -1
- package/dist/auth/getAuthFields.d.ts.map +1 -1
- package/dist/auth/getFieldsToSign.d.ts.map +1 -1
- package/dist/auth/getLoginOptions.d.ts.map +1 -1
- package/dist/auth/isUserLocked.d.ts.map +1 -1
- package/dist/auth/jwt.d.ts.map +1 -1
- package/dist/auth/operations/access.d.ts.map +1 -1
- package/dist/auth/operations/auth.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/init.d.ts.map +1 -1
- package/dist/auth/operations/local/auth.d.ts.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/logout.d.ts.map +1 -1
- package/dist/auth/operations/me.d.ts.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.js +6 -17
- package/dist/auth/strategies/apiKey.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
- package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
- package/dist/auth/strategies/local/register.d.ts.map +1 -1
- package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
- package/dist/bin/build.d.ts +25 -0
- package/dist/bin/build.d.ts.map +1 -0
- package/dist/bin/build.js +80 -0
- package/dist/bin/build.js.map +1 -0
- package/dist/bin/build.spec.js +170 -0
- package/dist/bin/build.spec.js.map +1 -0
- package/dist/bin/generateImportMap/index.d.ts.map +1 -1
- package/dist/bin/generateImportMap/index.js +8 -5
- package/dist/bin/generateImportMap/index.js.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.js +1 -0
- package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.js +7 -0
- package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
- package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateFields.js +4 -1
- package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
- package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
- package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
- package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +5 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +24 -18
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
- package/dist/bin/generateTypes.d.ts +3 -2
- package/dist/bin/generateTypes.d.ts.map +1 -1
- package/dist/bin/generateTypes.js +11 -1
- package/dist/bin/generateTypes.js.map +1 -1
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +10 -3
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/loadEnv.d.ts +3 -1
- package/dist/bin/loadEnv.d.ts.map +1 -1
- package/dist/bin/loadEnv.js +40 -10
- package/dist/bin/loadEnv.js.map +1 -1
- package/dist/bin/migrate.d.ts.map +1 -1
- package/dist/collections/config/client.d.ts +4 -2
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +13 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +3 -3
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/defaults.spec.js +47 -0
- package/dist/collections/config/defaults.spec.js.map +1 -0
- package/dist/collections/config/sanitize.d.ts +10 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +51 -10
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
- package/dist/collections/config/types.d.ts +76 -91
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/config/useAsTitle.d.ts.map +1 -1
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/operations/count.d.ts.map +1 -1
- package/dist/collections/operations/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +25 -19
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +7 -2
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +7 -2
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +7 -2
- package/dist/collections/operations/find.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +10 -5
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +6 -4
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +6 -4
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/local/duplicate.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/collections/operations/local/findByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findByID.js.map +1 -1
- package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersionByID.js.map +1 -1
- package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersions.js.map +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/local/restoreVersion.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +7 -2
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +7 -2
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +7 -2
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
- package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +21 -12
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/build.d.ts.map +1 -1
- package/dist/config/build.js +8 -0
- package/dist/config/build.js.map +1 -1
- package/dist/config/client.d.ts +1 -1
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +2 -11
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +0 -15
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +0 -4
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +6 -53
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +197 -32
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/database/combineQueries.d.ts.map +1 -1
- package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
- package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
- package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
- package/dist/database/migrations/migrationsCollection.js +2 -1
- package/dist/database/migrations/migrationsCollection.js.map +1 -1
- package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
- package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -1
- package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
- package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
- package/dist/duplicateDocument/index.d.ts.map +1 -1
- package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
- package/dist/exports/shared.d.ts +26 -3
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +24 -2
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/index.js +7 -5
- package/dist/fields/baseFields/slug/index.js.map +1 -1
- package/dist/fields/config/client.d.ts +2 -2
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +5 -4
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +13 -20
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
- package/dist/fields/config/sanitizeJoinField.js +3 -0
- package/dist/fields/config/sanitizeJoinField.js.map +1 -1
- package/dist/fields/config/types.d.ts +44 -118
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js +12 -2
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/getDefaultValue.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/isFieldDisabled.d.ts +12 -0
- package/dist/fields/isFieldDisabled.d.ts.map +1 -0
- package/dist/fields/isFieldDisabled.js +15 -0
- package/dist/fields/isFieldDisabled.js.map +1 -0
- package/dist/fields/isFieldDisabled.spec.js +134 -0
- package/dist/fields/isFieldDisabled.spec.js.map +1 -0
- package/dist/fields/mergeBaseFields.d.ts.map +1 -1
- package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +6 -5
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/client.d.ts +1 -1
- package/dist/globals/config/client.d.ts.map +1 -1
- package/dist/globals/config/client.js +2 -1
- package/dist/globals/config/client.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts +6 -1
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +7 -2
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/config/sanitize.spec.js +43 -0
- package/dist/globals/config/sanitize.spec.js.map +1 -0
- package/dist/globals/config/types.d.ts +4 -57
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
- package/dist/globals/operations/docAccess.d.ts.map +1 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +7 -2
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +6 -4
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +6 -4
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.d.ts.map +1 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +7 -2
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
- package/dist/hierarchy/addHierarchyToCollection.js +76 -0
- package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
- package/dist/hierarchy/buildParentField.d.ts +11 -0
- package/dist/hierarchy/buildParentField.d.ts.map +1 -0
- package/dist/hierarchy/buildParentField.js +42 -0
- package/dist/hierarchy/buildParentField.js.map +1 -0
- package/dist/hierarchy/constants.d.ts +15 -0
- package/dist/hierarchy/constants.d.ts.map +1 -0
- package/dist/hierarchy/constants.js +11 -0
- package/dist/hierarchy/constants.js.map +1 -0
- package/dist/hierarchy/createFolderField.d.ts +39 -0
- package/dist/hierarchy/createFolderField.d.ts.map +1 -0
- package/dist/hierarchy/createFolderField.js +54 -0
- package/dist/hierarchy/createFolderField.js.map +1 -0
- package/dist/hierarchy/createTagField.d.ts +44 -0
- package/dist/hierarchy/createTagField.d.ts.map +1 -0
- package/dist/hierarchy/createTagField.js +48 -0
- package/dist/hierarchy/createTagField.js.map +1 -0
- package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
- package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
- package/dist/hierarchy/getInitialTreeData.js +125 -0
- package/dist/hierarchy/getInitialTreeData.js.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
- package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
- package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
- package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
- package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
- package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
- package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
- package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
- package/dist/hierarchy/injectHierarchyButton.js +37 -0
- package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
- package/dist/hierarchy/presets.d.ts +13 -0
- package/dist/hierarchy/presets.d.ts.map +1 -0
- package/dist/hierarchy/presets.js +52 -0
- package/dist/hierarchy/presets.js.map +1 -0
- package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
- package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
- package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.js +119 -0
- package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
- package/dist/hierarchy/types.d.ts +162 -0
- package/dist/hierarchy/types.d.ts.map +1 -0
- package/dist/hierarchy/types.js +6 -0
- package/dist/hierarchy/types.js.map +1 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
- package/dist/hierarchy/utils/computePaths.d.ts +31 -0
- package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
- package/dist/hierarchy/utils/computePaths.js +445 -0
- package/dist/hierarchy/utils/computePaths.js.map +1 -0
- package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
- package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
- package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
- package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
- package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
- package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
- package/dist/hierarchy/utils/getAncestors.js +94 -0
- package/dist/hierarchy/utils/getAncestors.js.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
- package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
- package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
- package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
- package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
- package/dist/index.bundled.d.ts +1235 -729
- package/dist/index.d.ts +39 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -41
- package/dist/index.js.map +1 -1
- package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
- package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
- package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
- package/dist/locked-documents/config.d.ts.map +1 -1
- package/dist/locked-documents/config.js +2 -1
- package/dist/locked-documents/config.js.map +1 -1
- package/dist/preferences/config.d.ts.map +1 -1
- package/dist/preferences/config.js +2 -1
- package/dist/preferences/config.js.map +1 -1
- package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
- package/dist/preferences/keys.d.ts +8 -4
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +7 -4
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +1 -1
- package/dist/preferences/types.d.ts.map +1 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/query-presets/access.d.ts.map +1 -1
- package/dist/query-presets/config.d.ts.map +1 -1
- package/dist/query-presets/config.js +12 -7
- package/dist/query-presets/config.js.map +1 -1
- package/dist/query-presets/constraints.d.ts.map +1 -1
- package/dist/query-presets/constraints.js +1 -1
- package/dist/query-presets/constraints.js.map +1 -1
- package/dist/queues/config/collection.d.ts.map +1 -1
- package/dist/queues/config/collection.js +2 -1
- package/dist/queues/config/collection.js.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
- package/dist/queues/config/generateJobsJSONSchemas.js +33 -12
- package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
- package/dist/queues/config/global.d.ts.map +1 -1
- package/dist/queues/config/global.js +2 -1
- package/dist/queues/config/global.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +0 -21
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/config/types/taskTypes.d.ts +0 -20
- package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
- package/dist/queues/config/types/taskTypes.js.map +1 -1
- package/dist/queues/endpoints/run.d.ts.map +1 -1
- package/dist/queues/errors/handleWorkflowError.d.ts.map +1 -1
- package/dist/queues/errors/handleWorkflowError.js +9 -1
- package/dist/queues/errors/handleWorkflowError.js.map +1 -1
- package/dist/queues/localAPI.d.ts.map +1 -1
- package/dist/queues/localAPI.js +26 -67
- package/dist/queues/localAPI.js.map +1 -1
- package/dist/queues/operations/handleSchedules/getQueuesWithSchedules.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/index.js +1 -4
- package/dist/queues/operations/handleSchedules/index.js.map +1 -1
- package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/index.js +40 -37
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +3 -22
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +0 -2
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
- package/dist/queues/utilities/getJobTaskStatus.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.d.ts +1 -3
- package/dist/queues/utilities/updateJob.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.js +2 -18
- package/dist/queues/utilities/updateJob.js.map +1 -1
- package/dist/translations/getLocalI18n.d.ts.map +1 -1
- package/dist/types/index.d.ts +54 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/checkFileAccess.d.ts.map +1 -1
- package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
- package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.js +9 -5
- package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/isEligibleRequest.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js +14 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
- package/dist/uploads/fileExists.d.ts.map +1 -1
- package/dist/uploads/generateFileData.d.ts +2 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +5 -2
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +24 -70
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getExternalFile.d.ts.map +1 -1
- package/dist/uploads/getFileByPath.d.ts.map +1 -1
- package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.d.ts +9 -4
- package/dist/uploads/getSafeFilename.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.js +5 -5
- package/dist/uploads/getSafeFilename.js.map +1 -1
- package/dist/uploads/image-resizing/createImageSize.d.ts.map +1 -1
- package/dist/uploads/image-resizing/generateImageSizeFilename.d.ts.map +1 -1
- package/dist/uploads/image-resizing/getImageResizeAction.d.ts.map +1 -1
- package/dist/uploads/image-resizing/parseFilename.d.ts.map +1 -1
- package/dist/uploads/image-resizing/sanitizeResizeConfig.d.ts.map +1 -1
- package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
- package/dist/uploads/safeFetch.d.ts +1 -1
- package/dist/uploads/safeFetch.d.ts.map +1 -1
- package/dist/uploads/safeFetch.js +11 -5
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
- package/dist/uploads/tempFile.d.ts.map +1 -1
- package/dist/uploads/types.d.ts +12 -29
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/uploadFiles.d.ts.map +1 -1
- package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.d.ts +13 -0
- package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -0
- package/dist/utilities/appendDateTimezoneSelectFields.js +47 -0
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -0
- package/dist/utilities/appendNonTrashedFilter.d.ts.map +1 -1
- package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
- package/dist/utilities/appendUploadSelectFields.js +3 -0
- package/dist/utilities/appendUploadSelectFields.js.map +1 -1
- package/dist/utilities/canAccessAdmin.d.ts.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts +59 -16
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +191 -74
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +301 -85
- package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/dependencies/dependencyChecker.js +1 -1
- package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
- package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
- package/dist/utilities/dependencies/getDependencies.js +5 -5
- package/dist/utilities/dependencies/getDependencies.js.map +1 -1
- package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
- package/dist/utilities/dynamicImport.js +1 -1
- package/dist/utilities/dynamicImport.js.map +1 -1
- package/dist/utilities/escapeRegExp.d.ts.map +1 -1
- package/dist/utilities/extractID.d.ts.map +1 -1
- package/dist/utilities/extractID.js +1 -1
- package/dist/utilities/extractID.js.map +1 -1
- package/dist/utilities/flattenAllFields.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.d.ts +13 -2
- package/dist/utilities/formatAdminURL.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.js +3 -15
- package/dist/utilities/formatAdminURL.js.map +1 -1
- package/dist/utilities/formatAdminURL.spec.js +1 -90
- package/dist/utilities/formatAdminURL.spec.js.map +1 -1
- package/dist/utilities/formatErrors.d.ts.map +1 -1
- package/dist/utilities/formatErrors.js +3 -1
- package/dist/utilities/formatErrors.js.map +1 -1
- package/dist/utilities/formatLabels.d.ts.map +1 -1
- package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
- package/dist/utilities/getBlockSelect.d.ts.map +1 -1
- package/dist/utilities/getDataByPath.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getFieldByPath.d.ts.map +1 -1
- package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
- package/dist/utilities/getRequestEntity.d.ts.map +1 -1
- package/dist/utilities/getRequestLanguage.d.ts +2 -2
- package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
- package/dist/utilities/getRequestLanguage.js.map +1 -1
- package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
- package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
- package/dist/utilities/getSelectMode.d.ts.map +1 -1
- package/dist/utilities/getSiblingData.d.ts.map +1 -1
- package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +9 -9
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/headersWithCors.d.ts.map +1 -1
- package/dist/utilities/isEntityHidden.d.ts.map +1 -1
- package/dist/utilities/isRSCEnabled.d.ts +12 -0
- package/dist/utilities/isRSCEnabled.d.ts.map +1 -0
- package/dist/utilities/isRSCEnabled.js +14 -0
- package/dist/utilities/isRSCEnabled.js.map +1 -0
- package/dist/utilities/isURLAllowed.d.ts.map +1 -1
- package/dist/utilities/isValidID.d.ts.map +1 -1
- package/dist/utilities/logError.d.ts.map +1 -1
- package/dist/utilities/logger.d.ts.map +1 -1
- package/dist/utilities/mergeHeaders.d.ts.map +1 -1
- package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
- package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
- package/dist/utilities/parseBooleanString.d.ts.map +1 -1
- package/dist/utilities/parseCookies.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/profiling.d.ts.map +1 -1
- package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
- package/dist/utilities/resolveSelect.d.ts +16 -0
- package/dist/utilities/resolveSelect.d.ts.map +1 -0
- package/dist/utilities/resolveSelect.js +19 -0
- package/dist/utilities/resolveSelect.js.map +1 -0
- package/dist/utilities/routeError.d.ts.map +1 -1
- package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
- package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
- package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
- package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
- package/dist/utilities/sanitizeSelect.d.ts +1 -2
- package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
- package/dist/utilities/sanitizeSelect.js +19 -25
- package/dist/utilities/sanitizeSelect.js.map +1 -1
- package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
- package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
- package/dist/utilities/setsAreEqual.d.ts.map +1 -1
- package/dist/utilities/slugify.d.ts.map +1 -1
- package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/envPaths.js +31 -40
- package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
- package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
- package/dist/utilities/timestamp.d.ts.map +1 -1
- package/dist/utilities/toKebabCase.d.ts.map +1 -1
- package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
- package/dist/utilities/transformColumnPreferences.js +4 -2
- package/dist/utilities/transformColumnPreferences.js.map +1 -1
- package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
- package/dist/utilities/unflatten.d.ts.map +1 -1
- package/dist/utilities/validateMimeType.d.ts.map +1 -1
- package/dist/utilities/validateTimezones.d.ts.map +1 -1
- package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
- package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js +3 -2
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -1
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -1
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
- package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
- package/dist/versions/payloadPackageList.d.ts.map +1 -1
- package/dist/versions/payloadPackageList.js +0 -1
- package/dist/versions/payloadPackageList.js.map +1 -1
- package/dist/versions/saveSnapshot.d.ts.map +1 -1
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/package.json +25 -22
- package/dist/admin/views/folderList.d.ts +0 -56
- package/dist/admin/views/folderList.d.ts.map +0 -1
- package/dist/admin/views/folderList.js +0 -3
- package/dist/admin/views/folderList.js.map +0 -1
- package/dist/folders/addFolderCollection.d.ts +0 -10
- package/dist/folders/addFolderCollection.d.ts.map +0 -1
- package/dist/folders/addFolderCollection.js +0 -26
- package/dist/folders/addFolderCollection.js.map +0 -1
- package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
- package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
- package/dist/folders/addFolderFieldToCollection.js +0 -20
- package/dist/folders/addFolderFieldToCollection.js.map +0 -1
- package/dist/folders/buildFolderField.d.ts +0 -8
- package/dist/folders/buildFolderField.d.ts.map +0 -1
- package/dist/folders/buildFolderField.js +0 -87
- package/dist/folders/buildFolderField.js.map +0 -1
- package/dist/folders/constants.d.ts +0 -3
- package/dist/folders/constants.d.ts.map +0 -1
- package/dist/folders/constants.js +0 -4
- package/dist/folders/constants.js.map +0 -1
- package/dist/folders/createFolderCollection.d.ts +0 -11
- package/dist/folders/createFolderCollection.d.ts.map +0 -1
- package/dist/folders/createFolderCollection.js +0 -115
- package/dist/folders/createFolderCollection.js.map +0 -1
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
- package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
- package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
- package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
- package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
- package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
- package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
- package/dist/folders/hooks/reparentChildFolder.js +0 -72
- package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
- package/dist/folders/types.d.ts +0 -118
- package/dist/folders/types.d.ts.map +0 -1
- package/dist/folders/types.js +0 -3
- package/dist/folders/types.js.map +0 -1
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
- package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
- package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
- package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
- package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
- package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
- package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
- package/dist/folders/utils/getFolderData.d.ts +0 -33
- package/dist/folders/utils/getFolderData.d.ts.map +0 -1
- package/dist/folders/utils/getFolderData.js +0 -88
- package/dist/folders/utils/getFolderData.js.map +0 -1
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
- package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
- package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
- package/dist/folders/utils/getOrphanedDocs.js +0 -40
- package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/configToJSONSchema.spec.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport { describe, it, expect } from 'vitest'\n\nimport type { Config } from '../config/types.js'\n\nimport { sanitizeConfig } from '../config/sanitize.js'\nimport { configToJSONSchema } from './configToJSONSchema.js'\nimport type { Block, BlocksField, RichTextField } from '../fields/config/types.js'\n\ndescribe('configToJSONSchema', () => {\n it('should handle optional arrays with required fields', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'someRequiredField',\n type: 'array',\n fields: [\n {\n name: 'someRequiredField',\n type: 'text',\n required: true,\n },\n ],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.definitions?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n someRequiredField: {\n type: ['array', 'null'],\n items: {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: ['string', 'null'],\n },\n someRequiredField: {\n type: 'string',\n },\n },\n required: ['someRequiredField'],\n },\n },\n },\n required: ['id'],\n title: 'Test',\n })\n })\n\n it('should handle block fields with no blocks', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'blockField',\n type: 'blocks',\n blocks: [],\n },\n {\n name: 'blockFieldRequired',\n type: 'blocks',\n blocks: [],\n required: true,\n },\n {\n name: 'blockFieldWithFields',\n type: 'blocks',\n blocks: [\n {\n slug: 'test',\n fields: [\n {\n name: 'field',\n type: 'text',\n },\n ],\n },\n ],\n },\n {\n name: 'blockFieldWithFieldsRequired',\n type: 'blocks',\n blocks: [\n {\n slug: 'test',\n fields: [\n {\n name: 'field',\n type: 'text',\n required: true,\n },\n ],\n },\n ],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.definitions?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n blockField: {\n type: ['array', 'null'],\n items: {},\n },\n blockFieldRequired: {\n type: 'array',\n items: {},\n },\n blockFieldWithFields: {\n type: ['array', 'null'],\n items: {\n oneOf: [\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: ['string', 'null'],\n },\n blockName: {\n type: ['string', 'null'],\n },\n blockType: {\n const: 'test',\n },\n field: {\n type: ['string', 'null'],\n },\n },\n required: ['blockType'],\n },\n ],\n },\n },\n blockFieldWithFieldsRequired: {\n type: ['array', 'null'],\n items: {\n oneOf: [\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: ['string', 'null'],\n },\n blockName: {\n type: ['string', 'null'],\n },\n blockType: {\n const: 'test',\n },\n field: {\n type: 'string',\n },\n },\n required: ['blockType', 'field'],\n },\n ],\n },\n },\n },\n required: ['id', 'blockFieldRequired'],\n title: 'Test',\n })\n })\n\n it('should handle tabs and named tabs with required fields', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n {\n name: 'fieldInUnnamedTab',\n type: 'text',\n },\n ],\n label: 'unnamedTab',\n },\n {\n name: 'namedTab',\n fields: [\n {\n name: 'fieldInNamedTab',\n type: 'text',\n },\n ],\n label: 'namedTab',\n },\n {\n name: 'namedTabWithRequired',\n fields: [\n {\n name: 'fieldInNamedTab',\n type: 'text',\n required: true,\n },\n ],\n label: 'namedTabWithRequired',\n },\n ],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.definitions?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n fieldInUnnamedTab: {\n type: ['string', 'null'],\n },\n namedTab: {\n type: 'object',\n additionalProperties: false,\n properties: {\n fieldInNamedTab: {\n type: ['string', 'null'],\n },\n },\n required: [],\n },\n namedTabWithRequired: {\n type: 'object',\n additionalProperties: false,\n properties: {\n fieldInNamedTab: {\n type: 'string',\n },\n },\n required: ['fieldInNamedTab'],\n },\n },\n required: ['id', 'namedTabWithRequired'],\n title: 'Test',\n })\n })\n\n it('should handle custom typescript schema and JSON field schema', async () => {\n const customSchema: JSONSchema4 = {\n type: 'object',\n properties: {\n id: {\n type: 'number',\n },\n required: ['id'],\n },\n }\n\n const config: Partial<Config> = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'withCustom',\n type: 'text',\n typescriptSchema: [() => customSchema],\n },\n {\n name: 'jsonWithSchema',\n type: 'json',\n jsonSchema: {\n fileMatch: ['a://b/foo.json'],\n schema: customSchema,\n uri: 'a://b/foo.json',\n },\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config as Config)\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.definitions?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n jsonWithSchema: customSchema,\n withCustom: customSchema,\n },\n required: ['id'],\n title: 'Test',\n })\n })\n\n it('should handle same block object being referenced in both collection and config.blocks', async () => {\n const sharedBlock: Block = {\n slug: 'sharedBlock',\n interfaceName: 'SharedBlock',\n fields: [\n {\n name: 'richText',\n type: 'richText',\n editor: () => {\n // stub rich text editor\n return {\n CellComponent: '',\n FieldComponent: '',\n validate: () => true,\n }\n },\n },\n ],\n }\n\n // @ts-expect-error\n const config: Config = {\n blocks: [sharedBlock],\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'someBlockField',\n type: 'blocks',\n blocks: [sharedBlock],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n // Ensure both rich text editor are sanitized\n const sanitizedConfig = await sanitizeConfig(config)\n expect(typeof (sanitizedConfig?.blocks?.[0]?.fields?.[0] as RichTextField)?.editor).toBe(\n 'object',\n )\n expect(\n typeof (\n (sanitizedConfig.collections[0].fields[0] as BlocksField)?.blocks?.[0]\n ?.fields?.[0] as RichTextField\n )?.editor,\n ).toBe('object')\n\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n const expectedBlockSchema = {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: { type: ['string', 'null'] },\n blockName: { type: ['string', 'null'] },\n blockType: { const: 'sharedBlock' },\n richText: { type: ['array', 'null'], items: { type: 'object' } },\n },\n required: ['blockType'],\n }\n\n expect(schema?.definitions?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n title: 'Test',\n properties: {\n id: {\n type: 'string',\n },\n someBlockField: {\n type: ['array', 'null'],\n items: {\n oneOf: [\n {\n $ref: '#/definitions/SharedBlock',\n },\n ],\n },\n },\n },\n required: ['id'],\n })\n\n // The definition should still be registered for TypeScript type generation\n expect(schema?.definitions?.SharedBlock).toStrictEqual(expectedBlockSchema)\n })\n\n it('should allow overriding required to false', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n defaultValue: 'test',\n typescriptSchema: [\n () => ({\n type: 'string',\n required: false,\n }),\n ],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const schema = configToJSONSchema(sanitizedConfig, 'text')\n\n // @ts-expect-error\n expect(schema.definitions.test.properties.title.required).toStrictEqual(false)\n })\n\n it('should propagate forceInlineBlocks to nested fields (array, group, tab)', async () => {\n const namedBlock: Block = {\n slug: 'myBlock',\n interfaceName: 'MyBlock',\n fields: [{ name: 'text', type: 'text' }],\n }\n\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'arr',\n type: 'array',\n fields: [{ name: 'blocks', type: 'blocks', blocks: [namedBlock] }],\n },\n {\n name: 'grp',\n type: 'group',\n fields: [{ name: 'blocks', type: 'blocks', blocks: [namedBlock] }],\n },\n ],\n timestamps: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n\n // Without forceInlineBlocks: blocks field uses $ref\n const schemaDefault = configToJSONSchema(sanitizedConfig, 'text')\n const arrItemsDefault = schemaDefault.definitions!.test.properties!.arr.items as JSONSchema4\n const arrBlocksDefault = (arrItemsDefault.properties!.blocks.items as JSONSchema4).oneOf![0]\n expect(arrBlocksDefault).toStrictEqual({ $ref: '#/definitions/MyBlock' })\n\n // With forceInlineBlocks: blocks field is inlined, no $ref\n const schemaInline = configToJSONSchema(sanitizedConfig, 'text', undefined, {\n forceInlineBlocks: true,\n })\n const arrItemsInline = schemaInline.definitions!.test.properties!.arr.items as JSONSchema4\n const arrBlocksInline = (arrItemsInline.properties!.blocks.items as JSONSchema4).oneOf![0]\n expect(arrBlocksInline).not.toHaveProperty('$ref')\n expect(arrBlocksInline.properties?.blockType).toStrictEqual({ const: 'myBlock' })\n\n const grpBlocksInline = (\n schemaInline.definitions!.test.properties!.grp.properties!.blocks.items as JSONSchema4\n ).oneOf![0]\n expect(grpBlocksInline).not.toHaveProperty('$ref')\n expect(grpBlocksInline.properties?.blockType).toStrictEqual({ const: 'myBlock' })\n })\n})\n"],"names":["describe","it","expect","sanitizeConfig","configToJSONSchema","config","collections","slug","fields","name","type","required","timestamps","sanitizedConfig","schema","definitions","test","toStrictEqual","additionalProperties","properties","id","someRequiredField","items","title","blocks","blockField","blockFieldRequired","blockFieldWithFields","oneOf","blockName","blockType","const","field","blockFieldWithFieldsRequired","tabs","label","fieldInUnnamedTab","namedTab","fieldInNamedTab","namedTabWithRequired","customSchema","typescriptSchema","jsonSchema","fileMatch","uri","jsonWithSchema","withCustom","sharedBlock","interfaceName","editor","CellComponent","FieldComponent","validate","toBe","expectedBlockSchema","richText","someBlockField","$ref","SharedBlock","defaultValue","namedBlock","schemaDefault","arrItemsDefault","arr","arrBlocksDefault","schemaInline","undefined","forceInlineBlocks","arrItemsInline","arrBlocksInline","not","toHaveProperty","grpBlocksInline","grp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/configToJSONSchema.spec.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport { describe, it, expect } from 'vitest'\n\nimport type { Config } from '../config/types.js'\n\nimport { sanitizeConfig } from '../config/sanitize.js'\nimport { configToJSONSchema, entityToStandaloneJSONSchema } from './configToJSONSchema.js'\nimport type { Block, BlocksField, RichTextField } from '../fields/config/types.js'\n\ndescribe('configToJSONSchema', () => {\n it('should handle optional arrays with required fields', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'someRequiredField',\n type: 'array',\n fields: [\n {\n name: 'someRequiredField',\n type: 'text',\n required: true,\n },\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.$defs?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n someRequiredField: {\n type: ['array', 'null'],\n items: {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: ['string', 'null'],\n },\n someRequiredField: {\n type: 'string',\n },\n },\n required: ['someRequiredField'],\n },\n },\n },\n required: ['id'],\n title: 'Test',\n })\n })\n\n it('should handle block fields with no blocks', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'blockField',\n type: 'blocks',\n blocks: [],\n },\n {\n name: 'blockFieldRequired',\n type: 'blocks',\n blocks: [],\n required: true,\n },\n {\n name: 'blockFieldWithFields',\n type: 'blocks',\n blocks: [\n {\n slug: 'test',\n fields: [\n {\n name: 'field',\n type: 'text',\n },\n ],\n },\n ],\n },\n {\n name: 'blockFieldWithFieldsRequired',\n type: 'blocks',\n blocks: [\n {\n slug: 'testRequired',\n fields: [\n {\n name: 'field',\n type: 'text',\n required: true,\n },\n ],\n },\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.$defs?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n blockField: {\n type: ['array', 'null'],\n items: {},\n },\n blockFieldRequired: {\n type: 'array',\n items: {},\n },\n blockFieldWithFields: {\n type: ['array', 'null'],\n items: {\n oneOf: [{ $ref: '#/$defs/Test' }],\n },\n },\n blockFieldWithFieldsRequired: {\n type: ['array', 'null'],\n items: {\n oneOf: [{ $ref: '#/$defs/TestRequired' }],\n },\n },\n },\n required: ['id', 'blockFieldRequired'],\n title: 'Test',\n })\n })\n\n it('keeps the first block interface name clean and content-hashes the colliding one', async () => {\n // @ts-expect-error - partial config for testing\n const config: Config = {\n collections: [\n {\n slug: 'pages',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n blocks: [\n { slug: 'hero', fields: [{ name: 'title', type: 'text' }] },\n { slug: 'cta', fields: [{ name: 'label', type: 'text' }] },\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n {\n slug: 'posts',\n fields: [\n {\n name: 'layout',\n type: 'blocks',\n // Same slug `hero`, DIFFERENT fields → name collision with pages' hero.\n blocks: [{ slug: 'hero', fields: [{ name: 'heading', type: 'text' }] }],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n const defs = schema.$defs!\n\n // The first `hero` keeps the clean name; the unique block is unaffected.\n expect(defs.Hero).toBeDefined()\n expect(defs.Cta).toBeDefined()\n\n // Only the second, differently-shaped `hero` is disambiguated with a content hash.\n const hashedHeroNames = Object.keys(defs).filter((k) => /^Hero_[0-9A-F]{8}$/.test(k))\n expect(hashedHeroNames).toHaveLength(1)\n\n // The disambiguated interface carries the explanatory JSDoc note; the clean one does not.\n expect((defs[hashedHeroNames[0]!] as { description?: string }).description).toContain(\n 'content hash',\n )\n expect((defs.Hero as { description?: string }).description).toBeUndefined()\n\n // Each collection's block field references its own block's interface.\n const refsOf = (slug: string): string[] =>\n (\n defs[slug] as { properties: { layout: { items: { oneOf: Array<{ $ref: string }> } } } }\n ).properties.layout.items.oneOf.map((r) => r.$ref)\n expect(refsOf('pages')).toContain('#/$defs/Hero')\n expect(refsOf('pages')).toContain('#/$defs/Cta')\n expect(refsOf('posts')).toStrictEqual([`#/$defs/${hashedHeroNames[0]}`])\n\n // Hashing is deterministic: regenerating yields identical names.\n const { jsonSchema: schema2 } = configToJSONSchema(sanitizedConfig, 'text')\n expect(\n Object.keys(schema2.$defs!)\n .filter((k) => /^Hero/.test(k))\n .sort(),\n ).toStrictEqual(\n Object.keys(defs)\n .filter((k) => /^Hero/.test(k))\n .sort(),\n )\n })\n\n it('should handle tabs and named tabs with required fields', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n {\n name: 'fieldInUnnamedTab',\n type: 'text',\n },\n ],\n label: 'unnamedTab',\n },\n {\n name: 'namedTab',\n fields: [\n {\n name: 'fieldInNamedTab',\n type: 'text',\n },\n ],\n label: 'namedTab',\n },\n {\n name: 'namedTabWithRequired',\n fields: [\n {\n name: 'fieldInNamedTab',\n type: 'text',\n required: true,\n },\n ],\n label: 'namedTabWithRequired',\n },\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.$defs?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n fieldInUnnamedTab: {\n type: ['string', 'null'],\n },\n namedTab: {\n type: 'object',\n additionalProperties: false,\n properties: {\n fieldInNamedTab: {\n type: ['string', 'null'],\n },\n },\n required: [],\n },\n namedTabWithRequired: {\n type: 'object',\n additionalProperties: false,\n properties: {\n fieldInNamedTab: {\n type: 'string',\n },\n },\n required: ['fieldInNamedTab'],\n },\n },\n required: ['id', 'namedTabWithRequired'],\n title: 'Test',\n })\n })\n\n it('should handle custom typescript schema and JSON field schema', async () => {\n const customSchema: JSONSchema4 = {\n type: 'object',\n properties: {\n id: {\n type: 'number',\n },\n required: ['id'],\n },\n }\n\n const config: Partial<Config> = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'withCustom',\n type: 'text',\n jsonSchema: [() => customSchema],\n },\n {\n name: 'jsonWithSchema',\n type: 'json',\n jsonSchema: {\n fileMatch: ['a://b/foo.json'],\n schema: customSchema,\n uri: 'a://b/foo.json',\n },\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config as Config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n expect(schema?.$defs?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n },\n jsonWithSchema: customSchema,\n withCustom: customSchema,\n },\n required: ['id'],\n title: 'Test',\n })\n })\n\n it('should handle same block object being referenced in both collection and config.blocks', async () => {\n const sharedBlock: Block = {\n slug: 'sharedBlock',\n interfaceName: 'SharedBlock',\n fields: [\n {\n name: 'richText',\n type: 'richText',\n editor: () => {\n // stub rich text editor\n return {\n CellComponent: '',\n FieldComponent: '',\n validate: () => true,\n }\n },\n },\n ],\n }\n\n // @ts-expect-error\n const config: Config = {\n blocks: [sharedBlock],\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'someBlockField',\n type: 'blocks',\n blocks: [sharedBlock],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n // Ensure both rich text editor are sanitized\n const sanitizedConfig = await sanitizeConfig(config)\n expect(typeof (sanitizedConfig?.blocks?.[0]?.fields?.[0] as RichTextField)?.editor).toBe(\n 'object',\n )\n expect(\n typeof (\n (sanitizedConfig.collections[0].fields[0] as BlocksField)?.blocks?.[0]\n ?.fields?.[0] as RichTextField\n )?.editor,\n ).toBe('object')\n\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n const expectedBlockSchema = {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: { type: ['string', 'null'] },\n blockName: { type: ['string', 'null'] },\n blockType: { const: 'sharedBlock' },\n richText: { type: ['array', 'null'], items: { type: 'object' } },\n },\n required: ['blockType'],\n }\n\n expect(schema?.$defs?.test).toStrictEqual({\n type: 'object',\n additionalProperties: false,\n title: 'Test',\n properties: {\n id: {\n type: 'string',\n },\n someBlockField: {\n type: ['array', 'null'],\n items: {\n oneOf: [\n {\n $ref: '#/$defs/SharedBlock',\n },\n ],\n },\n },\n },\n required: ['id'],\n })\n\n // The definition should still be registered for TypeScript type generation\n expect(schema?.$defs?.SharedBlock).toStrictEqual(expectedBlockSchema)\n })\n\n it('content-hashes a colliding explicit interfaceName instead of overwriting it', async () => {\n // Two different blocks both set `interfaceName: 'Hero'` - each must keep its own definition.\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'blocksField',\n type: 'blocks',\n blocks: [\n {\n slug: 'blockA',\n fields: [{ name: 'title', type: 'text' }],\n interfaceName: 'Hero',\n },\n {\n slug: 'blockB',\n fields: [{ name: 'subtitle', type: 'number' }],\n interfaceName: 'Hero',\n },\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n } as unknown as Config\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema } = configToJSONSchema(sanitizedConfig, 'text')\n const defs = jsonSchema.$defs!\n\n // Each differently-shaped block keeps its own interface (one clean, one hash-suffixed).\n const heroNames = Object.keys(defs).filter((k) => /^Hero(_[0-9A-F]{8})?$/.test(k))\n expect(heroNames).toHaveLength(2)\n\n // ...and they carry distinct field shapes (not a silent overwrite).\n const shapeOf = (name: string): string =>\n Object.keys((defs[name] as { properties: Record<string, unknown> }).properties)\n .sort()\n .join(',')\n expect(shapeOf(heroNames[0]!)).not.toBe(shapeOf(heroNames[1]!))\n })\n\n it('reuses one definition when the same block is registered more than once', async () => {\n // Reusing one block across fields registers an identical schema each time, so it dedupes.\n const heroBlock = {\n slug: 'hero',\n fields: [{ name: 'title', type: 'text' }],\n interfaceName: 'Hero',\n }\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n { name: 'a', type: 'blocks', blocks: [heroBlock] },\n { name: 'b', type: 'blocks', blocks: [heroBlock] },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n } as unknown as Config\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema } = configToJSONSchema(sanitizedConfig, 'text')\n\n const heroNames = Object.keys(jsonSchema.$defs!).filter((k) => /^Hero(_[0-9A-F]{8})?$/.test(k))\n expect(heroNames).toEqual(['Hero'])\n })\n\n it('should allow overriding required to false', async () => {\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n defaultValue: 'test',\n jsonSchema: [\n () => ({\n type: 'string',\n required: false,\n }),\n ],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const { jsonSchema: schema } = configToJSONSchema(sanitizedConfig, 'text')\n\n // @ts-expect-error\n expect(schema.$defs.test.properties.title.required).toStrictEqual(false)\n })\n\n it('should propagate forceInlineBlocks to nested fields (array, group, tab)', async () => {\n const namedBlock: Block = {\n slug: 'myBlock',\n interfaceName: 'MyBlock',\n fields: [{ name: 'text', type: 'text' }],\n }\n\n // @ts-expect-error\n const config: Config = {\n collections: [\n {\n slug: 'test',\n fields: [\n {\n name: 'arr',\n type: 'array',\n fields: [{ name: 'blocks', type: 'blocks', blocks: [namedBlock] }],\n },\n {\n name: 'grp',\n type: 'group',\n fields: [{ name: 'blocks', type: 'blocks', blocks: [namedBlock] }],\n },\n ],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n\n // Without forceInlineBlocks: blocks field uses $ref\n const { jsonSchema: schemaDefault } = configToJSONSchema(sanitizedConfig, 'text')\n const arrItemsDefault = schemaDefault.$defs!.test.properties!.arr.items as JSONSchema4\n const arrBlocksDefault = (arrItemsDefault.properties!.blocks.items as JSONSchema4).oneOf![0]\n expect(arrBlocksDefault).toStrictEqual({ $ref: '#/$defs/MyBlock' })\n\n // With forceInlineBlocks: blocks field is inlined, no $ref\n const { jsonSchema: schemaInline } = configToJSONSchema(sanitizedConfig, 'text', undefined, {\n forceInlineBlocks: true,\n })\n const arrItemsInline = schemaInline.$defs!.test.properties!.arr.items as JSONSchema4\n const arrBlocksInline = (arrItemsInline.properties!.blocks.items as JSONSchema4).oneOf![0]\n expect(arrBlocksInline).not.toHaveProperty('$ref')\n expect(arrBlocksInline.properties?.blockType).toStrictEqual({ const: 'myBlock' })\n\n const grpBlocksInline = (\n schemaInline.$defs!.test.properties!.grp.properties!.blocks.items as JSONSchema4\n ).oneOf![0]\n expect(grpBlocksInline).not.toHaveProperty('$ref')\n expect(grpBlocksInline.properties?.blockType).toStrictEqual({ const: 'myBlock' })\n })\n\n it('entityToStandaloneJSONSchema bundles only the definitions an entity references', async () => {\n const sharedBlock: Block = {\n slug: 'sharedBlock',\n interfaceName: 'SharedBlock',\n fields: [{ name: 'title', type: 'text' }],\n }\n\n // @ts-expect-error partial config\n const config: Config = {\n admin: {\n timezones: {\n supportedTimezones: [\n { label: 'UTC', value: 'UTC' },\n { label: 'New York', value: 'America/New_York' },\n ],\n },\n },\n blocks: [sharedBlock],\n collections: [\n {\n slug: 'with-refs',\n fields: [\n { name: 'layout', type: 'blocks', blockReferences: ['sharedBlock'], blocks: [] },\n { name: 'when', type: 'date', timezone: true },\n ],\n timestamps: false,\n versions: false,\n },\n {\n slug: 'other',\n fields: [{ name: 'title', type: 'text' }],\n timestamps: false,\n versions: false,\n },\n ],\n }\n\n const sanitizedConfig = await sanitizeConfig(config)\n const entity = sanitizedConfig.collections.find(\n (collection) => collection.slug === 'with-refs',\n )!\n\n const schema = entityToStandaloneJSONSchema({\n config: sanitizedConfig,\n defaultIDType: 'text',\n entity,\n })\n\n // Has its own $schema, so it resolves on its own.\n expect(schema.$schema).toBe('https://json-schema.org/draft/2020-12/schema')\n\n // The block reference is resolved inline, so it can't dangle.\n const layoutItems = (schema.properties?.layout as JSONSchema4)?.items as JSONSchema4\n const inlinedBlock = (layoutItems?.oneOf?.[0] ?? {}) as JSONSchema4\n expect(inlinedBlock.properties?.blockType).toStrictEqual({ const: 'sharedBlock' })\n expect(inlinedBlock.properties?.title).toBeDefined()\n\n // A timezone field pulls in supportedTimezones from the root config.\n expect(schema.$defs?.supportedTimezones).toBeDefined()\n\n // Doesn't pull in unrelated collections.\n expect(schema.$defs?.other).toBeUndefined()\n })\n})\n"],"names":["describe","it","expect","sanitizeConfig","configToJSONSchema","entityToStandaloneJSONSchema","config","collections","slug","fields","name","type","required","timestamps","versions","sanitizedConfig","jsonSchema","schema","$defs","test","toStrictEqual","additionalProperties","properties","id","someRequiredField","items","title","blocks","blockField","blockFieldRequired","blockFieldWithFields","oneOf","$ref","blockFieldWithFieldsRequired","defs","Hero","toBeDefined","Cta","hashedHeroNames","Object","keys","filter","k","toHaveLength","description","toContain","toBeUndefined","refsOf","layout","map","r","schema2","sort","tabs","label","fieldInUnnamedTab","namedTab","fieldInNamedTab","namedTabWithRequired","customSchema","fileMatch","uri","jsonWithSchema","withCustom","sharedBlock","interfaceName","editor","CellComponent","FieldComponent","validate","toBe","expectedBlockSchema","blockName","blockType","const","richText","someBlockField","SharedBlock","heroNames","shapeOf","join","not","heroBlock","toEqual","defaultValue","namedBlock","schemaDefault","arrItemsDefault","arr","arrBlocksDefault","schemaInline","undefined","forceInlineBlocks","arrItemsInline","arrBlocksInline","toHaveProperty","grpBlocksInline","grp","admin","timezones","supportedTimezones","value","blockReferences","timezone","entity","find","collection","defaultIDType","$schema","layoutItems","inlinedBlock","other"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPayloadRequest.d.ts","sourceRoot":"","sources":["../../src/utilities/createPayloadRequest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,OAAO,KAAK,EAAkC,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAUvF,KAAK,IAAI,GAAG;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAA;IAClD,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"createPayloadRequest.d.ts","sourceRoot":"","sources":["../../src/utilities/createPayloadRequest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,OAAO,KAAK,EAAkC,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAUvF,KAAK,IAAI,GAAG;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAA;IAClD,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,qFAMxC,IAAI,KAAG,OAAO,CAAC,cAAc,CA0G/B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,GAAG,CAAC,KAAG,CAiCxC,CAAA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,UAAQ,GAAG,CAAC,CAwB9F;AAED,wBAAgB,0CAA0C,CAAC,CAAC,SAAS,SAAS,EAC5E,KAAK,EAAE,CAAC,EACR,IAAI,GAAE;IACJ,YAAY,CAAC,EAAE,OAAO,CAAA;CAClB,GACL,CAAC,CAoCH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAiB,GAAG,CAAC,CAqE/F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
|
-
import { getDependencies } from '
|
|
3
|
+
import { getDependencies } from './getDependencies.js';
|
|
4
4
|
import { compareVersions } from './versionUtils.js';
|
|
5
5
|
const filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const dirname = path.dirname(filename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/dependencies/dependencyChecker.ts"],"sourcesContent":["import path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport { getDependencies } from '
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/dependencies/dependencyChecker.ts"],"sourcesContent":["import path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport { getDependencies } from './getDependencies.js'\nimport { compareVersions } from './versionUtils.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nexport type CustomVersionParser = (version: string) => { parts: number[]; preReleases: string[] }\n\nexport type DependencyCheckerArgs = {\n /**\n * Define dependency groups to ensure that all dependencies within that group are on the same version, and that no dependencies in that group with different versions are found\n */\n dependencyGroups?: {\n dependencies: string[]\n /**\n * Name of the dependency group to be displayed in the error message\n */\n name: string\n targetVersion?: string\n targetVersionDependency?: string\n }[]\n /**\n * Dependency package names keyed to their required versions. Supports >= (greater or equal than version) as a prefix, or no prefix for the exact version\n */\n dependencyVersions?: {\n [dependency: string]: {\n customVersionParser?: CustomVersionParser\n required?: boolean\n version?: string\n }\n }\n}\n\nexport async function checkDependencies({\n dependencyGroups,\n dependencyVersions,\n}: DependencyCheckerArgs): Promise<void> {\n if (dependencyGroups?.length) {\n for (const dependencyGroup of dependencyGroups) {\n const resolvedDependencies = await getDependencies(dirname, dependencyGroup.dependencies)\n\n // Go through each resolved dependency. If any dependency has a mismatching version, throw an error\n const foundVersions: {\n [version: string]: string\n } = {}\n for (const [_pkg, { version }] of resolvedDependencies.resolved) {\n if (!Object.keys(foundVersions).includes(version)) {\n foundVersions[version] = _pkg\n }\n }\n if (Object.keys(foundVersions).length > 1) {\n const targetVersion =\n dependencyGroup.targetVersion ??\n resolvedDependencies.resolved.get(dependencyGroup.targetVersionDependency!)?.version\n if (targetVersion) {\n const formattedVersionsWithPackageNameString = Object.entries(foundVersions)\n .filter(([version]) => version !== targetVersion)\n .map(([version, pkg]) => `${pkg}@${version} (Please change this to ${targetVersion})`)\n .join(', ')\n throw new Error(\n `Mismatching \"${dependencyGroup.name}\" dependency versions found: ${formattedVersionsWithPackageNameString}. All \"${dependencyGroup.name}\" packages must have the same version. This is an error with your set-up, not a bug in Payload. Please go to your package.json and ensure all \"${dependencyGroup.name}\" packages have the same version.`,\n )\n } else {\n const formattedVersionsWithPackageNameString = Object.entries(foundVersions)\n .map(([version, pkg]) => `${pkg}@${version}`)\n .join(', ')\n throw new Error(\n `Mismatching \"${dependencyGroup.name}\" dependency versions found: ${formattedVersionsWithPackageNameString}. All \"${dependencyGroup.name}\" packages must have the same version. This is an error with your set-up, not a bug in Payload. Please go to your package.json and ensure all \"${dependencyGroup.name}\" packages have the same version.`,\n )\n }\n }\n }\n }\n\n if (dependencyVersions && Object.keys(dependencyVersions).length) {\n const resolvedDependencies = await getDependencies(dirname, Object.keys(dependencyVersions))\n for (const [dependency, settings] of Object.entries(dependencyVersions)) {\n const resolvedDependency = resolvedDependencies.resolved.get(dependency)\n if (!resolvedDependency) {\n if (!settings.required) {\n continue\n }\n throw new Error(`Dependency ${dependency} not found. Please ensure it is installed.`)\n }\n\n if (settings.version) {\n const settingsVersionToCheck = settings.version.startsWith('>=')\n ? settings.version.slice(2)\n : settings.version\n\n const versionCompareResult = compareVersions(\n resolvedDependency.version,\n settingsVersionToCheck,\n settings.customVersionParser,\n )\n\n if (settings.version.startsWith('>=')) {\n if (versionCompareResult === 'lower') {\n throw new Error(\n `Dependency ${dependency} is on version ${resolvedDependency.version}, but ${settings.version} or greater is required. Please update this dependency.`,\n )\n }\n } else if (versionCompareResult === 'lower' || versionCompareResult === 'greater') {\n throw new Error(\n `Dependency ${dependency} is on version ${resolvedDependency.version}, but ${settings.version} is required. Please update this dependency.`,\n )\n }\n }\n }\n }\n}\n"],"names":["path","fileURLToPath","getDependencies","compareVersions","filename","url","dirname","checkDependencies","dependencyGroups","dependencyVersions","length","dependencyGroup","resolvedDependencies","dependencies","foundVersions","_pkg","version","resolved","Object","keys","includes","targetVersion","get","targetVersionDependency","formattedVersionsWithPackageNameString","entries","filter","map","pkg","join","Error","name","dependency","settings","resolvedDependency","required","settingsVersionToCheck","startsWith","slice","versionCompareResult","customVersionParser"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDependencies.d.ts","sourceRoot":"","sources":["../../../src/utilities/dependencies/getDependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getDependencies.d.ts","sourceRoot":"","sources":["../../../src/utilities/dependencies/getDependencies.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,GAAG,CACX,MAAM,EACN;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CACF,CAAA;CACF,CAAA;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,qBAAqB,CAAC,CA+DhC"}
|
|
@@ -17,12 +17,12 @@ import path from 'path';
|
|
|
17
17
|
import { fileURLToPath } from 'url';
|
|
18
18
|
import { findUp } from '../findUp.js';
|
|
19
19
|
import { resolveFrom } from './resolveFrom.js';
|
|
20
|
-
const filename = fileURLToPath(import.meta.url);
|
|
21
|
-
const dirname = path.dirname(filename);
|
|
22
|
-
const payloadPkgDirname = path.resolve(dirname, '../../../') // pkg dir (outside src)
|
|
23
|
-
;
|
|
24
|
-
const resolvedCwd = path.resolve(process.cwd());
|
|
25
20
|
export async function getDependencies(baseDir, requiredPackages) {
|
|
21
|
+
const filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const dirname = path.dirname(filename);
|
|
23
|
+
const payloadPkgDirname = path.resolve(dirname, '../../../') // pkg dir (outside src)
|
|
24
|
+
;
|
|
25
|
+
const resolvedCwd = path.resolve(process.cwd());
|
|
26
26
|
const resolutions = new Map();
|
|
27
27
|
const missingPackages = [];
|
|
28
28
|
await Promise.all(requiredPackages.map(async (pkg)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/dependencies/getDependencies.ts"],"sourcesContent":["/*\n This source code has been taken and modified from https://github.com/vercel/next.js/blob/41a80533f900467e1b788bd2673abe2dca20be6a/packages/next/src/lib/has-necessary-dependencies.ts\n\n License:\n\n The MIT License (MIT)\n\n Copyright (c) 2024 Vercel, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nimport { promises as fs } from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport { findUp } from '../findUp.js'\nimport { resolveFrom } from './resolveFrom.js'\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/dependencies/getDependencies.ts"],"sourcesContent":["/*\n This source code has been taken and modified from https://github.com/vercel/next.js/blob/41a80533f900467e1b788bd2673abe2dca20be6a/packages/next/src/lib/has-necessary-dependencies.ts\n\n License:\n\n The MIT License (MIT)\n\n Copyright (c) 2024 Vercel, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nimport { promises as fs } from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport { findUp } from '../findUp.js'\nimport { resolveFrom } from './resolveFrom.js'\n\nexport type NecessaryDependencies = {\n missing: string[]\n resolved: Map<\n string,\n {\n path: string\n version: string\n }\n >\n}\n\nexport async function getDependencies(\n baseDir: string,\n requiredPackages: string[],\n): Promise<NecessaryDependencies> {\n const filename = fileURLToPath(import.meta.url)\n const dirname = path.dirname(filename)\n const payloadPkgDirname = path.resolve(dirname, '../../../') // pkg dir (outside src)\n const resolvedCwd = path.resolve(process.cwd())\n\n const resolutions = new Map<\n string,\n {\n path: string\n version: string\n }\n >()\n const missingPackages: string[] = []\n\n await Promise.all(\n requiredPackages.map(async (pkg) => {\n try {\n const pkgPath = await fs.realpath(resolveFrom(baseDir, pkg))\n const pkgDir = path.dirname(pkgPath)\n\n let packageJsonFilePath: null | string = null\n\n const foundPackageJsonDir = await findUp({\n dir: pkgDir,\n fileNames: ['package.json'],\n })\n\n if (foundPackageJsonDir) {\n const resolvedFoundPath = path.resolve(foundPackageJsonDir)\n\n if (\n resolvedFoundPath.startsWith(resolvedCwd) ||\n resolvedFoundPath.startsWith(payloadPkgDirname)\n ) {\n // We don't want to match node modules outside the user's project. Checking for both process.cwd and dirname is a reliable way to do this.\n packageJsonFilePath = resolvedFoundPath\n }\n }\n\n // No need to check if packageJsonFilePath exists - findUp checks that for us\n if (packageJsonFilePath) {\n // parse version\n const packageJson = JSON.parse(await fs.readFile(packageJsonFilePath, 'utf8'))\n const version = packageJson.version\n\n resolutions.set(pkg, {\n path: packageJsonFilePath,\n version,\n })\n } else {\n return missingPackages.push(pkg)\n }\n } catch (_) {\n return missingPackages.push(pkg)\n }\n }),\n )\n\n return {\n missing: missingPackages,\n resolved: resolutions,\n }\n}\n"],"names":["promises","fs","path","fileURLToPath","findUp","resolveFrom","getDependencies","baseDir","requiredPackages","filename","url","dirname","payloadPkgDirname","resolve","resolvedCwd","process","cwd","resolutions","Map","missingPackages","Promise","all","map","pkg","pkgPath","realpath","pkgDir","packageJsonFilePath","foundPackageJsonDir","dir","fileNames","resolvedFoundPath","startsWith","packageJson","JSON","parse","readFile","version","set","push","_","missing","resolved"],"mappings":"AAAA;;;;;;;;;;;;;;AAcA,GAEA,SAASA,YAAYC,EAAE,QAAQ,KAAI;AACnC,OAAOC,UAAU,OAAM;AACvB,SAASC,aAAa,QAAQ,MAAK;AAEnC,SAASC,MAAM,QAAQ,eAAc;AACrC,SAASC,WAAW,QAAQ,mBAAkB;AAa9C,OAAO,eAAeC,gBACpBC,OAAe,EACfC,gBAA0B;IAE1B,MAAMC,WAAWN,cAAc,YAAYO,GAAG;IAC9C,MAAMC,UAAUT,KAAKS,OAAO,CAACF;IAC7B,MAAMG,oBAAoBV,KAAKW,OAAO,CAACF,SAAS,aAAa,wBAAwB;;IACrF,MAAMG,cAAcZ,KAAKW,OAAO,CAACE,QAAQC,GAAG;IAE5C,MAAMC,cAAc,IAAIC;IAOxB,MAAMC,kBAA4B,EAAE;IAEpC,MAAMC,QAAQC,GAAG,CACfb,iBAAiBc,GAAG,CAAC,OAAOC;QAC1B,IAAI;YACF,MAAMC,UAAU,MAAMvB,GAAGwB,QAAQ,CAACpB,YAAYE,SAASgB;YACvD,MAAMG,SAASxB,KAAKS,OAAO,CAACa;YAE5B,IAAIG,sBAAqC;YAEzC,MAAMC,sBAAsB,MAAMxB,OAAO;gBACvCyB,KAAKH;gBACLI,WAAW;oBAAC;iBAAe;YAC7B;YAEA,IAAIF,qBAAqB;gBACvB,MAAMG,oBAAoB7B,KAAKW,OAAO,CAACe;gBAEvC,IACEG,kBAAkBC,UAAU,CAAClB,gBAC7BiB,kBAAkBC,UAAU,CAACpB,oBAC7B;oBACA,0IAA0I;oBAC1Ie,sBAAsBI;gBACxB;YACF;YAEA,6EAA6E;YAC7E,IAAIJ,qBAAqB;gBACvB,gBAAgB;gBAChB,MAAMM,cAAcC,KAAKC,KAAK,CAAC,MAAMlC,GAAGmC,QAAQ,CAACT,qBAAqB;gBACtE,MAAMU,UAAUJ,YAAYI,OAAO;gBAEnCpB,YAAYqB,GAAG,CAACf,KAAK;oBACnBrB,MAAMyB;oBACNU;gBACF;YACF,OAAO;gBACL,OAAOlB,gBAAgBoB,IAAI,CAAChB;YAC9B;QACF,EAAE,OAAOiB,GAAG;YACV,OAAOrB,gBAAgBoB,IAAI,CAAChB;QAC9B;IACF;IAGF,OAAO;QACLkB,SAAStB;QACTuB,UAAUzB;IACZ;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveFrom.d.ts","sourceRoot":"","sources":["../../../src/utilities/dependencies/resolveFrom.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"resolveFrom.d.ts","sourceRoot":"","sources":["../../../src/utilities/dependencies/resolveFrom.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,WAAW,GAAI,eAAe,MAAM,EAAE,UAAU,MAAM,EAAE,SAAS,OAAO,QAgDpF,CAAA"}
|
|
@@ -13,7 +13,7 @@ import { pathToFileURL } from 'url';
|
|
|
13
13
|
// Vitest runs tests in a VM context where eval'd dynamic imports fail with
|
|
14
14
|
// ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING. Use direct import in test environment.
|
|
15
15
|
if (process.env.VITEST) {
|
|
16
|
-
return await import(/* webpackIgnore: true */ importPath);
|
|
16
|
+
return await import(/* webpackIgnore: true */ /* @vite-ignore */ importPath);
|
|
17
17
|
}
|
|
18
18
|
// Without the eval, the Next.js bundler will throw this error when encountering the import statement:
|
|
19
19
|
// ⚠ Compiled with warnings in X.Xs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/dynamicImport.ts"],"sourcesContent":["import path from 'path'\nimport { pathToFileURL } from 'url'\n\n/**\n * Dynamically imports a module from a file path or module specifier.\n *\n * Uses a direct `import()` in Vitest (where eval'd imports fail with ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING),\n * and `eval(`import(...)`)` elsewhere to hide the import from Next.js bundler static analysis.\n *\n * @param modulePathOrSpecifier - Either an absolute file path or a module specifier (package name)\n */\nexport async function dynamicImport<T = unknown>(modulePathOrSpecifier: string): Promise<T> {\n // Convert absolute file paths to file:// URLs, but leave package specifiers as-is\n const importPath = path.isAbsolute(modulePathOrSpecifier)\n ? pathToFileURL(modulePathOrSpecifier).href\n : modulePathOrSpecifier\n\n // Vitest runs tests in a VM context where eval'd dynamic imports fail with\n // ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING. Use direct import in test environment.\n if (process.env.VITEST) {\n return await import(/* webpackIgnore: true */ importPath)\n }\n\n // Without the eval, the Next.js bundler will throw this error when encountering the import statement:\n // ⚠ Compiled with warnings in X.Xs\n // Critical dependency: the request of a dependency is an expression\n return await eval(`import('${importPath}')`)\n}\n"],"names":["path","pathToFileURL","dynamicImport","modulePathOrSpecifier","importPath","isAbsolute","href","process","env","VITEST","eval"],"mappings":"AAAA,OAAOA,UAAU,OAAM;AACvB,SAASC,aAAa,QAAQ,MAAK;AAEnC;;;;;;;CAOC,GACD,OAAO,eAAeC,cAA2BC,qBAA6B;IAC5E,kFAAkF;IAClF,MAAMC,aAAaJ,KAAKK,UAAU,CAACF,yBAC/BF,cAAcE,uBAAuBG,IAAI,GACzCH;IAEJ,2EAA2E;IAC3E,iFAAiF;IACjF,IAAII,QAAQC,GAAG,CAACC,MAAM,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,uBAAuB,GAAGL;
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/dynamicImport.ts"],"sourcesContent":["import path from 'path'\nimport { pathToFileURL } from 'url'\n\n/**\n * Dynamically imports a module from a file path or module specifier.\n *\n * Uses a direct `import()` in Vitest (where eval'd imports fail with ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING),\n * and `eval(`import(...)`)` elsewhere to hide the import from Next.js bundler static analysis.\n *\n * @param modulePathOrSpecifier - Either an absolute file path or a module specifier (package name)\n */\nexport async function dynamicImport<T = unknown>(modulePathOrSpecifier: string): Promise<T> {\n // Convert absolute file paths to file:// URLs, but leave package specifiers as-is\n const importPath = path.isAbsolute(modulePathOrSpecifier)\n ? pathToFileURL(modulePathOrSpecifier).href\n : modulePathOrSpecifier\n\n // Vitest runs tests in a VM context where eval'd dynamic imports fail with\n // ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING. Use direct import in test environment.\n if (process.env.VITEST) {\n return await import(/* webpackIgnore: true */ /* @vite-ignore */ importPath)\n }\n\n // Without the eval, the Next.js bundler will throw this error when encountering the import statement:\n // ⚠ Compiled with warnings in X.Xs\n // Critical dependency: the request of a dependency is an expression\n return await eval(`import('${importPath}')`)\n}\n"],"names":["path","pathToFileURL","dynamicImport","modulePathOrSpecifier","importPath","isAbsolute","href","process","env","VITEST","eval"],"mappings":"AAAA,OAAOA,UAAU,OAAM;AACvB,SAASC,aAAa,QAAQ,MAAK;AAEnC;;;;;;;CAOC,GACD,OAAO,eAAeC,cAA2BC,qBAA6B;IAC5E,kFAAkF;IAClF,MAAMC,aAAaJ,KAAKK,UAAU,CAACF,yBAC/BF,cAAcE,uBAAuBG,IAAI,GACzCH;IAEJ,2EAA2E;IAC3E,iFAAiF;IACjF,IAAII,QAAQC,GAAG,CAACC,MAAM,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,uBAAuB,GAAG,gBAAgB,GAAGL;IACnE;IAEA,sGAAsG;IACtG,mCAAmC;IACnC,oEAAoE;IACpE,OAAO,MAAMM,KAAK,CAAC,QAAQ,EAAEN,WAAW,EAAE,CAAC;AAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escapeRegExp.d.ts","sourceRoot":"","sources":["../../src/utilities/escapeRegExp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"escapeRegExp.d.ts","sourceRoot":"","sources":["../../src/utilities/escapeRegExp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MACC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractID.d.ts","sourceRoot":"","sources":["../../src/utilities/extractID.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"extractID.d.ts","sourceRoot":"","sources":["../../src/utilities/extractID.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,EACtD,YAAY;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,KAClC,MAMF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/extractID.ts"],"sourcesContent":["export const extractID = <IDType extends number | string>(\n objectOrID: { id: IDType } | IDType,\n): IDType => {\n if (typeof objectOrID === 'string' || typeof objectOrID === 'number') {\n return objectOrID\n }\n\n return objectOrID
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/extractID.ts"],"sourcesContent":["export const extractID = <IDType extends number | string>(\n objectOrID: { id: IDType } | IDType,\n): IDType => {\n if (typeof objectOrID === 'string' || typeof objectOrID === 'number') {\n return objectOrID\n }\n\n return objectOrID?.id\n}\n"],"names":["extractID","objectOrID","id"],"mappings":"AAAA,OAAO,MAAMA,YAAY,CACvBC;IAEA,IAAI,OAAOA,eAAe,YAAY,OAAOA,eAAe,UAAU;QACpE,OAAOA;IACT;IAEA,OAAOA,YAAYC;AACrB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenAllFields.d.ts","sourceRoot":"","sources":["../../src/utilities/flattenAllFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,cAAc,EAEd,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAIlC,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"flattenAllFields.d.ts","sourceRoot":"","sources":["../../src/utilities/flattenAllFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,cAAc,EAEd,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAIlC,eAAO,MAAM,YAAY,GAAI,WAAW;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,KAAG,cAK1D,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,oBAG9B;IACD,wGAAwG;IACxG,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,KAAG,cAAc,EAiGjB,CAAA"}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import type { Config } from '../config/types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Builds correct URLs for admin panel and API routing.
|
|
4
|
+
* Use this for both admin routes (`adminRoute`) and API routes (`apiRoute`).
|
|
5
|
+
*
|
|
4
6
|
* Its primary responsibilities are:
|
|
5
|
-
* 1. Read from your `routes.admin` config and appropriately handle `"/"`
|
|
7
|
+
* 1. Read from your `routes.admin` or `routes.api` config and appropriately handle `"/"` paths
|
|
6
8
|
* 2. Prepend the `basePath` from your Next.js config, if specified
|
|
7
9
|
* 3. Return relative or absolute URLs, as needed
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Admin route
|
|
13
|
+
* formatAdminURL({ adminRoute, path: `/collections/${slug}` })
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // API route with query params
|
|
17
|
+
* const queryString = qs.stringify({ where, limit, page }, { addQueryPrefix: true })
|
|
18
|
+
* formatAdminURL({ apiRoute: api, path: `/${slug}${queryString}`, serverURL })
|
|
8
19
|
*/
|
|
9
20
|
type BaseFormatURLArgs = {
|
|
10
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatAdminURL.d.ts","sourceRoot":"","sources":["../../src/utilities/formatAdminURL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"formatAdminURL.d.ts","sourceRoot":"","sources":["../../src/utilities/formatAdminURL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,iBAAiB,GAAG;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,CAAA;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAE7B,KAAK,aAAa,GACd,CAAC;IACC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAA;CACjB,GAAG,iBAAiB,CAAC,GACtB,CAAC;IACC,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;CAC/C,GAAG,iBAAiB,CAAC,CAAA;AAE1B,eAAO,MAAM,cAAc,GAAI,MAAM,aAAa,KAAG,MAyBpD,CAAA"}
|
|
@@ -11,24 +11,12 @@ export const formatAdminURL = (args)=>{
|
|
|
11
11
|
const includeBasePath = includeBasePathArg ?? (adminRoute ? false : true);
|
|
12
12
|
if (relative || !serverURL) {
|
|
13
13
|
if (includeBasePath && basePath) {
|
|
14
|
-
return
|
|
14
|
+
return pathnameWithBase;
|
|
15
15
|
}
|
|
16
|
-
return
|
|
16
|
+
return pathname;
|
|
17
17
|
}
|
|
18
18
|
const serverURLObj = new URL(serverURL);
|
|
19
|
-
return
|
|
20
|
-
};
|
|
21
|
-
const applyTrailingSlash = (url)=>{
|
|
22
|
-
if (process.env.NEXT_TRAILING_SLASH !== 'true') {
|
|
23
|
-
return url;
|
|
24
|
-
}
|
|
25
|
-
const queryIndex = url.search(/[?#]/);
|
|
26
|
-
const pathPart = queryIndex === -1 ? url : url.slice(0, queryIndex);
|
|
27
|
-
const queryPart = queryIndex === -1 ? '' : url.slice(queryIndex);
|
|
28
|
-
if (pathPart.endsWith('/')) {
|
|
29
|
-
return url;
|
|
30
|
-
}
|
|
31
|
-
return `${pathPart}/${queryPart}`;
|
|
19
|
+
return new URL(pathnameWithBase, serverURLObj.origin).toString();
|
|
32
20
|
};
|
|
33
21
|
|
|
34
22
|
//# sourceMappingURL=formatAdminURL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/formatAdminURL.ts"],"sourcesContent":["import type { Config } from '../config/types.js'\n\n/**\n *
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/formatAdminURL.ts"],"sourcesContent":["import type { Config } from '../config/types.js'\n\n/**\n * Builds correct URLs for admin panel and API routing.\n * Use this for both admin routes (`adminRoute`) and API routes (`apiRoute`).\n *\n * Its primary responsibilities are:\n * 1. Read from your `routes.admin` or `routes.api` config and appropriately handle `\"/\"` paths\n * 2. Prepend the `basePath` from your Next.js config, if specified\n * 3. Return relative or absolute URLs, as needed\n *\n * @example\n * // Admin route\n * formatAdminURL({ adminRoute, path: `/collections/${slug}` })\n *\n * @example\n * // API route with query params\n * const queryString = qs.stringify({ where, limit, page }, { addQueryPrefix: true })\n * formatAdminURL({ apiRoute: api, path: `/${slug}${queryString}`, serverURL })\n */\ntype BaseFormatURLArgs = {\n /**\n * The subpath of your application, if specified.\n * @see https://nextjs.org/docs/app/api-reference/config/next-config-js/basePath\n * @example '/docs'\n */\n basePath?: string\n includeBasePath?: boolean\n path?: '' | `/${string}` | null\n /**\n * Return a relative URL, e.g. ignore `serverURL`.\n * Useful for route-matching, etc.\n */\n relative?: boolean\n} & Pick<Config, 'serverURL'>\n\ntype FormatURLArgs =\n | ({\n adminRoute: NonNullable<Config['routes']>['admin']\n apiRoute?: never\n } & BaseFormatURLArgs)\n | ({\n adminRoute?: never\n apiRoute: NonNullable<Config['routes']>['api']\n } & BaseFormatURLArgs)\n\nexport const formatAdminURL = (args: FormatURLArgs): string => {\n const {\n adminRoute,\n apiRoute,\n includeBasePath: includeBasePathArg,\n path = '',\n relative = false,\n serverURL,\n } = args\n const basePath = process.env.NEXT_BASE_PATH || args.basePath || ''\n const routePath = adminRoute || apiRoute\n const segments = [routePath && routePath !== '/' && routePath, path && path].filter(Boolean)\n const pathname = segments.join('') || '/'\n const pathnameWithBase = (basePath + pathname).replace(/\\/$/, '') || '/'\n const includeBasePath = includeBasePathArg ?? (adminRoute ? false : true)\n\n if (relative || !serverURL) {\n if (includeBasePath && basePath) {\n return pathnameWithBase\n }\n return pathname\n }\n\n const serverURLObj = new URL(serverURL)\n return new URL(pathnameWithBase, serverURLObj.origin).toString()\n}\n"],"names":["formatAdminURL","args","adminRoute","apiRoute","includeBasePath","includeBasePathArg","path","relative","serverURL","basePath","process","env","NEXT_BASE_PATH","routePath","segments","filter","Boolean","pathname","join","pathnameWithBase","replace","serverURLObj","URL","origin","toString"],"mappings":"AA8CA,OAAO,MAAMA,iBAAiB,CAACC;IAC7B,MAAM,EACJC,UAAU,EACVC,QAAQ,EACRC,iBAAiBC,kBAAkB,EACnCC,OAAO,EAAE,EACTC,WAAW,KAAK,EAChBC,SAAS,EACV,GAAGP;IACJ,MAAMQ,WAAWC,QAAQC,GAAG,CAACC,cAAc,IAAIX,KAAKQ,QAAQ,IAAI;IAChE,MAAMI,YAAYX,cAAcC;IAChC,MAAMW,WAAW;QAACD,aAAaA,cAAc,OAAOA;QAAWP,QAAQA;KAAK,CAACS,MAAM,CAACC;IACpF,MAAMC,WAAWH,SAASI,IAAI,CAAC,OAAO;IACtC,MAAMC,mBAAmB,AAACV,CAAAA,WAAWQ,QAAO,EAAGG,OAAO,CAAC,OAAO,OAAO;IACrE,MAAMhB,kBAAkBC,sBAAuBH,CAAAA,aAAa,QAAQ,IAAG;IAEvE,IAAIK,YAAY,CAACC,WAAW;QAC1B,IAAIJ,mBAAmBK,UAAU;YAC/B,OAAOU;QACT;QACA,OAAOF;IACT;IAEA,MAAMI,eAAe,IAAIC,IAAId;IAC7B,OAAO,IAAIc,IAAIH,kBAAkBE,aAAaE,MAAM,EAAEC,QAAQ;AAChE,EAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
2
|
import { formatAdminURL } from './formatAdminURL.js';
|
|
3
3
|
describe('formatAdminURL', ()=>{
|
|
4
4
|
const serverURL = 'https://example.com';
|
|
@@ -163,95 +163,6 @@ describe('formatAdminURL', ()=>{
|
|
|
163
163
|
expect(result).toBe('/');
|
|
164
164
|
});
|
|
165
165
|
});
|
|
166
|
-
describe('trailing slash handling', ()=>{
|
|
167
|
-
const originalTrailingSlash = process.env.NEXT_TRAILING_SLASH;
|
|
168
|
-
beforeEach(()=>{
|
|
169
|
-
process.env.NEXT_TRAILING_SLASH = 'true';
|
|
170
|
-
});
|
|
171
|
-
afterEach(()=>{
|
|
172
|
-
if (originalTrailingSlash === undefined) {
|
|
173
|
-
delete process.env.NEXT_TRAILING_SLASH;
|
|
174
|
-
} else {
|
|
175
|
-
process.env.NEXT_TRAILING_SLASH = originalTrailingSlash;
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
it('should append trailing slash to relative admin URL', ()=>{
|
|
179
|
-
const result = formatAdminURL({
|
|
180
|
-
adminRoute: defaultAdminRoute,
|
|
181
|
-
path: dummyPath,
|
|
182
|
-
relative: true
|
|
183
|
-
});
|
|
184
|
-
expect(result).toBe(`${defaultAdminRoute}${dummyPath}/`);
|
|
185
|
-
});
|
|
186
|
-
it('should append trailing slash to relative api URL', ()=>{
|
|
187
|
-
const result = formatAdminURL({
|
|
188
|
-
apiRoute: '/api',
|
|
189
|
-
path: '/users',
|
|
190
|
-
relative: true
|
|
191
|
-
});
|
|
192
|
-
expect(result).toBe(`${process.env.NEXT_BASE_PATH || ''}/api/users/`);
|
|
193
|
-
});
|
|
194
|
-
it('should append trailing slash to absolute URL', ()=>{
|
|
195
|
-
const result = formatAdminURL({
|
|
196
|
-
adminRoute: defaultAdminRoute,
|
|
197
|
-
path: dummyPath,
|
|
198
|
-
serverURL
|
|
199
|
-
});
|
|
200
|
-
expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}/`);
|
|
201
|
-
});
|
|
202
|
-
it('should append trailing slash when basePath is set', ()=>{
|
|
203
|
-
const result = formatAdminURL({
|
|
204
|
-
apiRoute: '/api',
|
|
205
|
-
basePath: '/v1',
|
|
206
|
-
path: '/users',
|
|
207
|
-
serverURL
|
|
208
|
-
});
|
|
209
|
-
expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1/api/users/`);
|
|
210
|
-
});
|
|
211
|
-
it('should not append trailing slash to root "/"', ()=>{
|
|
212
|
-
const result = formatAdminURL({
|
|
213
|
-
adminRoute: rootAdminRoute,
|
|
214
|
-
relative: true
|
|
215
|
-
});
|
|
216
|
-
expect(result).toBe('/');
|
|
217
|
-
});
|
|
218
|
-
it('should not double-slash when path already ends with /', ()=>{
|
|
219
|
-
const result = formatAdminURL({
|
|
220
|
-
adminRoute: defaultAdminRoute,
|
|
221
|
-
path: '/collections/posts',
|
|
222
|
-
relative: true
|
|
223
|
-
});
|
|
224
|
-
expect(result.endsWith('//')).toBe(false);
|
|
225
|
-
expect(result).toBe(`${defaultAdminRoute}/collections/posts/`);
|
|
226
|
-
});
|
|
227
|
-
it('should place trailing slash before query string', ()=>{
|
|
228
|
-
const path = `${dummyPath}?page=2`;
|
|
229
|
-
const result = formatAdminURL({
|
|
230
|
-
adminRoute: defaultAdminRoute,
|
|
231
|
-
path,
|
|
232
|
-
relative: true
|
|
233
|
-
});
|
|
234
|
-
expect(result).toBe(`${defaultAdminRoute}${dummyPath}/?page=2`);
|
|
235
|
-
});
|
|
236
|
-
it('should leave URLs unchanged when env var is not set', ()=>{
|
|
237
|
-
delete process.env.NEXT_TRAILING_SLASH;
|
|
238
|
-
const result = formatAdminURL({
|
|
239
|
-
adminRoute: defaultAdminRoute,
|
|
240
|
-
path: dummyPath,
|
|
241
|
-
relative: true
|
|
242
|
-
});
|
|
243
|
-
expect(result).toBe(`${defaultAdminRoute}${dummyPath}`);
|
|
244
|
-
});
|
|
245
|
-
it('should leave URLs unchanged when env var is "false"', ()=>{
|
|
246
|
-
process.env.NEXT_TRAILING_SLASH = 'false';
|
|
247
|
-
const result = formatAdminURL({
|
|
248
|
-
adminRoute: defaultAdminRoute,
|
|
249
|
-
path: dummyPath,
|
|
250
|
-
relative: true
|
|
251
|
-
});
|
|
252
|
-
expect(result).toBe(`${defaultAdminRoute}${dummyPath}`);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
166
|
});
|
|
256
167
|
|
|
257
168
|
//# sourceMappingURL=formatAdminURL.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/formatAdminURL.spec.ts"],"sourcesContent":["import { afterEach, beforeEach, describe, it, expect } from 'vitest'\nimport { formatAdminURL } from './formatAdminURL.js'\n\ndescribe('formatAdminURL', () => {\n const serverURL = 'https://example.com'\n\n const defaultAdminRoute = '/admin'\n const rootAdminRoute = '/'\n\n const dummyPath = '/collections/posts'\n\n describe('relative URLs', () => {\n it('should ignore `serverURL` when relative=true', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n serverURL,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n\n it('should force relative URL when `serverURL` is omitted', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n relative: false,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n })\n\n describe('absolute URLs', () => {\n it('should return absolute URL with serverURL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}`,\n )\n })\n\n it('should handle serverURL with trailing slash', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '/collections/posts',\n serverURL: 'https://example.com/',\n })\n\n expect(result).toBe(\n `https://example.com${process.env.NEXT_BASE_PATH || ''}/admin/collections/posts`,\n )\n })\n\n it('should handle serverURL with subdirectory', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '/collections/posts',\n serverURL: 'https://example.com/api/v1',\n })\n\n expect(result).toBe(\n `https://example.com${process.env.NEXT_BASE_PATH || ''}/admin/collections/posts`,\n )\n })\n })\n\n describe('admin route handling', () => {\n it('should return relative URL for adminRoute=\"/\", no path, no `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n })\n\n expect(result).toBe('/')\n })\n\n it('should handle relative URL for adminRoute=\"/\", with path, no `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n path: dummyPath,\n })\n\n expect(result).toBe(dummyPath)\n })\n\n it('should return absolute URL for adminRoute=\"/\", no path, with `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n serverURL,\n })\n\n expect(result).toBe('https://example.com/')\n })\n\n it('should handle absolute URL for adminRoute=\"/\", with path and `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n serverURL,\n path: dummyPath,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${dummyPath}`)\n })\n })\n\n describe('base path handling', () => {\n it('should include basePath in URL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n basePath: '/v1',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1${defaultAdminRoute}${dummyPath}`,\n )\n })\n\n it('should handle basePath with adminRoute=\"/\"', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n basePath: '/v1',\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1`)\n })\n\n it('should handle basePath with no adminRoute', () => {\n const result = formatAdminURL({\n adminRoute: undefined,\n basePath: '/v1',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1${dummyPath}`)\n })\n\n it('should handle empty basePath', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n basePath: '',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}`,\n )\n })\n })\n\n describe('path handling', () => {\n it('should handle empty string path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '',\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle null path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: null,\n serverURL,\n })\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle undefined path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: undefined,\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle path with query parameters', () => {\n const path = `${dummyPath}?page=2`\n\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${path}`,\n )\n })\n })\n\n describe('edge cases', () => {\n it('should return \"/\" when given minimal args', () => {\n const result = formatAdminURL({\n adminRoute: undefined,\n basePath: '',\n path: '',\n relative: true,\n })\n\n expect(result).toBe('/')\n })\n })\n\n describe('trailing slash handling', () => {\n const originalTrailingSlash = process.env.NEXT_TRAILING_SLASH\n\n beforeEach(() => {\n process.env.NEXT_TRAILING_SLASH = 'true'\n })\n\n afterEach(() => {\n if (originalTrailingSlash === undefined) {\n delete process.env.NEXT_TRAILING_SLASH\n } else {\n process.env.NEXT_TRAILING_SLASH = originalTrailingSlash\n }\n })\n\n it('should append trailing slash to relative admin URL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}/`)\n })\n\n it('should append trailing slash to relative api URL', () => {\n const result = formatAdminURL({\n apiRoute: '/api',\n path: '/users',\n relative: true,\n })\n\n expect(result).toBe(`${process.env.NEXT_BASE_PATH || ''}/api/users/`)\n })\n\n it('should append trailing slash to absolute URL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}/`,\n )\n })\n\n it('should append trailing slash when basePath is set', () => {\n const result = formatAdminURL({\n apiRoute: '/api',\n basePath: '/v1',\n path: '/users',\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1/api/users/`)\n })\n\n it('should not append trailing slash to root \"/\"', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n relative: true,\n })\n\n expect(result).toBe('/')\n })\n\n it('should not double-slash when path already ends with /', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '/collections/posts',\n relative: true,\n })\n\n expect(result.endsWith('//')).toBe(false)\n expect(result).toBe(`${defaultAdminRoute}/collections/posts/`)\n })\n\n it('should place trailing slash before query string', () => {\n const path = `${dummyPath}?page=2`\n\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}/?page=2`)\n })\n\n it('should leave URLs unchanged when env var is not set', () => {\n delete process.env.NEXT_TRAILING_SLASH\n\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n\n it('should leave URLs unchanged when env var is \"false\"', () => {\n process.env.NEXT_TRAILING_SLASH = 'false'\n\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n })\n})\n"],"names":["afterEach","beforeEach","describe","it","expect","formatAdminURL","serverURL","defaultAdminRoute","rootAdminRoute","dummyPath","result","adminRoute","path","relative","toBe","process","env","NEXT_BASE_PATH","basePath","undefined","originalTrailingSlash","NEXT_TRAILING_SLASH","apiRoute","endsWith"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/formatAdminURL.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { formatAdminURL } from './formatAdminURL.js'\n\ndescribe('formatAdminURL', () => {\n const serverURL = 'https://example.com'\n\n const defaultAdminRoute = '/admin'\n const rootAdminRoute = '/'\n\n const dummyPath = '/collections/posts'\n\n describe('relative URLs', () => {\n it('should ignore `serverURL` when relative=true', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n serverURL,\n relative: true,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n\n it('should force relative URL when `serverURL` is omitted', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n relative: false,\n })\n\n expect(result).toBe(`${defaultAdminRoute}${dummyPath}`)\n })\n })\n\n describe('absolute URLs', () => {\n it('should return absolute URL with serverURL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}`,\n )\n })\n\n it('should handle serverURL with trailing slash', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '/collections/posts',\n serverURL: 'https://example.com/',\n })\n\n expect(result).toBe(\n `https://example.com${process.env.NEXT_BASE_PATH || ''}/admin/collections/posts`,\n )\n })\n\n it('should handle serverURL with subdirectory', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '/collections/posts',\n serverURL: 'https://example.com/api/v1',\n })\n\n expect(result).toBe(\n `https://example.com${process.env.NEXT_BASE_PATH || ''}/admin/collections/posts`,\n )\n })\n })\n\n describe('admin route handling', () => {\n it('should return relative URL for adminRoute=\"/\", no path, no `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n })\n\n expect(result).toBe('/')\n })\n\n it('should handle relative URL for adminRoute=\"/\", with path, no `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n path: dummyPath,\n })\n\n expect(result).toBe(dummyPath)\n })\n\n it('should return absolute URL for adminRoute=\"/\", no path, with `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n serverURL,\n })\n\n expect(result).toBe('https://example.com/')\n })\n\n it('should handle absolute URL for adminRoute=\"/\", with path and `serverURL`', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n serverURL,\n path: dummyPath,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${dummyPath}`)\n })\n })\n\n describe('base path handling', () => {\n it('should include basePath in URL', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n basePath: '/v1',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1${defaultAdminRoute}${dummyPath}`,\n )\n })\n\n it('should handle basePath with adminRoute=\"/\"', () => {\n const result = formatAdminURL({\n adminRoute: rootAdminRoute,\n basePath: '/v1',\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1`)\n })\n\n it('should handle basePath with no adminRoute', () => {\n const result = formatAdminURL({\n adminRoute: undefined,\n basePath: '/v1',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}/v1${dummyPath}`)\n })\n\n it('should handle empty basePath', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n basePath: '',\n path: dummyPath,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${dummyPath}`,\n )\n })\n })\n\n describe('path handling', () => {\n it('should handle empty string path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: '',\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle null path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: null,\n serverURL,\n })\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle undefined path', () => {\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path: undefined,\n serverURL,\n })\n\n expect(result).toBe(`${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}`)\n })\n\n it('should handle path with query parameters', () => {\n const path = `${dummyPath}?page=2`\n\n const result = formatAdminURL({\n adminRoute: defaultAdminRoute,\n path,\n serverURL,\n })\n\n expect(result).toBe(\n `${serverURL}${process.env.NEXT_BASE_PATH || ''}${defaultAdminRoute}${path}`,\n )\n })\n })\n\n describe('edge cases', () => {\n it('should return \"/\" when given minimal args', () => {\n const result = formatAdminURL({\n adminRoute: undefined,\n basePath: '',\n path: '',\n relative: true,\n })\n\n expect(result).toBe('/')\n })\n })\n})\n"],"names":["describe","it","expect","formatAdminURL","serverURL","defaultAdminRoute","rootAdminRoute","dummyPath","result","adminRoute","path","relative","toBe","process","env","NEXT_BASE_PATH","basePath","undefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatErrors.d.ts","sourceRoot":"","sources":["../../src/utilities/formatErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"formatErrors.d.ts","sourceRoot":"","sources":["../../src/utilities/formatErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,eAAO,MAAM,YAAY,GAAI,UAAU;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,QAAQ,KAAG,WAmE9E,CAAA"}
|