payload 3.80.0-internal.cdd7ef7 → 3.80.0
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/elements/Nav.d.ts +0 -13
- package/dist/admin/elements/Nav.d.ts.map +1 -1
- package/dist/admin/elements/Nav.js.map +1 -1
- package/dist/admin/functions/index.d.ts +38 -1
- 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 +4 -5
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/folderList.d.ts +56 -0
- package/dist/admin/views/folderList.d.ts.map +1 -0
- package/dist/admin/views/folderList.js +3 -0
- package/dist/admin/views/folderList.js.map +1 -0
- package/dist/admin/views/index.d.ts +3 -1
- 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 +2 -43
- package/dist/admin/views/list.d.ts.map +1 -1
- package/dist/admin/views/list.js.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.js +0 -1
- 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 +0 -7
- package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
- package/dist/collections/config/client.d.ts +1 -3
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +0 -11
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.js +1 -1
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +7 -3
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +7 -29
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/create.js +17 -17
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/findByID.js +3 -3
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/update.js +1 -1
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +6 -6
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +10 -0
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +15 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +26 -3
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +12 -26
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/exports/shared.d.ts +3 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +2 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/index.d.ts +7 -0
- package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/index.js +2 -2
- package/dist/fields/baseFields/slug/index.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +0 -4
- 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 +0 -3
- package/dist/fields/config/sanitizeJoinField.js.map +1 -1
- package/dist/folders/addFolderCollection.d.ts +10 -0
- package/dist/folders/addFolderCollection.d.ts.map +1 -0
- package/dist/folders/addFolderCollection.js +26 -0
- package/dist/folders/addFolderCollection.js.map +1 -0
- package/dist/folders/addFolderFieldToCollection.d.ts +8 -0
- package/dist/folders/addFolderFieldToCollection.d.ts.map +1 -0
- package/dist/folders/addFolderFieldToCollection.js +20 -0
- package/dist/folders/addFolderFieldToCollection.js.map +1 -0
- package/dist/folders/buildFolderField.d.ts +8 -0
- package/dist/folders/buildFolderField.d.ts.map +1 -0
- package/dist/folders/buildFolderField.js +87 -0
- package/dist/folders/buildFolderField.js.map +1 -0
- package/dist/folders/constants.d.ts +3 -0
- package/dist/folders/constants.d.ts.map +1 -0
- package/dist/folders/constants.js +4 -0
- package/dist/folders/constants.js.map +1 -0
- package/dist/folders/createFolderCollection.d.ts +11 -0
- package/dist/folders/createFolderCollection.d.ts.map +1 -0
- package/dist/folders/createFolderCollection.js +115 -0
- package/dist/folders/createFolderCollection.js.map +1 -0
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +8 -0
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +1 -0
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +15 -0
- package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +1 -0
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts +8 -0
- package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +1 -0
- package/dist/folders/hooks/dissasociateAfterDelete.js +20 -0
- package/dist/folders/hooks/dissasociateAfterDelete.js.map +1 -0
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +5 -0
- package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
- package/dist/folders/hooks/ensureSafeCollectionsChange.js +107 -0
- package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +1 -0
- package/dist/folders/hooks/reparentChildFolder.d.ts +24 -0
- package/dist/folders/hooks/reparentChildFolder.d.ts.map +1 -0
- package/dist/folders/hooks/reparentChildFolder.js +72 -0
- package/dist/folders/hooks/reparentChildFolder.js.map +1 -0
- package/dist/folders/types.d.ts +118 -0
- package/dist/folders/types.d.ts.map +1 -0
- package/dist/folders/types.js +3 -0
- package/dist/folders/types.js.map +1 -0
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts +13 -0
- package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +1 -0
- package/dist/folders/utils/buildFolderWhereConstraints.js +45 -0
- package/dist/folders/utils/buildFolderWhereConstraints.js.map +1 -0
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +12 -0
- package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +1 -0
- package/dist/folders/utils/formatFolderOrDocumentItem.js +30 -0
- package/dist/folders/utils/formatFolderOrDocumentItem.js.map +1 -0
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts +14 -0
- package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +1 -0
- package/dist/folders/utils/getFolderBreadcrumbs.js +45 -0
- package/dist/folders/utils/getFolderBreadcrumbs.js.map +1 -0
- package/dist/folders/utils/getFolderData.d.ts +33 -0
- package/dist/folders/utils/getFolderData.d.ts.map +1 -0
- package/dist/folders/utils/getFolderData.js +88 -0
- package/dist/folders/utils/getFolderData.js.map +1 -0
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +24 -0
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +1 -0
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +66 -0
- package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +1 -0
- package/dist/folders/utils/getOrphanedDocs.d.ts +15 -0
- package/dist/folders/utils/getOrphanedDocs.d.ts.map +1 -0
- package/dist/folders/utils/getOrphanedDocs.js +40 -0
- package/dist/folders/utils/getOrphanedDocs.js.map +1 -0
- package/dist/globals/config/types.d.ts +0 -4
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +2 -1
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +288 -577
- package/dist/index.d.ts +9 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -1
- package/dist/preferences/keys.d.ts +4 -8
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +4 -7
- package/dist/preferences/keys.js.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +7 -1
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/extractID.js +1 -1
- package/dist/utilities/extractID.js.map +1 -1
- package/dist/utilities/formatAdminURL.d.ts +2 -13
- package/dist/utilities/formatAdminURL.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.js.map +1 -1
- package/dist/versions/saveVersion.d.ts +1 -0
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +16 -66
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/updateLatestVersion.d.ts +24 -0
- package/dist/versions/updateLatestVersion.d.ts.map +1 -0
- package/dist/versions/updateLatestVersion.js +64 -0
- package/dist/versions/updateLatestVersion.js.map +1 -0
- package/package.json +4 -4
- package/dist/admin/views/hierarchyList.d.ts +0 -9
- package/dist/admin/views/hierarchyList.d.ts.map +0 -1
- package/dist/admin/views/hierarchyList.js +0 -3
- package/dist/admin/views/hierarchyList.js.map +0 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts +0 -8
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +0 -1
- package/dist/hierarchy/addHierarchyToCollection.js +0 -62
- package/dist/hierarchy/addHierarchyToCollection.js.map +0 -1
- package/dist/hierarchy/buildParentField.d.ts +0 -11
- package/dist/hierarchy/buildParentField.d.ts.map +0 -1
- package/dist/hierarchy/buildParentField.js +0 -42
- package/dist/hierarchy/buildParentField.js.map +0 -1
- package/dist/hierarchy/constants.d.ts +0 -15
- package/dist/hierarchy/constants.d.ts.map +0 -1
- package/dist/hierarchy/constants.js +0 -11
- package/dist/hierarchy/constants.js.map +0 -1
- package/dist/hierarchy/createFolderField.d.ts +0 -39
- package/dist/hierarchy/createFolderField.d.ts.map +0 -1
- package/dist/hierarchy/createFolderField.js +0 -54
- package/dist/hierarchy/createFolderField.js.map +0 -1
- package/dist/hierarchy/createFoldersCollection.d.ts +0 -57
- package/dist/hierarchy/createFoldersCollection.d.ts.map +0 -1
- package/dist/hierarchy/createFoldersCollection.js +0 -63
- package/dist/hierarchy/createFoldersCollection.js.map +0 -1
- package/dist/hierarchy/createTagField.d.ts +0 -44
- package/dist/hierarchy/createTagField.d.ts.map +0 -1
- package/dist/hierarchy/createTagField.js +0 -48
- package/dist/hierarchy/createTagField.js.map +0 -1
- package/dist/hierarchy/createTagsCollection.d.ts +0 -54
- package/dist/hierarchy/createTagsCollection.d.ts.map +0 -1
- package/dist/hierarchy/createTagsCollection.js +0 -56
- package/dist/hierarchy/createTagsCollection.js.map +0 -1
- package/dist/hierarchy/getInitialTreeData.d.ts +0 -27
- package/dist/hierarchy/getInitialTreeData.d.ts.map +0 -1
- package/dist/hierarchy/getInitialTreeData.js +0 -125
- package/dist/hierarchy/getInitialTreeData.js.map +0 -1
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +0 -14
- package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +0 -1
- package/dist/hierarchy/hooks/collectionAfterDelete.js +0 -21
- package/dist/hierarchy/hooks/collectionAfterDelete.js.map +0 -1
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts +0 -27
- package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +0 -1
- package/dist/hierarchy/hooks/collectionAfterRead.js +0 -64
- package/dist/hierarchy/hooks/collectionAfterRead.js.map +0 -1
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +0 -19
- package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +0 -1
- package/dist/hierarchy/hooks/collectionBeforeChange.js +0 -90
- package/dist/hierarchy/hooks/collectionBeforeChange.js.map +0 -1
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +0 -15
- package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +0 -1
- package/dist/hierarchy/hooks/collectionBeforeDelete.js +0 -20
- package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +0 -1
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +0 -8
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +0 -108
- package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +0 -1
- package/dist/hierarchy/injectHierarchyButton.d.ts +0 -14
- package/dist/hierarchy/injectHierarchyButton.d.ts.map +0 -1
- package/dist/hierarchy/injectHierarchyButton.js +0 -37
- package/dist/hierarchy/injectHierarchyButton.js.map +0 -1
- package/dist/hierarchy/resolveHierarchyCollections.d.ts +0 -23
- package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +0 -1
- package/dist/hierarchy/resolveHierarchyCollections.js +0 -312
- package/dist/hierarchy/resolveHierarchyCollections.js.map +0 -1
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +0 -14
- package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +0 -1
- package/dist/hierarchy/sanitizeHierarchyCollection.js +0 -112
- package/dist/hierarchy/sanitizeHierarchyCollection.js.map +0 -1
- package/dist/hierarchy/types.d.ts +0 -137
- package/dist/hierarchy/types.d.ts.map +0 -1
- package/dist/hierarchy/types.js +0 -6
- package/dist/hierarchy/types.js.map +0 -1
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +0 -71
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +0 -1
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +0 -65
- package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +0 -1
- package/dist/hierarchy/utils/computePaths.d.ts +0 -31
- package/dist/hierarchy/utils/computePaths.d.ts.map +0 -1
- package/dist/hierarchy/utils/computePaths.js +0 -371
- package/dist/hierarchy/utils/computePaths.js.map +0 -1
- package/dist/hierarchy/utils/findUseAsTitle.d.ts +0 -6
- package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +0 -1
- package/dist/hierarchy/utils/findUseAsTitle.js +0 -72
- package/dist/hierarchy/utils/findUseAsTitle.js.map +0 -1
- package/dist/hierarchy/utils/getAncestors.d.ts +0 -34
- package/dist/hierarchy/utils/getAncestors.d.ts.map +0 -1
- package/dist/hierarchy/utils/getAncestors.js +0 -94
- package/dist/hierarchy/utils/getAncestors.js.map +0 -1
- package/dist/hierarchy/utils/getLocalizedValue.d.ts +0 -30
- package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +0 -1
- package/dist/hierarchy/utils/getLocalizedValue.js +0 -46
- package/dist/hierarchy/utils/getLocalizedValue.js.map +0 -1
- package/dist/hierarchy/utils/getLocalizedValue.spec.js +0 -250
- package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +0 -1
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type { I18n, TFunction } from '@payloadcms/translations'\nimport type DataLoader from 'dataloader'\nimport type { OptionalKeys, RequiredKeys } from 'ts-essentials'\nimport type { URL } from 'url'\n\nimport type {\n DataFromCollectionSlug,\n QueryDraftDataFromCollectionSlug,\n TypeWithID,\n TypeWithTimestamps,\n} from '../collections/config/types.js'\nimport type payload from '../index.js'\nimport type {\n CollectionSlug,\n DataFromGlobalSlug,\n GlobalSlug,\n Payload,\n RequestContext,\n TypedCollectionJoins,\n TypedCollectionSelect,\n TypedFallbackLocale,\n TypedLocale,\n TypedUser,\n} from '../index.js'\nimport type { Operator } from './constants.js'\nexport type {
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type { I18n, TFunction } from '@payloadcms/translations'\nimport type DataLoader from 'dataloader'\nimport type { OptionalKeys, RequiredKeys } from 'ts-essentials'\nimport type { URL } from 'url'\n\nimport type {\n DataFromCollectionSlug,\n QueryDraftDataFromCollectionSlug,\n TypeWithID,\n TypeWithTimestamps,\n} from '../collections/config/types.js'\nimport type payload from '../index.js'\nimport type {\n CollectionSlug,\n DataFromGlobalSlug,\n GlobalSlug,\n Payload,\n RequestContext,\n TypedCollectionJoins,\n TypedCollectionSelect,\n TypedFallbackLocale,\n TypedLocale,\n TypedUser,\n} from '../index.js'\nimport type { Operator } from './constants.js'\nexport type { Payload } from '../index.js'\n\nexport type CustomPayloadRequestProperties = {\n context: RequestContext\n /** The locale that should be used for a field when it is not translated to the requested locale */\n fallbackLocale?: TypedFallbackLocale\n i18n: I18n\n /**\n * The requested locale if specified\n * Only available for localized collections\n *\n * Suppressing warning below as it is a valid use case - won't be an issue if generated types exist\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n locale?: 'all' | TypedLocale\n /**\n * The payload object\n */\n payload: typeof payload\n /**\n * The context in which the request is being made\n */\n payloadAPI: 'GraphQL' | 'local' | 'REST'\n /** Optimized document loader */\n payloadDataLoader: {\n /**\n * Wraps `payload.find` with a cache to deduplicate requests\n * @experimental This is may be replaced by a more robust cache strategy in future versions\n * By calling this method with the same arguments many times in one request, it will only be handled one time\n * const result = await req.payloadDataLoader.find({\n * collection,\n * req,\n * where: findWhere,\n * })\n */\n find: Payload['find']\n } & DataLoader<string, TypeWithID>\n /** Resized versions of the image that was uploaded during this request */\n payloadUploadSizes?: Record<string, Buffer>\n /** Query params on the request */\n query: Record<string, unknown>\n /** Any response headers that are required to be set when a response is sent */\n responseHeaders?: Headers\n /** The route parameters\n * @example\n * /:collection/:id -> /posts/123\n * { collection: 'posts', id: '123' }\n */\n routeParams?: Record<string, unknown>\n /** Translate function - duplicate of i18n.t */\n t: TFunction\n /**\n * Identifier for the database transaction for interactions in a single, all-or-nothing operation.\n * Can also be used to ensure consistency when multiple operations try to create a transaction concurrently on the same request.\n */\n transactionID?: number | Promise<number | string> | string\n /**\n * Used to ensure consistency when multiple operations try to create a transaction concurrently on the same request\n * @deprecated This is not used anywhere, instead `transactionID` is used for the above. Will be removed in next major version.\n */\n transactionIDPromise?: Promise<void>\n /** The signed-in user */\n user: null | TypedUser\n} & Pick<\n URL,\n 'hash' | 'host' | 'href' | 'origin' | 'pathname' | 'port' | 'protocol' | 'search' | 'searchParams'\n>\ntype PayloadRequestData = {\n /**\n * Data from the request body\n *\n * Within Payload operations, i.e. hooks, data will be there\n * BUT in custom endpoints it will not be, you will need to\n * use either:\n * 1. `const data = await req.json()`\n *\n * 2. import { addDataAndFileToRequest } from 'payload'\n * `await addDataAndFileToRequest(req)`\n *\n * You should not expect this object to be the document data. It is the request data.\n * */\n data?: JsonObject\n /** The file on the request, same rules apply as the `data` property */\n file?: {\n /**\n * Context of the file when it was uploaded via client side.\n */\n clientUploadContext?: unknown\n data: Buffer\n mimetype: string\n name: string\n size: number\n tempFilePath?: string\n }\n}\nexport interface PayloadRequest\n extends CustomPayloadRequestProperties,\n Partial<Request>,\n PayloadRequestData {\n headers: Request['headers']\n}\n\nexport type { Operator }\n\n// Makes it so things like passing new Date() will error\nexport type JsonValue = JsonArray | JsonObject | unknown //Date | JsonArray | JsonObject | boolean | null | number | string // TODO: Evaluate proper, strong type for this\n\nexport type JsonArray = Array<JsonValue>\n\nexport interface JsonObject {\n [key: string]: any\n}\n\nexport type WhereField = {\n // any json-serializable value\n [key in Operator]?: JsonValue\n}\n\nexport type Where = {\n [key: string]: Where[] | WhereField\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n and?: Where[]\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n or?: Where[]\n}\n\nexport type Sort = Array<string> | string\n\ntype SerializableValue = boolean | number | object | string\nexport type DefaultValue =\n | ((args: {\n locale?: TypedLocale\n req: PayloadRequest\n user: PayloadRequest['user']\n }) => SerializableValue)\n | SerializableValue\n\n/**\n * Applies pagination for join fields for including collection relationships\n */\nexport type JoinQuery<TSlug extends CollectionSlug = string> =\n TypedCollectionJoins[TSlug] extends Record<string, string>\n ?\n | false\n | Partial<{\n [K in keyof TypedCollectionJoins[TSlug]]:\n | {\n count?: boolean\n limit?: number\n page?: number\n sort?: string\n where?: Where\n }\n | false\n }>\n : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Document = any\n\nexport type Operation = 'create' | 'delete' | 'read' | 'update'\nexport type VersionOperations = 'readVersions'\nexport type AuthOperations = 'unlock'\nexport type AllOperations = AuthOperations | Operation | VersionOperations\n\nexport function docHasTimestamps(doc: any): doc is TypeWithTimestamps {\n return doc?.createdAt && doc?.updatedAt\n}\n\nexport type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N // This is a commonly used trick to detect 'any'\nexport type IsAny<T> = IfAny<T, true, false>\nexport type ReplaceAny<T, DefaultType> = IsAny<T> extends true ? DefaultType : T\n\nexport type SelectIncludeType = {\n [k: string]: SelectIncludeType | true\n}\n\nexport type SelectExcludeType = {\n [k: string]: false | SelectExcludeType\n}\n\nexport type SelectMode = 'exclude' | 'include'\n\nexport type SelectType = SelectExcludeType | SelectIncludeType\n\nexport type ApplyDisableErrors<T, DisableErrors = false> = false extends DisableErrors\n ? T\n : null | T\n\nexport type TransformDataWithSelect<\n Data extends Record<string, any>,\n Select extends SelectType,\n> = Select extends never\n ? Data\n : string extends keyof Select\n ? Data\n : // START Handle types when they aren't generated\n // For example in any package in this repository outside of tests / plugins\n // This stil gives us autocomplete when using include select mode, i.e select: {title :true} returns type {title: any, id: string | number}\n string extends keyof Omit<Data, 'id'>\n ? Select extends SelectIncludeType\n ? {\n [K in Data extends TypeWithID ? 'id' | keyof Select : keyof Select]: K extends 'id'\n ? number | string\n : unknown\n }\n : Data\n : // END Handle types when they aren't generated\n // Handle include mode\n Select extends SelectIncludeType\n ? {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | true\n ? K\n : never\n : // select 'id' always\n K extends 'id'\n ? K\n : never]: Data[K]\n }\n : // Handle exclude mode\n {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | undefined\n ? K\n : never\n : K]: Data[K]\n }\n\nexport type TransformCollectionWithSelect<\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromCollectionSlug<TSlug>, TSelect>\n : DataFromCollectionSlug<TSlug>\n\nexport type DraftTransformCollectionWithSelect<\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<QueryDraftDataFromCollectionSlug<TSlug>, TSelect>\n : QueryDraftDataFromCollectionSlug<TSlug>\n\nexport type TransformGlobalWithSelect<\n TSlug extends GlobalSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromGlobalSlug<TSlug>, TSelect>\n : DataFromGlobalSlug<TSlug>\n\nexport type PopulateType = Partial<TypedCollectionSelect>\n\nexport type ResolvedFilterOptions = { [collection: string]: Where }\n\nexport type PickPreserveOptional<T, K extends keyof T> = Partial<\n Pick<T, Extract<K, OptionalKeys<T>>>\n> &\n Pick<T, Extract<K, RequiredKeys<T>>>\n\nexport type MaybePromise<T> = Promise<T> | T\n"],"names":["docHasTimestamps","doc","createdAt","updatedAt"],"mappings":"AA8LA,OAAO,SAASA,iBAAiBC,GAAQ;IACvC,OAAOA,KAAKC,aAAaD,KAAKE;AAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addDataAndFileToRequest.d.ts","sourceRoot":"","sources":["../../src/utilities/addDataAndFileToRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD,KAAK,uBAAuB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"addDataAndFileToRequest.d.ts","sourceRoot":"","sources":["../../src/utilities/addDataAndFileToRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD,KAAK,uBAAuB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,uBAiGrC,CAAA"}
|
|
@@ -43,7 +43,13 @@ import { processMultipartFormdata } from '../uploads/fetchAPI-multipart/index.js
|
|
|
43
43
|
req.data = JSON.parse(fields._payload);
|
|
44
44
|
}
|
|
45
45
|
if (!req.file && fields?.file && typeof fields?.file === 'string') {
|
|
46
|
-
|
|
46
|
+
let clientUploadContext, collectionSlug, filename, mimeType, size;
|
|
47
|
+
try {
|
|
48
|
+
;
|
|
49
|
+
({ clientUploadContext, collectionSlug, filename, mimeType, size } = JSON.parse(fields.file));
|
|
50
|
+
} catch {
|
|
51
|
+
throw new APIError('A file name is required.', 400);
|
|
52
|
+
}
|
|
47
53
|
const uploadConfig = req.payload.collections[collectionSlug].config.upload;
|
|
48
54
|
if (!uploadConfig.handlers) {
|
|
49
55
|
throw new APIError('uploadConfig.handlers is not present for ' + collectionSlug);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/addDataAndFileToRequest.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { APIError } from '../errors/APIError.js'\nimport { processMultipartFormdata } from '../uploads/fetchAPI-multipart/index.js'\n\ntype AddDataAndFileToRequest = (req: PayloadRequest) => Promise<void>\n\n/**\n * Mutates the Request, appending 'data' and 'file' if found\n */\nexport const addDataAndFileToRequest: AddDataAndFileToRequest = async (req) => {\n const { body, headers, method, payload } = req\n\n if (method && ['PATCH', 'POST', 'PUT'].includes(method.toUpperCase()) && body) {\n const [contentType] = (headers.get('Content-Type') || '').split(';', 1)\n const bodyByteSize = parseInt(req.headers.get('Content-Length') || '0', 10)\n\n if (contentType === 'application/json') {\n try {\n const text = await req.text?.()\n const data = text ? JSON.parse(text) : {}\n req.data = data\n // @ts-expect-error attach json method to request\n req.json = () => Promise.resolve(data)\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new APIError('Invalid JSON', 400)\n }\n req.payload.logger.error(error)\n throw error\n }\n } else if (bodyByteSize && contentType?.includes('multipart/')) {\n const { error, fields, files } = await processMultipartFormdata({\n options: {\n ...(payload.config.bodyParser || {}),\n ...(payload.config.upload || {}),\n },\n request: req as Request,\n })\n\n if (error) {\n throw new APIError(error.message)\n }\n\n if (files?.file) {\n req.file = files.file\n }\n\n if (fields?._payload && typeof fields._payload === 'string') {\n req.data = JSON.parse(fields._payload)\n }\n\n if (!req.file && fields?.file && typeof fields?.file === 'string') {\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/addDataAndFileToRequest.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { APIError } from '../errors/APIError.js'\nimport { processMultipartFormdata } from '../uploads/fetchAPI-multipart/index.js'\n\ntype AddDataAndFileToRequest = (req: PayloadRequest) => Promise<void>\n\n/**\n * Mutates the Request, appending 'data' and 'file' if found\n */\nexport const addDataAndFileToRequest: AddDataAndFileToRequest = async (req) => {\n const { body, headers, method, payload } = req\n\n if (method && ['PATCH', 'POST', 'PUT'].includes(method.toUpperCase()) && body) {\n const [contentType] = (headers.get('Content-Type') || '').split(';', 1)\n const bodyByteSize = parseInt(req.headers.get('Content-Length') || '0', 10)\n\n if (contentType === 'application/json') {\n try {\n const text = await req.text?.()\n const data = text ? JSON.parse(text) : {}\n req.data = data\n // @ts-expect-error attach json method to request\n req.json = () => Promise.resolve(data)\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new APIError('Invalid JSON', 400)\n }\n req.payload.logger.error(error)\n throw error\n }\n } else if (bodyByteSize && contentType?.includes('multipart/')) {\n const { error, fields, files } = await processMultipartFormdata({\n options: {\n ...(payload.config.bodyParser || {}),\n ...(payload.config.upload || {}),\n },\n request: req as Request,\n })\n\n if (error) {\n throw new APIError(error.message)\n }\n\n if (files?.file) {\n req.file = files.file\n }\n\n if (fields?._payload && typeof fields._payload === 'string') {\n req.data = JSON.parse(fields._payload)\n }\n\n if (!req.file && fields?.file && typeof fields?.file === 'string') {\n let clientUploadContext, collectionSlug, filename, mimeType, size\n try {\n ;({ clientUploadContext, collectionSlug, filename, mimeType, size } = JSON.parse(\n fields.file,\n ))\n } catch {\n throw new APIError('A file name is required.', 400)\n }\n const uploadConfig = req.payload.collections[collectionSlug]!.config.upload\n\n if (!uploadConfig.handlers) {\n throw new APIError('uploadConfig.handlers is not present for ' + collectionSlug)\n }\n\n let response: null | Response = null\n let error: unknown\n\n for (const handler of uploadConfig.handlers) {\n try {\n const result = await handler(req, {\n doc: null!,\n params: {\n clientUploadContext, // Pass additional specific to adapters context returned from UploadHandler, then staticHandler can use them.\n collection: collectionSlug,\n filename,\n },\n })\n if (result) {\n response = result\n }\n // If we couldn't get the file from that handler, save the error and try other.\n } catch (err) {\n error = err\n }\n }\n\n if (!response) {\n if (error) {\n payload.logger.error(error)\n }\n\n throw new APIError('Expected response from the upload handler.')\n }\n\n req.file = {\n name: filename,\n clientUploadContext,\n data: Buffer.from(await response.arrayBuffer()),\n mimetype: response.headers.get('Content-Type') || mimeType,\n size,\n }\n }\n }\n }\n}\n"],"names":["APIError","processMultipartFormdata","addDataAndFileToRequest","req","body","headers","method","payload","includes","toUpperCase","contentType","get","split","bodyByteSize","parseInt","text","data","JSON","parse","json","Promise","resolve","error","SyntaxError","logger","fields","files","options","config","bodyParser","upload","request","message","file","_payload","clientUploadContext","collectionSlug","filename","mimeType","size","uploadConfig","collections","handlers","response","handler","result","doc","params","collection","err","name","Buffer","from","arrayBuffer","mimetype"],"mappings":"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"}
|
|
@@ -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,WAAWC,EAAE;AACtB,EAAC"}
|
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
import type { Config } from '../config/types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Use this for both admin routes (`adminRoute`) and API routes (`apiRoute`).
|
|
5
|
-
*
|
|
3
|
+
* This function builds correct URLs for admin panel routing.
|
|
6
4
|
* Its primary responsibilities are:
|
|
7
|
-
* 1. Read from your `routes.admin`
|
|
5
|
+
* 1. Read from your `routes.admin` config and appropriately handle `"/"` admin paths
|
|
8
6
|
* 2. Prepend the `basePath` from your Next.js config, if specified
|
|
9
7
|
* 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 })
|
|
19
8
|
*/
|
|
20
9
|
type BaseFormatURLArgs = {
|
|
21
10
|
/**
|
|
@@ -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;;;;;;GAMG;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,SAAU,aAAa,KAAG,MAyBpD,CAAA"}
|
|
@@ -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 * This function builds correct URLs for admin panel routing.\n * Its primary responsibilities are:\n * 1. Read from your `routes.admin` config and appropriately handle `\"/\"` admin paths\n * 2. Prepend the `basePath` from your Next.js config, if specified\n * 3. Return relative or absolute URLs, as needed\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":"AAmCA,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAU/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACtC,OAAO,CAAC,UAAU,CAAC,CAAA;AACtB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GACnC,OAAO,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -4,9 +4,10 @@ import { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js';
|
|
|
4
4
|
import { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js';
|
|
5
5
|
import { enforceMaxVersions } from './enforceMaxVersions.js';
|
|
6
6
|
import { saveSnapshot } from './saveSnapshot.js';
|
|
7
|
-
|
|
7
|
+
import { updateLatestVersion } from './updateLatestVersion.js';
|
|
8
|
+
export async function saveVersion({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, returning, select, snapshot, unpublish }) {
|
|
8
9
|
let result;
|
|
9
|
-
let
|
|
10
|
+
let createdNewVersion = false;
|
|
10
11
|
const now = new Date().toISOString();
|
|
11
12
|
const versionData = deepCopyObjectSimple(docWithLocales);
|
|
12
13
|
if ((collection?.timestamps || global) && draft) {
|
|
@@ -16,71 +17,20 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
|
|
|
16
17
|
delete versionData._id;
|
|
17
18
|
}
|
|
18
19
|
try {
|
|
19
|
-
if (autosave) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
if (unpublish || autosave) {
|
|
21
|
+
result = await updateLatestVersion({
|
|
22
|
+
id,
|
|
23
|
+
collection,
|
|
24
|
+
global,
|
|
25
|
+
now,
|
|
26
|
+
payload,
|
|
24
27
|
req,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
;
|
|
29
|
-
({ docs } = await payload.db.findVersions({
|
|
30
|
-
...findVersionArgs,
|
|
31
|
-
collection: collection.slug,
|
|
32
|
-
limit: 1,
|
|
33
|
-
pagination: false,
|
|
34
|
-
req,
|
|
35
|
-
where: {
|
|
36
|
-
parent: {
|
|
37
|
-
equals: id
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}));
|
|
41
|
-
} else {
|
|
42
|
-
;
|
|
43
|
-
({ docs } = await payload.db.findGlobalVersions({
|
|
44
|
-
...findVersionArgs,
|
|
45
|
-
global: global.slug,
|
|
46
|
-
limit: 1,
|
|
47
|
-
pagination: false,
|
|
48
|
-
req
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
const [latestVersion] = docs;
|
|
52
|
-
// overwrite the latest version if it's set to autosave
|
|
53
|
-
if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {
|
|
54
|
-
createNewVersion = false;
|
|
55
|
-
const updateVersionArgs = {
|
|
56
|
-
id: latestVersion.id,
|
|
57
|
-
req,
|
|
58
|
-
versionData: {
|
|
59
|
-
createdAt: new Date(latestVersion.createdAt).toISOString(),
|
|
60
|
-
latest: true,
|
|
61
|
-
parent: id,
|
|
62
|
-
updatedAt: now,
|
|
63
|
-
version: {
|
|
64
|
-
...versionData
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
if (collection) {
|
|
69
|
-
result = await payload.db.updateVersion({
|
|
70
|
-
...updateVersionArgs,
|
|
71
|
-
collection: collection.slug,
|
|
72
|
-
req
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
result = await payload.db.updateGlobalVersion({
|
|
76
|
-
...updateVersionArgs,
|
|
77
|
-
global: global.slug,
|
|
78
|
-
req
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
28
|
+
shouldUpdate: autosave ? (v)=>'autosave' in v && v.autosave === true : undefined,
|
|
29
|
+
versionData
|
|
30
|
+
});
|
|
82
31
|
}
|
|
83
|
-
if (
|
|
32
|
+
if (!result) {
|
|
33
|
+
createdNewVersion = true;
|
|
84
34
|
const createVersionArgs = {
|
|
85
35
|
autosave: Boolean(autosave),
|
|
86
36
|
collectionSlug: undefined,
|
|
@@ -133,7 +83,7 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
|
|
|
133
83
|
return undefined;
|
|
134
84
|
}
|
|
135
85
|
const max = getVersionsMax(collection || global);
|
|
136
|
-
if (
|
|
86
|
+
if (createdNewVersion && max > 0) {
|
|
137
87
|
await enforceMaxVersions({
|
|
138
88
|
id,
|
|
139
89
|
collection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n returning?: boolean\n select?: SelectType\n snapshot?: any\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n returning,\n select,\n snapshot,\n}: Args<TData>): Promise<JsonObject | null> {\n let result: JsonObject | undefined\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if ((collection?.timestamps || global) && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n limit: 1,\n pagination: false,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n limit: 1,\n pagination: false,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {\n createNewVersion = false\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n result = await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n if (returning === false) {\n return null\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","result","createNewVersion","now","Date","toISOString","versionData","timestamps","updatedAt","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","updateVersionArgs","createdAt","latest","version","updateVersion","updateGlobalVersion","createVersionArgs","Boolean","collectionSlug","undefined","globalSlug","publishedLocale","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\nimport { updateLatestVersion } from './updateLatestVersion.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n returning?: boolean\n select?: SelectType\n snapshot?: any\n unpublish?: boolean\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n returning,\n select,\n snapshot,\n unpublish,\n}: Args<TData>): Promise<JsonObject | null> {\n let result: JsonObject | undefined\n let createdNewVersion = false\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if ((collection?.timestamps || global) && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (unpublish || autosave) {\n result = await updateLatestVersion({\n id,\n collection,\n global,\n now,\n payload,\n req,\n shouldUpdate: autosave ? (v) => 'autosave' in v && v.autosave === true : undefined,\n versionData,\n })\n }\n\n if (!result) {\n createdNewVersion = true\n\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createdNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n if (returning === false) {\n return null\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","updateLatestVersion","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","unpublish","result","createdNewVersion","now","Date","toISOString","versionData","timestamps","updatedAt","_id","shouldUpdate","v","undefined","createVersionArgs","Boolean","collectionSlug","createdAt","globalSlug","parent","publishedLocale","slug","db","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion","version"],"mappings":"AAKA,SAASA,oBAAoB,QAAQ,cAAa;AAClD,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,sBAAsB,QAAQ,yCAAwC;AAC/E,SAASC,oBAAoB,QAAQ,mCAAkC;AACvE,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AA4B9D,OAAO,eAAeC,YAAmD,EACvEC,EAAE,EACFC,QAAQ,EACRC,UAAU,EACVC,cAAc,EACdC,KAAK,EACLC,MAAM,EACNC,SAAS,EACTC,OAAO,EACPC,qBAAqB,EACrBC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,QAAQ,EACRC,SAAS,EACG;IACZ,IAAIC;IACJ,IAAIC,oBAAoB;IACxB,MAAMC,MAAM,IAAIC,OAAOC,WAAW;IAClC,MAAMC,cAGM3B,qBAAqBW;IAEjC,IAAI,AAACD,CAAAA,YAAYkB,cAAcf,MAAK,KAAMD,OAAO;QAC/Ce,YAAYE,SAAS,GAAGL;IAC1B;IAEA,IAAIG,YAAYG,GAAG,EAAE;QACnB,OAAOH,YAAYG,GAAG;IACxB;IAEA,IAAI;QACF,IAAIT,aAAaZ,UAAU;YACzBa,SAAS,MAAMhB,oBAAoB;gBACjCE;gBACAE;gBACAG;gBACAW;gBACAT;gBACAE;gBACAc,cAActB,WAAW,CAACuB,IAAM,cAAcA,KAAKA,EAAEvB,QAAQ,KAAK,OAAOwB;gBACzEN;YACF;QACF;QAEA,IAAI,CAACL,QAAQ;YACXC,oBAAoB;YAEpB,MAAMW,oBAAoB;gBACxBzB,UAAU0B,QAAQ1B;gBAClB2B,gBAAgBH;gBAChBI,WAAWvB,cAAc,mBAAmBa,YAAYU,SAAS,GAAGb;gBACpEc,YAAYL;gBACZM,QAAQ7B,aAAaF,KAAKyB;gBAC1BO,iBAAiBxB,yBAAyBiB;gBAC1ChB;gBACAC;gBACAC,QAAQhB,qBAAqB;oBAAEgB;gBAAO;gBACtCU,WAAWL;gBACXG;YACF;YAEA,IAAIjB,YAAY;gBACdwB,kBAAkBE,cAAc,GAAG1B,WAAW+B,IAAI;gBAClDnB,SAAS,MAAMP,QAAQ2B,EAAE,CAACC,aAAa,CAACT;YAC1C;YAEA,IAAIrB,QAAQ;gBACVqB,kBAAkBI,UAAU,GAAGzB,OAAO4B,IAAI;gBAC1CnB,SAAS,MAAMP,QAAQ2B,EAAE,CAACE,mBAAmB,CAACV;YAChD;YAEA,IAAId,UAAU;gBACZ,MAAMf,aAAoB;oBACxBG;oBACAC;oBACAC;oBACAmC,MAAMzB;oBACNP;oBACAE;oBACAC;oBACAC;oBACAE;gBACF;YACF;QACF;IACF,EAAE,OAAO2B,KAAK;QACZ,IAAIC;QAEJ,IAAIrC,YAAY;YACdqC,eAAe,CAAC,kDAAkD,EAAE,OAAOrC,WAAWsC,MAAM,CAACC,QAAQ,KAAK,WAAWvC,WAAWsC,MAAM,CAACC,QAAQ,GAAGvC,WAAW+B,IAAI,CAAC,SAAS,EAAEjC,GAAG,CAAC,CAAC;QACpL;QACA,IAAIK,QAAQ;YACVkC,eAAe,CAAC,yDAAyD,EAAE,OAAOlC,OAAOqC,KAAK,KAAK,WAAWrC,OAAOqC,KAAK,GAAGrC,OAAO4B,IAAI,CAAC,CAAC,CAAC;QAC7I;QACA1B,QAAQoC,MAAM,CAACC,KAAK,CAAC;YAAEN;YAAKO,KAAKN;QAAa;QAC9C,OAAOd;IACT;IAEA,MAAMqB,MAAMrD,eAAeS,cAAcG;IAEzC,IAAIU,qBAAqB+B,MAAM,GAAG;QAChC,MAAMlD,mBAAmB;YACvBI;YACAE;YACAG;YACAyC;YACAvC;YACAE;QACF;IACF;IACA,IAAIC,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,IAAIqC,iBAAiB,AAACjC,OAAekC,OAAO;IAE5CD,iBAAiBrD,uBAAuBqD;IACxCA,eAAe/C,EAAE,GAAG,AAACc,OAAeiB,MAAM;IAE1C,OAAOgB;AACT"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SanitizedCollectionConfig } from '../collections/config/types.js';
|
|
2
|
+
import type { SanitizedGlobalConfig } from '../globals/config/types.js';
|
|
3
|
+
import type { Payload } from '../index.js';
|
|
4
|
+
import type { JsonObject, PayloadRequest } from '../types/index.js';
|
|
5
|
+
type Args<TData extends JsonObject> = {
|
|
6
|
+
collection?: SanitizedCollectionConfig;
|
|
7
|
+
global?: SanitizedGlobalConfig;
|
|
8
|
+
id?: number | string;
|
|
9
|
+
now: string;
|
|
10
|
+
payload: Payload;
|
|
11
|
+
req?: PayloadRequest;
|
|
12
|
+
shouldUpdate?: (latestVersion: JsonObject) => boolean;
|
|
13
|
+
versionData: TData;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Finds the latest version and updates it in place if `shouldUpdate` returns true.
|
|
17
|
+
* Used by both the unpublish and autosave paths in `saveVersion` to avoid creating
|
|
18
|
+
* a redundant new version.
|
|
19
|
+
*
|
|
20
|
+
* Returns the updated version result, or `undefined` if no update was performed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateLatestVersion<TData extends JsonObject>({ id, collection, global, now, payload, req, shouldUpdate, versionData, }: Args<TData>): Promise<JsonObject | undefined>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=updateLatestVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateLatestVersion.d.ts","sourceRoot":"","sources":["../../src/versions/updateLatestVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEnE,KAAK,IAAI,CAAC,KAAK,SAAS,UAAU,IAAI;IACpC,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK,OAAO,CAAA;IACrD,WAAW,EAAE,KAAK,CAAA;CACnB,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,SAAS,UAAU,EAAE,EAClE,EAAE,EACF,UAAU,EACV,MAAM,EACN,GAAG,EACH,OAAO,EACP,GAAG,EACH,YAAyB,EACzB,WAAW,GACZ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA2D/C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the latest version and updates it in place if `shouldUpdate` returns true.
|
|
3
|
+
* Used by both the unpublish and autosave paths in `saveVersion` to avoid creating
|
|
4
|
+
* a redundant new version.
|
|
5
|
+
*
|
|
6
|
+
* Returns the updated version result, or `undefined` if no update was performed.
|
|
7
|
+
*/ export async function updateLatestVersion({ id, collection, global, now, payload, req, shouldUpdate = ()=>true, versionData }) {
|
|
8
|
+
let docs;
|
|
9
|
+
const findVersionArgs = {
|
|
10
|
+
limit: 1,
|
|
11
|
+
pagination: false,
|
|
12
|
+
req,
|
|
13
|
+
sort: '-updatedAt'
|
|
14
|
+
};
|
|
15
|
+
if (collection) {
|
|
16
|
+
;
|
|
17
|
+
({ docs } = await payload.db.findVersions({
|
|
18
|
+
...findVersionArgs,
|
|
19
|
+
collection: collection.slug,
|
|
20
|
+
where: {
|
|
21
|
+
parent: {
|
|
22
|
+
equals: id
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
} else {
|
|
27
|
+
;
|
|
28
|
+
({ docs } = await payload.db.findGlobalVersions({
|
|
29
|
+
...findVersionArgs,
|
|
30
|
+
global: global.slug
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
const [latestVersion] = docs;
|
|
34
|
+
if (!latestVersion || !shouldUpdate(latestVersion)) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const updateVersionArgs = {
|
|
38
|
+
id: latestVersion.id,
|
|
39
|
+
req,
|
|
40
|
+
versionData: {
|
|
41
|
+
createdAt: new Date(latestVersion.createdAt).toISOString(),
|
|
42
|
+
latest: true,
|
|
43
|
+
parent: id,
|
|
44
|
+
updatedAt: now,
|
|
45
|
+
version: {
|
|
46
|
+
...versionData
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
if (collection) {
|
|
51
|
+
return await payload.db.updateVersion({
|
|
52
|
+
...updateVersionArgs,
|
|
53
|
+
collection: collection.slug,
|
|
54
|
+
req
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return await payload.db.updateGlobalVersion({
|
|
58
|
+
...updateVersionArgs,
|
|
59
|
+
global: global.slug,
|
|
60
|
+
req
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=updateLatestVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/versions/updateLatestVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest } from '../types/index.js'\n\ntype Args<TData extends JsonObject> = {\n collection?: SanitizedCollectionConfig\n global?: SanitizedGlobalConfig\n id?: number | string\n now: string\n payload: Payload\n req?: PayloadRequest\n shouldUpdate?: (latestVersion: JsonObject) => boolean\n versionData: TData\n}\n\n/**\n * Finds the latest version and updates it in place if `shouldUpdate` returns true.\n * Used by both the unpublish and autosave paths in `saveVersion` to avoid creating\n * a redundant new version.\n *\n * Returns the updated version result, or `undefined` if no update was performed.\n */\nexport async function updateLatestVersion<TData extends JsonObject>({\n id,\n collection,\n global,\n now,\n payload,\n req,\n shouldUpdate = () => true,\n versionData,\n}: Args<TData>): Promise<JsonObject | undefined> {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n }))\n }\n\n const [latestVersion] = docs\n\n if (!latestVersion || !shouldUpdate(latestVersion)) {\n return undefined\n }\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n return await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n }\n\n return await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n}\n"],"names":["updateLatestVersion","id","collection","global","now","payload","req","shouldUpdate","versionData","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","undefined","updateVersionArgs","createdAt","Date","toISOString","latest","updatedAt","version","updateVersion","updateGlobalVersion"],"mappings":"AAgBA;;;;;;CAMC,GACD,OAAO,eAAeA,oBAA8C,EAClEC,EAAE,EACFC,UAAU,EACVC,MAAM,EACNC,GAAG,EACHC,OAAO,EACPC,GAAG,EACHC,eAAe,IAAM,IAAI,EACzBC,WAAW,EACC;IACZ,IAAIC;IACJ,MAAMC,kBAAkB;QACtBC,OAAO;QACPC,YAAY;QACZN;QACAO,MAAM;IACR;IAEA,IAAIX,YAAY;;QACZ,CAAA,EAAEO,IAAI,EAAE,GAAG,MAAMJ,QAAQS,EAAE,CAACC,YAAY,CAAQ;YAChD,GAAGL,eAAe;YAClBR,YAAYA,WAAWc,IAAI;YAC3BC,OAAO;gBACLC,QAAQ;oBACNC,QAAQlB;gBACV;YACF;QACF,EAAC;IACH,OAAO;;QACH,CAAA,EAAEQ,IAAI,EAAE,GAAG,MAAMJ,QAAQS,EAAE,CAACM,kBAAkB,CAAQ;YACtD,GAAGV,eAAe;YAClBP,QAAQA,OAAQa,IAAI;QACtB,EAAC;IACH;IAEA,MAAM,CAACK,cAAc,GAAGZ;IAExB,IAAI,CAACY,iBAAiB,CAACd,aAAac,gBAAgB;QAClD,OAAOC;IACT;IAEA,MAAMC,oBAAoB;QACxBtB,IAAIoB,cAAcpB,EAAE;QACpBK;QACAE,aAAa;YACXgB,WAAW,IAAIC,KAAKJ,cAAcG,SAAS,EAAEE,WAAW;YACxDC,QAAQ;YACRT,QAAQjB;YACR2B,WAAWxB;YACXyB,SAAS;gBACP,GAAGrB,WAAW;YAChB;QACF;IACF;IAEA,IAAIN,YAAY;QACd,OAAO,MAAMG,QAAQS,EAAE,CAACgB,aAAa,CAAQ;YAC3C,GAAGP,iBAAiB;YACpBrB,YAAYA,WAAWc,IAAI;YAC3BV;QACF;IACF;IAEA,OAAO,MAAMD,QAAQS,EAAE,CAACiB,mBAAmB,CAAQ;QACjD,GAAGR,iBAAiB;QACpBpB,QAAQA,OAAQa,IAAI;QACpBV;IACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payload",
|
|
3
|
-
"version": "3.80.0
|
|
3
|
+
"version": "3.80.0",
|
|
4
4
|
"description": "Node, React, Headless CMS and Application Framework built on Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"admin panel",
|
|
@@ -112,10 +112,10 @@
|
|
|
112
112
|
"sanitize-filename": "1.6.3",
|
|
113
113
|
"ts-essentials": "10.0.3",
|
|
114
114
|
"tsx": "4.21.0",
|
|
115
|
-
"undici": "7.
|
|
115
|
+
"undici": "7.24.4",
|
|
116
116
|
"uuid": "10.0.0",
|
|
117
117
|
"ws": "^8.16.0",
|
|
118
|
-
"@payloadcms/translations": "3.80.0
|
|
118
|
+
"@payloadcms/translations": "3.80.0"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
121
|
"@hyrious/esbuild-plugin-commonjs": "0.2.6",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"graphql-http": "^1.22.0",
|
|
134
134
|
"react-datepicker": "7.6.0",
|
|
135
135
|
"rimraf": "6.0.1",
|
|
136
|
-
"rollup": "4.
|
|
136
|
+
"rollup": "4.59.0",
|
|
137
137
|
"rollup-plugin-dts": "6.2.3",
|
|
138
138
|
"sharp": "0.32.6",
|
|
139
139
|
"@payloadcms/eslint-config": "3.28.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchyList.d.ts","sourceRoot":"","sources":["../../../src/admin/views/hierarchyList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,cAAc,EAAE,MAAM,GAAG;QACxB,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,aAAa,CAAA;KACtB,CAAA;CACF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/views/hierarchyList.ts"],"sourcesContent":["import type { PaginatedDocs } from '../../database/types.js'\n\nexport type RelatedDocumentsGrouped = {\n [collectionSlug: string]: {\n hasMany: boolean\n label: string\n result: PaginatedDocs\n }\n}\n"],"names":[],"mappings":"AAEA,WAMC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { CollectionConfig } from '../collections/config/types.js';
|
|
2
|
-
export declare const addHierarchyToCollection: ({ collectionConfig, parentFieldName, slugPathFieldName, titlePathFieldName, }: {
|
|
3
|
-
collectionConfig: CollectionConfig;
|
|
4
|
-
parentFieldName: string;
|
|
5
|
-
slugPathFieldName: string;
|
|
6
|
-
titlePathFieldName: string;
|
|
7
|
-
}) => void;
|
|
8
|
-
//# sourceMappingURL=addHierarchyToCollection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addHierarchyToCollection.d.ts","sourceRoot":"","sources":["../../src/hierarchy/addHierarchyToCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOtE,eAAO,MAAM,wBAAwB,kFAKlC;IACD,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,SAqDA,CAAA"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { hierarchyCollectionAfterRead } from './hooks/collectionAfterRead.js';
|
|
2
|
-
import { hierarchyCollectionBeforeChange } from './hooks/collectionBeforeChange.js';
|
|
3
|
-
import { hierarchyCollectionBeforeDelete } from './hooks/collectionBeforeDelete.js';
|
|
4
|
-
import { findUseAsTitleField } from './utils/findUseAsTitle.js';
|
|
5
|
-
export const addHierarchyToCollection = ({ collectionConfig, parentFieldName, slugPathFieldName, titlePathFieldName })=>{
|
|
6
|
-
const { titleFieldName } = findUseAsTitleField(collectionConfig);
|
|
7
|
-
// Add virtual path fields (computed in afterRead)
|
|
8
|
-
collectionConfig.fields.push({
|
|
9
|
-
name: slugPathFieldName,
|
|
10
|
-
type: 'text',
|
|
11
|
-
admin: {
|
|
12
|
-
readOnly: true
|
|
13
|
-
},
|
|
14
|
-
index: true,
|
|
15
|
-
label: 'Slug Path',
|
|
16
|
-
virtual: true
|
|
17
|
-
}, {
|
|
18
|
-
name: titlePathFieldName,
|
|
19
|
-
type: 'text',
|
|
20
|
-
admin: {
|
|
21
|
-
readOnly: true
|
|
22
|
-
},
|
|
23
|
-
index: true,
|
|
24
|
-
label: 'Title Path',
|
|
25
|
-
virtual: true
|
|
26
|
-
});
|
|
27
|
-
if (!collectionConfig.admin) {
|
|
28
|
-
collectionConfig.admin = {};
|
|
29
|
-
}
|
|
30
|
-
if (!collectionConfig.admin.listSearchableFields) {
|
|
31
|
-
collectionConfig.admin.listSearchableFields = [
|
|
32
|
-
titleFieldName
|
|
33
|
-
];
|
|
34
|
-
} else if (!collectionConfig.admin.listSearchableFields.includes(titleFieldName)) {
|
|
35
|
-
collectionConfig.admin.listSearchableFields.push(titleFieldName);
|
|
36
|
-
}
|
|
37
|
-
collectionConfig.hooks = {
|
|
38
|
-
...collectionConfig.hooks || {},
|
|
39
|
-
afterRead: [
|
|
40
|
-
...collectionConfig.hooks?.afterRead || [],
|
|
41
|
-
hierarchyCollectionAfterRead({
|
|
42
|
-
parentFieldName,
|
|
43
|
-
slugPathFieldName,
|
|
44
|
-
titlePathFieldName
|
|
45
|
-
})
|
|
46
|
-
],
|
|
47
|
-
beforeChange: [
|
|
48
|
-
...collectionConfig.hooks?.beforeChange || [],
|
|
49
|
-
hierarchyCollectionBeforeChange({
|
|
50
|
-
parentFieldName
|
|
51
|
-
})
|
|
52
|
-
],
|
|
53
|
-
beforeDelete: [
|
|
54
|
-
...collectionConfig.hooks?.beforeDelete || [],
|
|
55
|
-
hierarchyCollectionBeforeDelete({
|
|
56
|
-
parentFieldName
|
|
57
|
-
})
|
|
58
|
-
]
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
//# sourceMappingURL=addHierarchyToCollection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hierarchy/addHierarchyToCollection.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\n\nimport { hierarchyCollectionAfterRead } from './hooks/collectionAfterRead.js'\nimport { hierarchyCollectionBeforeChange } from './hooks/collectionBeforeChange.js'\nimport { hierarchyCollectionBeforeDelete } from './hooks/collectionBeforeDelete.js'\nimport { findUseAsTitleField } from './utils/findUseAsTitle.js'\n\nexport const addHierarchyToCollection = ({\n collectionConfig,\n parentFieldName,\n slugPathFieldName,\n titlePathFieldName,\n}: {\n collectionConfig: CollectionConfig\n parentFieldName: string\n slugPathFieldName: string\n titlePathFieldName: string\n}) => {\n const { titleFieldName } = findUseAsTitleField(collectionConfig)\n\n // Add virtual path fields (computed in afterRead)\n collectionConfig.fields.push(\n {\n name: slugPathFieldName,\n type: 'text',\n admin: {\n readOnly: true,\n // hidden: true,\n },\n index: true,\n label: 'Slug Path',\n virtual: true,\n },\n {\n name: titlePathFieldName,\n type: 'text',\n admin: {\n readOnly: true,\n // hidden: true,\n },\n index: true,\n label: 'Title Path',\n virtual: true,\n },\n )\n\n if (!collectionConfig.admin) {\n collectionConfig.admin = {}\n }\n if (!collectionConfig.admin.listSearchableFields) {\n collectionConfig.admin.listSearchableFields = [titleFieldName]\n } else if (!collectionConfig.admin.listSearchableFields.includes(titleFieldName)) {\n collectionConfig.admin.listSearchableFields.push(titleFieldName)\n }\n\n collectionConfig.hooks = {\n ...(collectionConfig.hooks || {}),\n afterRead: [\n ...(collectionConfig.hooks?.afterRead || []),\n hierarchyCollectionAfterRead({ parentFieldName, slugPathFieldName, titlePathFieldName }),\n ],\n beforeChange: [\n ...(collectionConfig.hooks?.beforeChange || []),\n hierarchyCollectionBeforeChange({ parentFieldName }),\n ],\n beforeDelete: [\n ...(collectionConfig.hooks?.beforeDelete || []),\n hierarchyCollectionBeforeDelete({ parentFieldName }),\n ],\n }\n}\n"],"names":["hierarchyCollectionAfterRead","hierarchyCollectionBeforeChange","hierarchyCollectionBeforeDelete","findUseAsTitleField","addHierarchyToCollection","collectionConfig","parentFieldName","slugPathFieldName","titlePathFieldName","titleFieldName","fields","push","name","type","admin","readOnly","index","label","virtual","listSearchableFields","includes","hooks","afterRead","beforeChange","beforeDelete"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,iCAAgC;AAC7E,SAASC,+BAA+B,QAAQ,oCAAmC;AACnF,SAASC,+BAA+B,QAAQ,oCAAmC;AACnF,SAASC,mBAAmB,QAAQ,4BAA2B;AAE/D,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,gBAAgB,EAChBC,eAAe,EACfC,iBAAiB,EACjBC,kBAAkB,EAMnB;IACC,MAAM,EAAEC,cAAc,EAAE,GAAGN,oBAAoBE;IAE/C,kDAAkD;IAClDA,iBAAiBK,MAAM,CAACC,IAAI,CAC1B;QACEC,MAAML;QACNM,MAAM;QACNC,OAAO;YACLC,UAAU;QAEZ;QACAC,OAAO;QACPC,OAAO;QACPC,SAAS;IACX,GACA;QACEN,MAAMJ;QACNK,MAAM;QACNC,OAAO;YACLC,UAAU;QAEZ;QACAC,OAAO;QACPC,OAAO;QACPC,SAAS;IACX;IAGF,IAAI,CAACb,iBAAiBS,KAAK,EAAE;QAC3BT,iBAAiBS,KAAK,GAAG,CAAC;IAC5B;IACA,IAAI,CAACT,iBAAiBS,KAAK,CAACK,oBAAoB,EAAE;QAChDd,iBAAiBS,KAAK,CAACK,oBAAoB,GAAG;YAACV;SAAe;IAChE,OAAO,IAAI,CAACJ,iBAAiBS,KAAK,CAACK,oBAAoB,CAACC,QAAQ,CAACX,iBAAiB;QAChFJ,iBAAiBS,KAAK,CAACK,oBAAoB,CAACR,IAAI,CAACF;IACnD;IAEAJ,iBAAiBgB,KAAK,GAAG;QACvB,GAAIhB,iBAAiBgB,KAAK,IAAI,CAAC,CAAC;QAChCC,WAAW;eACLjB,iBAAiBgB,KAAK,EAAEC,aAAa,EAAE;YAC3CtB,6BAA6B;gBAAEM;gBAAiBC;gBAAmBC;YAAmB;SACvF;QACDe,cAAc;eACRlB,iBAAiBgB,KAAK,EAAEE,gBAAgB,EAAE;YAC9CtB,gCAAgC;gBAAEK;YAAgB;SACnD;QACDkB,cAAc;eACRnB,iBAAiBgB,KAAK,EAAEG,gBAAgB,EAAE;YAC9CtB,gCAAgC;gBAAEI;YAAgB;SACnD;IACH;AACF,EAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { SingleRelationshipField } from '../fields/config/types.js';
|
|
2
|
-
export declare const buildParentField: ({ collectionSlug, injectHeaderButton, overrides, parentFieldName, }: {
|
|
3
|
-
collectionSlug: string;
|
|
4
|
-
/**
|
|
5
|
-
* When true, uses NullField and injects a header button for parent selection
|
|
6
|
-
*/
|
|
7
|
-
injectHeaderButton?: boolean;
|
|
8
|
-
overrides?: Partial<SingleRelationshipField>;
|
|
9
|
-
parentFieldName: string;
|
|
10
|
-
}) => SingleRelationshipField;
|
|
11
|
-
//# sourceMappingURL=buildParentField.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildParentField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/buildParentField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,eAAO,MAAM,gBAAgB,wEAK1B;IACD,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB,KAAG,uBA0CH,CAAA"}
|