payload 3.66.0 → 3.67.0-internal.1ea538b
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/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.js +7 -12
- package/dist/auth/operations/forgotPassword.js.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +7 -12
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +7 -12
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +7 -12
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/unlock.js +14 -1
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +2 -0
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +7 -19
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/count.d.ts.map +1 -1
- package/dist/collections/operations/count.js +7 -12
- package/dist/collections/operations/count.js.map +1 -1
- package/dist/collections/operations/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/countVersions.js +7 -12
- package/dist/collections/operations/countVersions.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +10 -14
- 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 +9 -13
- 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 +9 -13
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +9 -13
- 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 +22 -26
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +7 -12
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +20 -1
- 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 +24 -5
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +9 -13
- 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 +9 -13
- 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 -12
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts +6 -0
- package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -0
- package/dist/collections/operations/{utils.js → utilities/buildAfterOperation.js} +1 -1
- package/dist/collections/operations/utilities/buildAfterOperation.js.map +1 -0
- package/dist/collections/operations/utilities/buildBeforeOperation.d.ts +47 -0
- package/dist/collections/operations/utilities/buildBeforeOperation.d.ts.map +1 -0
- package/dist/collections/operations/utilities/buildBeforeOperation.js +25 -0
- package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -0
- package/dist/collections/operations/utilities/types.d.ts +216 -0
- package/dist/collections/operations/utilities/types.d.ts.map +1 -0
- package/dist/collections/operations/utilities/types.js +23 -0
- package/dist/collections/operations/utilities/types.js.map +1 -0
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +4 -2
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +2 -2
- package/dist/config/sanitize.js.map +1 -1
- package/dist/exports/shared.d.ts +1 -0
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +1 -0
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.js +2 -2
- package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
- package/dist/fields/config/types.d.ts +2 -0
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/globals/config/types.d.ts +1 -1
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +4 -3
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +3 -2
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +200 -119
- package/dist/utilities/getVersionsConfig.d.ts +37 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -0
- package/dist/utilities/getVersionsConfig.js +44 -0
- package/dist/utilities/getVersionsConfig.js.map +1 -0
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +3 -2
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +3 -2
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.js +3 -1
- package/dist/versions/getLatestCollectionVersion.js.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +3 -2
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +2 -1
- package/dist/versions/saveVersion.js.map +1 -1
- package/package.json +2 -2
- package/dist/collections/operations/utils.d.ts +0 -105
- package/dist/collections/operations/utils.d.ts.map +0 -1
- package/dist/collections/operations/utils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/find.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n Sort,\n TransformCollectionWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n includeLockStatus?: boolean\n joins?: JoinQuery\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\n\nconst lockDurationDefault = 300 // Default 5 minutes in seconds\n\nexport const findOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req!.context,\n operation: 'read',\n req: args.req!,\n })) || args\n }\n }\n\n const {\n collection: { config: collectionConfig },\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft: draftsEnabled,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n select: incomingSelect,\n showHiddenFields,\n sort: incomingSort,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: limit!,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 1,\n }\n }\n }\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n let result: PaginatedDocs<DataFromCollectionSlug<TSlug>>\n\n let fullWhere = combineQueries(where!, accessResult!)\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n const sort = sanitizeSortQuery({\n fields: collection.config.flattenedFields,\n sort: incomingSort,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess: overrideAccess!,\n req,\n })\n\n if (collectionConfig.versions?.drafts && draftsEnabled) {\n fullWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess: overrideAccess!,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n result = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({\n collectionConfig,\n sort,\n }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where: where!,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n draftsEnabled,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n }\n\n if (includeLockStatus) {\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const now = new Date().getTime()\n\n const lockedDocuments = await payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: sanitizedLimit,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n in: result.docs.map((doc) => doc.id),\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const lockedDocs = Array.isArray(lockedDocuments?.docs) ? lockedDocuments.docs : []\n\n // Filter out stale locks\n const validLockedDocs = lockedDocs.filter((lock) => {\n const lastEditedAt = new Date(lock?.updatedAt).getTime()\n return lastEditedAt + lockDurationInMilliseconds > now\n })\n\n for (const doc of result.docs) {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n doc._isLocked = !!lockedDoc\n doc._userEditing = lockedDoc ? lockedDoc?.user?.value : null\n }\n } catch (_err) {\n for (const doc of result.docs) {\n doc._isLocked = false\n doc._userEditing = null\n }\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig?.hooks?.beforeRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n for (const hook of collectionConfig.hooks.beforeRead) {\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.docs = await Promise.all(\n result.docs.map(async (doc) =>\n afterRead<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc,\n draft: draftsEnabled!,\n fallbackLocale: fallbackLocale!,\n findMany: true,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n }),\n ),\n )\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig?.hooks?.afterRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n for (const hook of collectionConfig.hooks.afterRead) {\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'find',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>\n } catch (error: unknown) {\n await killTransaction(args.req!)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeJoinQuery","sanitizeWhereQuery","afterRead","lockedDocumentsCollectionSlug","appendNonTrashedFilter","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","sanitizeSortQuery","buildAfterOperation","lockDurationDefault","findOperation","incomingArgs","args","collection","config","hooks","beforeOperation","length","hook","context","req","operation","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","populate","select","incomingSelect","showHiddenFields","sort","incomingSort","trash","where","fallbackLocale","locale","payload","fields","flattenedFields","forceSelect","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","enableTrash","sanitizedJoins","versions","drafts","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","_err","beforeRead","Promise","all","docRef","query","findMany","global","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/find.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n Sort,\n TransformCollectionWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport { sanitizeSortQuery } from './utilities/sanitizeSortQuery.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n includeLockStatus?: boolean\n joins?: JoinQuery\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\n\nconst lockDurationDefault = 300 // Default 5 minutes in seconds\n\nexport const findOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'read',\n })\n\n const {\n collection: { config: collectionConfig },\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft: draftsEnabled,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n select: incomingSelect,\n showHiddenFields,\n sort: incomingSort,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: limit!,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 1,\n }\n }\n }\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n let result: PaginatedDocs<DataFromCollectionSlug<TSlug>>\n\n let fullWhere = combineQueries(where!, accessResult!)\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n const sort = sanitizeSortQuery({\n fields: collection.config.flattenedFields,\n sort: incomingSort,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess: overrideAccess!,\n req,\n })\n\n if (hasDraftsEnabled(collectionConfig) && draftsEnabled) {\n fullWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess: overrideAccess!,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n result = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({\n collectionConfig,\n sort,\n }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where: where!,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n draftsEnabled,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale: locale!,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n }\n\n if (includeLockStatus) {\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const now = new Date().getTime()\n\n const lockedDocuments = await payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: sanitizedLimit,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n in: result.docs.map((doc) => doc.id),\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const lockedDocs = Array.isArray(lockedDocuments?.docs) ? lockedDocuments.docs : []\n\n // Filter out stale locks\n const validLockedDocs = lockedDocs.filter((lock) => {\n const lastEditedAt = new Date(lock?.updatedAt).getTime()\n return lastEditedAt + lockDurationInMilliseconds > now\n })\n\n for (const doc of result.docs) {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n doc._isLocked = !!lockedDoc\n doc._userEditing = lockedDoc ? lockedDoc?.user?.value : null\n }\n } catch (_err) {\n for (const doc of result.docs) {\n doc._isLocked = false\n doc._userEditing = null\n }\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig?.hooks?.beforeRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n for (const hook of collectionConfig.hooks.beforeRead) {\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.docs = await Promise.all(\n result.docs.map(async (doc) =>\n afterRead<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc,\n draft: draftsEnabled!,\n fallbackLocale: fallbackLocale!,\n findMany: true,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n }),\n ),\n )\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig?.hooks?.afterRead?.length) {\n result.docs = await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n for (const hook of collectionConfig.hooks.afterRead) {\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc\n }\n\n return docRef\n }),\n )\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'find',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>\n } catch (error: unknown) {\n await killTransaction(args.req!)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeJoinQuery","sanitizeWhereQuery","afterRead","lockedDocumentsCollectionSlug","appendNonTrashedFilter","hasDraftsEnabled","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","buildAfterOperation","buildBeforeOperation","sanitizeSortQuery","lockDurationDefault","findOperation","incomingArgs","args","collection","config","operation","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","populate","select","incomingSelect","showHiddenFields","sort","incomingSort","trash","where","req","fallbackLocale","locale","payload","fields","flattenedFields","forceSelect","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","enableTrash","sanitizedJoins","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","_err","hooks","beforeRead","length","Promise","all","docRef","hook","context","query","findMany","global","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAWrF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAA;AAErD,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,YAAY,KACzB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CA4Q3F,CAAA"}
|
|
@@ -7,28 +7,24 @@ import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
|
7
7
|
import { validateQueryPaths } from '../../index.js';
|
|
8
8
|
import { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js';
|
|
9
9
|
import { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js';
|
|
10
|
+
import { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js';
|
|
10
11
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
11
12
|
import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
|
|
12
13
|
import { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js';
|
|
13
|
-
import { buildAfterOperation } from './
|
|
14
|
+
import { buildAfterOperation } from './utilities/buildAfterOperation.js';
|
|
15
|
+
import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
|
|
14
16
|
export const findByIDOperation = async (incomingArgs)=>{
|
|
15
17
|
let args = incomingArgs;
|
|
16
18
|
try {
|
|
17
19
|
// /////////////////////////////////////
|
|
18
20
|
// beforeOperation - Collection
|
|
19
21
|
// /////////////////////////////////////
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
operation: 'read',
|
|
27
|
-
req: args.req
|
|
28
|
-
}) || args;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, draft: draftEnabled = false, flattenLocales, includeLockStatus, joins, overrideAccess = false, populate, req: { fallbackLocale, locale, t }, req, select: incomingSelect, showHiddenFields, trash = false } = args;
|
|
22
|
+
args = await buildBeforeOperation({
|
|
23
|
+
args,
|
|
24
|
+
collection: args.collection.config,
|
|
25
|
+
operation: 'read'
|
|
26
|
+
});
|
|
27
|
+
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, draft: replaceWithVersion = false, flattenLocales, includeLockStatus, joins, overrideAccess = false, populate, req: { fallbackLocale, locale, t }, req, select: incomingSelect, showHiddenFields, trash = false } = args;
|
|
32
28
|
const select = sanitizeSelect({
|
|
33
29
|
fields: collectionConfig.flattenedFields,
|
|
34
30
|
forceSelect: collectionConfig.forceSelect,
|
|
@@ -69,17 +65,6 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
69
65
|
overrideAccess,
|
|
70
66
|
req
|
|
71
67
|
});
|
|
72
|
-
const findOneArgs = {
|
|
73
|
-
collection: collectionConfig.slug,
|
|
74
|
-
draftsEnabled: draftEnabled,
|
|
75
|
-
joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
|
|
76
|
-
locale: locale,
|
|
77
|
-
req: {
|
|
78
|
-
transactionID: req.transactionID
|
|
79
|
-
},
|
|
80
|
-
select,
|
|
81
|
-
where: fullWhere
|
|
82
|
-
};
|
|
83
68
|
// execute only if there's a custom ID and potentially overwriten access on id
|
|
84
69
|
if (req.payload.collections[collectionConfig.slug].customIDType) {
|
|
85
70
|
await validateQueryPaths({
|
|
@@ -92,6 +77,17 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
92
77
|
// /////////////////////////////////////
|
|
93
78
|
// Find by ID
|
|
94
79
|
// /////////////////////////////////////
|
|
80
|
+
const findOneArgs = {
|
|
81
|
+
collection: collectionConfig.slug,
|
|
82
|
+
draftsEnabled: replaceWithVersion,
|
|
83
|
+
joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
|
|
84
|
+
locale: locale,
|
|
85
|
+
req: {
|
|
86
|
+
transactionID: req.transactionID
|
|
87
|
+
},
|
|
88
|
+
select,
|
|
89
|
+
where: fullWhere
|
|
90
|
+
};
|
|
95
91
|
if (!findOneArgs.where?.and?.[0]?.id) {
|
|
96
92
|
throw new NotFound(t);
|
|
97
93
|
}
|
|
@@ -154,7 +150,7 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
154
150
|
// /////////////////////////////////////
|
|
155
151
|
// Replace document with draft if available
|
|
156
152
|
// /////////////////////////////////////
|
|
157
|
-
if (
|
|
153
|
+
if (replaceWithVersion && hasDraftsEnabled(collectionConfig)) {
|
|
158
154
|
result = await replaceWithDraftIfAvailable({
|
|
159
155
|
accessResult,
|
|
160
156
|
doc: result,
|
|
@@ -188,7 +184,7 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
188
184
|
currentDepth,
|
|
189
185
|
depth: depth,
|
|
190
186
|
doc: result,
|
|
191
|
-
draft:
|
|
187
|
+
draft: replaceWithVersion,
|
|
192
188
|
fallbackLocale: fallbackLocale,
|
|
193
189
|
flattenLocales,
|
|
194
190
|
global: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n JsonObject,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead, type AfterReadArgs } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type FindByIDArgs = {\n collection: Collection\n currentDepth?: number\n /**\n * You may pass the document data directly which will skip the `db.findOne` database query.\n * This is useful if you want to use this endpoint solely for running hooks and populating data.\n */\n data?: Record<string, unknown>\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<AfterReadArgs<JsonObject>, 'flattenLocales'>\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: FindByIDArgs,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'read',\n req: args.req,\n })) || args\n }\n }\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: draftEnabled = false,\n flattenLocales,\n includeLockStatus,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null!\n }\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResult)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({\n fields: collectionConfig.flattenedFields,\n payload: args.req.payload,\n where: fullWhere,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n draftsEnabled: draftEnabled,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale: locale!,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select,\n where: fullWhere,\n }\n\n // execute only if there's a custom ID and potentially overwriten access on id\n if (req.payload.collections[collectionConfig.slug]!.customIDType) {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n if (!findOneArgs.where?.and?.[0]?.id) {\n throw new NotFound(t)\n }\n\n const docFromDB = await req.payload.db.findOne(findOneArgs)\n\n if (!docFromDB && !args.data) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n return null!\n }\n\n let result: DataFromCollectionSlug<TSlug> =\n (args.data as DataFromCollectionSlug<TSlug>) ?? docFromDB!\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus: (JsonObject & TypeWithID) | null = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]!\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (collectionConfig.versions?.drafts && draftEnabled) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result,\n draft: draftEnabled,\n fallbackLocale: fallbackLocale!,\n flattenLocales,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","sanitizeWhereQuery","NotFound","afterRead","validateQueryPaths","lockedDocumentsCollectionSlug","appendNonTrashedFilter","killTransaction","sanitizeSelect","replaceWithDraftIfAvailable","buildAfterOperation","findByIDOperation","incomingArgs","args","collection","config","hooks","beforeOperation","length","hook","context","req","operation","id","collectionConfig","currentDepth","depth","disableErrors","draft","draftEnabled","flattenLocales","includeLockStatus","joins","overrideAccess","populate","fallbackLocale","locale","t","select","incomingSelect","showHiddenFields","trash","fields","flattenedFields","forceSelect","accessResult","access","read","where","equals","fullWhere","enableTrash","payload","sanitizedJoins","findOneArgs","slug","draftsEnabled","payloadAPI","transactionID","collections","customIDType","and","docFromDB","db","findOne","data","result","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","limit","pagination","updatedAt","greater_than","Date","getTime","docs","_isLocked","_userEditing","user","value","versions","drafts","doc","entity","entityType","beforeRead","query","global","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n JsonObject,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead, type AfterReadArgs } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type FindByIDArgs = {\n collection: Collection\n currentDepth?: number\n /**\n * You may pass the document data directly which will skip the `db.findOne` database query.\n * This is useful if you want to use this endpoint solely for running hooks and populating data.\n */\n data?: Record<string, unknown>\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<AfterReadArgs<JsonObject>, 'flattenLocales'>\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: FindByIDArgs,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'read',\n })\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: replaceWithVersion = false,\n flattenLocales,\n includeLockStatus,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null!\n }\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResult)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({\n fields: collectionConfig.flattenedFields,\n payload: args.req.payload,\n where: fullWhere,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n // execute only if there's a custom ID and potentially overwriten access on id\n if (req.payload.collections[collectionConfig.slug]!.customIDType) {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n draftsEnabled: replaceWithVersion,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale: locale!,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select,\n where: fullWhere,\n }\n\n if (!findOneArgs.where?.and?.[0]?.id) {\n throw new NotFound(t)\n }\n\n const docFromDB = await req.payload.db.findOne(findOneArgs)\n\n if (!docFromDB && !args.data) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n return null!\n }\n\n let result: DataFromCollectionSlug<TSlug> =\n (args.data as DataFromCollectionSlug<TSlug>) ?? docFromDB!\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus: (JsonObject & TypeWithID) | null = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]!\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (replaceWithVersion && hasDraftsEnabled(collectionConfig)) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result,\n draft: replaceWithVersion,\n fallbackLocale: fallbackLocale!,\n flattenLocales,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","sanitizeWhereQuery","NotFound","afterRead","validateQueryPaths","lockedDocumentsCollectionSlug","appendNonTrashedFilter","hasDraftsEnabled","killTransaction","sanitizeSelect","replaceWithDraftIfAvailable","buildAfterOperation","buildBeforeOperation","findByIDOperation","incomingArgs","args","collection","config","operation","id","collectionConfig","currentDepth","depth","disableErrors","draft","replaceWithVersion","flattenLocales","includeLockStatus","joins","overrideAccess","populate","req","fallbackLocale","locale","t","select","incomingSelect","showHiddenFields","trash","fields","flattenedFields","forceSelect","accessResult","access","read","where","equals","fullWhere","enableTrash","payload","sanitizedJoins","collections","slug","customIDType","findOneArgs","draftsEnabled","payloadAPI","transactionID","and","docFromDB","db","findOne","data","result","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","limit","pagination","updatedAt","greater_than","Date","getTime","docs","length","_isLocked","_userEditing","user","value","doc","entity","entityType","hooks","beforeRead","hook","context","query","global","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findDistinct.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findDistinct.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"findDistinct.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findDistinct.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAepD,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AACD,eAAO,MAAM,qBAAqB,iBAClB,SAAS,KACtB,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoNxD,CAAA"}
|
|
@@ -9,24 +9,19 @@ import { relationshipPopulationPromise } from '../../fields/hooks/afterRead/rela
|
|
|
9
9
|
import { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js';
|
|
10
10
|
import { getFieldByPath } from '../../utilities/getFieldByPath.js';
|
|
11
11
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
12
|
-
import { buildAfterOperation } from './
|
|
12
|
+
import { buildAfterOperation } from './utilities/buildAfterOperation.js';
|
|
13
|
+
import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
|
|
13
14
|
export const findDistinctOperation = async (incomingArgs)=>{
|
|
14
15
|
let args = incomingArgs;
|
|
15
16
|
try {
|
|
16
17
|
// /////////////////////////////////////
|
|
17
18
|
// beforeOperation - Collection
|
|
18
19
|
// /////////////////////////////////////
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
context: args.req.context,
|
|
25
|
-
operation: 'readDistinct',
|
|
26
|
-
req: args.req
|
|
27
|
-
}) || args;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
20
|
+
args = await buildBeforeOperation({
|
|
21
|
+
args,
|
|
22
|
+
collection: args.collection.config,
|
|
23
|
+
operation: 'readDistinct'
|
|
24
|
+
});
|
|
30
25
|
const { collection: { config: collectionConfig }, disableErrors, overrideAccess, populate, showHiddenFields = false, trash = false, where } = args;
|
|
31
26
|
const req = args.req;
|
|
32
27
|
const { locale, payload } = req;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/findDistinct.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDistinctDocs } from '../../database/types.js'\nimport type { FlattenedField } from '../../fields/config/types.js'\nimport type { PayloadRequest, PopulateType, Sort, Where } from '../../types/index.js'\nimport type { Collection } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError } from '../../errors/APIError.js'\nimport { Forbidden } from '../../errors/Forbidden.js'\nimport { relationshipPopulationPromise } from '../../fields/hooks/afterRead/relationshipPopulationPromise.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableErrors?: boolean\n field: string\n limit?: number\n locale?: string\n overrideAccess?: boolean\n page?: number\n populate?: PopulateType\n req?: PayloadRequest\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\nexport const findDistinctOperation = async (\n incomingArgs: Arguments,\n): Promise<PaginatedDistinctDocs<Record<string, unknown>>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req!.context,\n operation: 'readDistinct',\n req: args.req!,\n })) || args\n }\n }\n\n const {\n collection: { config: collectionConfig },\n disableErrors,\n overrideAccess,\n populate,\n showHiddenFields = false,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { locale, payload } = req\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: args.limit || 0,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n values: [],\n }\n }\n }\n\n // /////////////////////////////////////\n // Find Distinct\n // /////////////////////////////////////\n\n let fullWhere = combineQueries(where!, accessResult!)\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where: where ?? {},\n })\n\n const fieldResult = getFieldByPath({\n config: payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n\n if (!fieldResult) {\n throw new APIError(\n `Field ${args.field} was not found in the collection ${collectionConfig.slug}`,\n httpStatus.BAD_REQUEST,\n )\n }\n\n if (fieldResult.field.hidden && !showHiddenFields) {\n throw new Forbidden(req.t)\n }\n\n if (fieldResult.field.access?.read) {\n const hasAccess = await fieldResult.field.access.read({ req })\n if (!hasAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n if ('virtual' in fieldResult.field && fieldResult.field.virtual) {\n if (typeof fieldResult.field.virtual !== 'string') {\n throw new APIError(\n `Cannot findDistinct by a virtual field that isn't linked to a relationship field.`,\n )\n }\n\n let relationPath: string = ''\n let currentFields: FlattenedField[] = collectionConfig.flattenedFields\n const fieldPathSegments = fieldResult.field.virtual.split('.')\n for (const segment of fieldResult.field.virtual.split('.')) {\n relationPath = `${relationPath}${segment}`\n fieldPathSegments.shift()\n const field = currentFields.find((e) => e.name === segment)!\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n break\n }\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n }\n }\n\n const path = `${relationPath}.${fieldPathSegments.join('.')}`\n\n const result = await payload.findDistinct({\n collection: collectionConfig.slug,\n depth: args.depth,\n disableErrors,\n field: path,\n limit: args.limit,\n locale,\n overrideAccess,\n page: args.page,\n populate,\n req,\n showHiddenFields,\n sort: args.sort,\n trash,\n where,\n })\n\n for (const val of result.values) {\n val[args.field] = val[path]\n delete val[path]\n }\n\n return result\n }\n\n let result = await payload.db.findDistinct({\n collection: collectionConfig.slug,\n field: args.field,\n limit: args.limit,\n locale: locale!,\n page: args.page,\n req,\n sort: args.sort,\n where: fullWhere,\n })\n\n if (\n (fieldResult.field.type === 'relationship' || fieldResult.field.type === 'upload') &&\n args.depth\n ) {\n const populationPromises: Promise<void>[] = []\n const sanitizedField = { ...fieldResult.field }\n if (fieldResult.field.hasMany) {\n sanitizedField.hasMany = false\n }\n for (const doc of result.values) {\n populationPromises.push(\n relationshipPopulationPromise({\n currentDepth: 0,\n depth: args.depth,\n draft: false,\n fallbackLocale: req.fallbackLocale || null,\n field: sanitizedField,\n locale: req.locale || null,\n overrideAccess: args.overrideAccess ?? true,\n parentIsLocalized: false,\n populate,\n req,\n showHiddenFields: false,\n siblingDoc: doc,\n }),\n )\n }\n await Promise.all(populationPromises)\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findDistinct',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req!)\n throw error\n }\n}\n"],"names":["httpStatus","executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","Forbidden","relationshipPopulationPromise","appendNonTrashedFilter","getFieldByPath","killTransaction","buildAfterOperation","findDistinctOperation","incomingArgs","args","collection","config","hooks","beforeOperation","length","hook","context","req","operation","collectionConfig","disableErrors","overrideAccess","populate","showHiddenFields","trash","where","locale","payload","accessResult","access","read","hasNextPage","hasPrevPage","limit","nextPage","page","pagingCounter","prevPage","totalDocs","totalPages","values","fullWhere","fields","flattenedFields","enableTrash","fieldResult","includeRelationships","path","field","slug","BAD_REQUEST","hidden","t","hasAccess","virtual","relationPath","currentFields","fieldPathSegments","split","segment","shift","find","e","name","type","relationTo","join","result","findDistinct","depth","sort","val","db","populationPromises","sanitizedField","hasMany","doc","push","currentDepth","draft","fallbackLocale","parentIsLocalized","siblingDoc","Promise","all","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/findDistinct.ts"],"sourcesContent":["import httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDistinctDocs } from '../../database/types.js'\nimport type { FlattenedField } from '../../fields/config/types.js'\nimport type { PayloadRequest, PopulateType, Sort, Where } from '../../types/index.js'\nimport type { Collection } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError } from '../../errors/APIError.js'\nimport { Forbidden } from '../../errors/Forbidden.js'\nimport { relationshipPopulationPromise } from '../../fields/hooks/afterRead/relationshipPopulationPromise.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableErrors?: boolean\n field: string\n limit?: number\n locale?: string\n overrideAccess?: boolean\n page?: number\n populate?: PopulateType\n req?: PayloadRequest\n showHiddenFields?: boolean\n sort?: Sort\n trash?: boolean\n where?: Where\n}\nexport const findDistinctOperation = async (\n incomingArgs: Arguments,\n): Promise<PaginatedDistinctDocs<Record<string, unknown>>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'readDistinct',\n })\n\n const {\n collection: { config: collectionConfig },\n disableErrors,\n overrideAccess,\n populate,\n showHiddenFields = false,\n trash = false,\n where,\n } = args\n\n const req = args.req!\n const { locale, payload } = req\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: args.limit || 0,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n values: [],\n }\n }\n }\n\n // /////////////////////////////////////\n // Find Distinct\n // /////////////////////////////////////\n\n let fullWhere = combineQueries(where!, accessResult!)\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where: where ?? {},\n })\n\n const fieldResult = getFieldByPath({\n config: payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n\n if (!fieldResult) {\n throw new APIError(\n `Field ${args.field} was not found in the collection ${collectionConfig.slug}`,\n httpStatus.BAD_REQUEST,\n )\n }\n\n if (fieldResult.field.hidden && !showHiddenFields) {\n throw new Forbidden(req.t)\n }\n\n if (fieldResult.field.access?.read) {\n const hasAccess = await fieldResult.field.access.read({ req })\n if (!hasAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n if ('virtual' in fieldResult.field && fieldResult.field.virtual) {\n if (typeof fieldResult.field.virtual !== 'string') {\n throw new APIError(\n `Cannot findDistinct by a virtual field that isn't linked to a relationship field.`,\n )\n }\n\n let relationPath: string = ''\n let currentFields: FlattenedField[] = collectionConfig.flattenedFields\n const fieldPathSegments = fieldResult.field.virtual.split('.')\n for (const segment of fieldResult.field.virtual.split('.')) {\n relationPath = `${relationPath}${segment}`\n fieldPathSegments.shift()\n const field = currentFields.find((e) => e.name === segment)!\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n break\n }\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n }\n }\n\n const path = `${relationPath}.${fieldPathSegments.join('.')}`\n\n const result = await payload.findDistinct({\n collection: collectionConfig.slug,\n depth: args.depth,\n disableErrors,\n field: path,\n limit: args.limit,\n locale,\n overrideAccess,\n page: args.page,\n populate,\n req,\n showHiddenFields,\n sort: args.sort,\n trash,\n where,\n })\n\n for (const val of result.values) {\n val[args.field] = val[path]\n delete val[path]\n }\n\n return result\n }\n\n let result = await payload.db.findDistinct({\n collection: collectionConfig.slug,\n field: args.field,\n limit: args.limit,\n locale: locale!,\n page: args.page,\n req,\n sort: args.sort,\n where: fullWhere,\n })\n\n if (\n (fieldResult.field.type === 'relationship' || fieldResult.field.type === 'upload') &&\n args.depth\n ) {\n const populationPromises: Promise<void>[] = []\n const sanitizedField = { ...fieldResult.field }\n if (fieldResult.field.hasMany) {\n sanitizedField.hasMany = false\n }\n for (const doc of result.values) {\n populationPromises.push(\n relationshipPopulationPromise({\n currentDepth: 0,\n depth: args.depth,\n draft: false,\n fallbackLocale: req.fallbackLocale || null,\n field: sanitizedField,\n locale: req.locale || null,\n overrideAccess: args.overrideAccess ?? true,\n parentIsLocalized: false,\n populate,\n req,\n showHiddenFields: false,\n siblingDoc: doc,\n }),\n )\n }\n await Promise.all(populationPromises)\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findDistinct',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req!)\n throw error\n }\n}\n"],"names":["httpStatus","executeAccess","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","Forbidden","relationshipPopulationPromise","appendNonTrashedFilter","getFieldByPath","killTransaction","buildAfterOperation","buildBeforeOperation","findDistinctOperation","incomingArgs","args","collection","config","operation","collectionConfig","disableErrors","overrideAccess","populate","showHiddenFields","trash","where","req","locale","payload","accessResult","access","read","hasNextPage","hasPrevPage","limit","nextPage","page","pagingCounter","prevPage","totalDocs","totalPages","values","fullWhere","fields","flattenedFields","enableTrash","fieldResult","includeRelationships","path","field","slug","BAD_REQUEST","hidden","t","hasAccess","virtual","relationPath","currentFields","fieldPathSegments","split","segment","shift","find","e","name","type","relationTo","join","result","findDistinct","depth","sort","val","db","populationPromises","sanitizedField","hasMany","doc","push","currentDepth","draft","fallbackLocale","parentIsLocalized","siblingDoc","Promise","all","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findVersionByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersionByID.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"findVersionByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersionByID.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAchE,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,KAAK,SAAS,UAAU,cAC/D,SAAS,KACd,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CA8KhC,CAAA"}
|
|
@@ -8,12 +8,22 @@ import { killTransaction } from '../../utilities/killTransaction.js';
|
|
|
8
8
|
import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
|
|
9
9
|
import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
|
|
10
10
|
import { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js';
|
|
11
|
+
import { buildAfterOperation } from './utilities/buildAfterOperation.js';
|
|
12
|
+
import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
|
|
11
13
|
export const findVersionByIDOperation = async (args)=>{
|
|
12
14
|
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, overrideAccess, populate, req: { fallbackLocale, locale, payload }, req, select: incomingSelect, showHiddenFields, trash = false } = args;
|
|
13
15
|
if (!id) {
|
|
14
16
|
throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST);
|
|
15
17
|
}
|
|
16
18
|
try {
|
|
19
|
+
// /////////////////////////////////////
|
|
20
|
+
// beforeOperation - Collection
|
|
21
|
+
// /////////////////////////////////////
|
|
22
|
+
args = await buildBeforeOperation({
|
|
23
|
+
args,
|
|
24
|
+
collection: collectionConfig,
|
|
25
|
+
operation: 'findVersionByID'
|
|
26
|
+
});
|
|
17
27
|
// /////////////////////////////////////
|
|
18
28
|
// Access
|
|
19
29
|
// /////////////////////////////////////
|
|
@@ -59,7 +69,7 @@ export const findVersionByIDOperation = async (args)=>{
|
|
|
59
69
|
select,
|
|
60
70
|
where: fullWhere
|
|
61
71
|
});
|
|
62
|
-
|
|
72
|
+
let result = versionsQuery.docs[0];
|
|
63
73
|
if (!result) {
|
|
64
74
|
if (!disableErrors) {
|
|
65
75
|
if (!hasWhereAccess) {
|
|
@@ -125,6 +135,15 @@ export const findVersionByIDOperation = async (args)=>{
|
|
|
125
135
|
}
|
|
126
136
|
}
|
|
127
137
|
// /////////////////////////////////////
|
|
138
|
+
// afterOperation - Collection
|
|
139
|
+
// /////////////////////////////////////
|
|
140
|
+
result = await buildAfterOperation({
|
|
141
|
+
args,
|
|
142
|
+
collection: collectionConfig,
|
|
143
|
+
operation: 'findVersionByID',
|
|
144
|
+
result
|
|
145
|
+
});
|
|
146
|
+
// /////////////////////////////////////
|
|
128
147
|
// Return results
|
|
129
148
|
// /////////////////////////////////////
|
|
130
149
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/findVersionByID.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n trash?: boolean\n}\n\nexport const findVersionByIDOperation = async <TData extends TypeWithID = any>(\n args: Arguments,\n): Promise<TypeWithVersion<TData>> => {\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST)\n }\n\n try {\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: buildVersionCollectionFields(payload.config, collectionConfig, true),\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const versionsQuery = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select,\n where: fullWhere,\n })\n\n const result = versionsQuery.docs[0]\n\n if (!result) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n if (!result.version) {\n // Fallback if not selected\n ;(result as any).version = {}\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","APIError","Forbidden","NotFound","afterRead","appendNonTrashedFilter","killTransaction","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","findVersionByIDOperation","args","id","collection","config","collectionConfig","currentDepth","depth","disableErrors","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","accessResults","access","readVersions","hasWhereAccess","where","equals","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","versionsQuery","db","findVersions","slug","limit","pagination","result","docs","t","version","hooks","beforeRead","length","hook","context","doc","query","draft","undefined","global","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/findVersionByID.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n trash?: boolean\n}\n\nexport const findVersionByIDOperation = async <TData extends TypeWithID = any>(\n args: Arguments,\n): Promise<TypeWithVersion<TData>> => {\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST)\n }\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: buildVersionCollectionFields(payload.config, collectionConfig, true),\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const versionsQuery = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select,\n where: fullWhere,\n })\n\n let result = versionsQuery.docs[0]!\n\n if (!result) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n if (!result.version) {\n // Fallback if not selected\n ;(result as any).version = {}\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","APIError","Forbidden","NotFound","afterRead","appendNonTrashedFilter","killTransaction","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","buildAfterOperation","buildBeforeOperation","findVersionByIDOperation","args","id","collection","config","collectionConfig","currentDepth","depth","disableErrors","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","operation","accessResults","access","readVersions","hasWhereAccess","where","equals","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","versionsQuery","db","findVersions","slug","limit","pagination","result","docs","t","version","hooks","beforeRead","length","hook","context","doc","query","draft","undefined","global","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAgBpD,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAU,KAAK,SAAS,eAAe,CAAC,KAAK,CAAC,QACxE,SAAS,KACd,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CA+L9B,CAAA"}
|