payload 3.0.0-beta.124 → 3.0.0-beta.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/RichText.d.ts +4 -1
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/collections/config/types.d.ts +2 -2
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/create.d.ts +2 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +2 -1
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts +2 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +2 -1
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts +2 -1
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +2 -1
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/duplicate.d.ts +2 -1
- package/dist/collections/operations/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/duplicate.js +2 -1
- package/dist/collections/operations/duplicate.js.map +1 -1
- package/dist/collections/operations/find.d.ts +2 -1
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +11 -3
- package/dist/collections/operations/find.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts +2 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +23 -7
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts +2 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +2 -1
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts +2 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +2 -1
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/local/count.d.ts +2 -2
- package/dist/collections/operations/local/count.d.ts.map +1 -1
- package/dist/collections/operations/local/count.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +3 -2
- package/dist/collections/operations/local/create.d.ts.map +1 -1
- package/dist/collections/operations/local/create.js +2 -1
- package/dist/collections/operations/local/create.js.map +1 -1
- package/dist/collections/operations/local/delete.d.ts +3 -2
- package/dist/collections/operations/local/delete.d.ts.map +1 -1
- package/dist/collections/operations/local/delete.js +2 -1
- package/dist/collections/operations/local/delete.js.map +1 -1
- package/dist/collections/operations/local/duplicate.d.ts +3 -2
- package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/local/duplicate.js +2 -1
- package/dist/collections/operations/local/duplicate.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts +4 -3
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/collections/operations/local/findByID.d.ts +4 -3
- package/dist/collections/operations/local/findByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findByID.js +2 -1
- package/dist/collections/operations/local/findByID.js.map +1 -1
- package/dist/collections/operations/local/findVersionByID.d.ts +3 -2
- package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersionByID.js +2 -1
- package/dist/collections/operations/local/findVersionByID.js.map +1 -1
- package/dist/collections/operations/local/findVersions.d.ts +3 -2
- package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersions.js +2 -1
- package/dist/collections/operations/local/findVersions.js.map +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts +3 -2
- package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/local/restoreVersion.js +2 -1
- package/dist/collections/operations/local/restoreVersion.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +3 -2
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js +2 -1
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts +2 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +2 -1
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts +2 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +2 -1
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +2 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +8 -6
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/database/sanitizeJoinQuery.d.ts +22 -0
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -0
- package/dist/database/sanitizeJoinQuery.js +61 -0
- package/dist/database/sanitizeJoinQuery.js.map +1 -0
- package/dist/fields/config/types.d.ts +6 -3
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterChange/index.d.ts +2 -1
- package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/index.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.d.ts +2 -1
- package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts +3 -1
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.js +2 -1
- package/dist/fields/hooks/afterRead/index.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts +4 -2
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +12 -1
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +3 -2
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +7 -3
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +4 -2
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
- package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/index.d.ts +2 -1
- package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/index.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
- package/dist/globals/config/types.d.ts +2 -2
- 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 +2 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +2 -1
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts +2 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +2 -1
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts +2 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +2 -1
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.d.ts +2 -1
- package/dist/globals/operations/local/findOne.d.ts.map +1 -1
- package/dist/globals/operations/local/findOne.js +2 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/findVersionByID.d.ts +2 -1
- package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersionByID.js +2 -1
- package/dist/globals/operations/local/findVersionByID.js.map +1 -1
- package/dist/globals/operations/local/findVersions.d.ts +2 -1
- package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersions.js +2 -1
- package/dist/globals/operations/local/findVersions.js.map +1 -1
- package/dist/globals/operations/local/restoreVersion.d.ts +2 -1
- package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/local/restoreVersion.js +2 -1
- package/dist/globals/operations/local/restoreVersion.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +2 -1
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +2 -1
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts +2 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +2 -1
- package/dist/globals/operations/restoreVersion.js.map +1 -1
- package/dist/globals/operations/update.d.ts +2 -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.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/queues/config/jobsCollection.d.ts.map +1 -1
- package/dist/queues/config/jobsCollection.js +15 -13
- package/dist/queues/config/jobsCollection.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +1 -1
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/operations/runJobs/index.js +1 -1
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/types/index.d.ts +6 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +35 -0
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/deleteByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAuB,UAAU,EAA0B,MAAM,oBAAoB,CAAA;AAgBjG,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,EAAE,OAAO,SAAS,UAAU,gBAClF,SAAS,KACtB,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"deleteByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/deleteByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAuB,UAAU,EAA0B,MAAM,oBAAoB,CAAA;AAgBjG,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,EAAE,OAAO,SAAS,UAAU,gBAClF,SAAS,KACtB,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA0NvD,CAAA"}
|
|
@@ -28,7 +28,7 @@ export const deleteByIDOperation = async (incomingArgs)=>{
|
|
|
28
28
|
req: args.req
|
|
29
29
|
}) || args;
|
|
30
30
|
}, Promise.resolve());
|
|
31
|
-
const { id, collection: { config: collectionConfig }, depth, overrideAccess, overrideLock, req: { fallbackLocale, locale, payload: { config }, payload }, req, select, showHiddenFields } = args;
|
|
31
|
+
const { id, collection: { config: collectionConfig }, depth, overrideAccess, overrideLock, populate, req: { fallbackLocale, locale, payload: { config }, payload }, req, select, showHiddenFields } = args;
|
|
32
32
|
// /////////////////////////////////////
|
|
33
33
|
// Access
|
|
34
34
|
// /////////////////////////////////////
|
|
@@ -133,6 +133,7 @@ export const deleteByIDOperation = async (incomingArgs)=>{
|
|
|
133
133
|
global: null,
|
|
134
134
|
locale,
|
|
135
135
|
overrideAccess,
|
|
136
|
+
populate,
|
|
136
137
|
req,
|
|
137
138
|
select,
|
|
138
139
|
showHiddenFields
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/deleteByID.ts"],"sourcesContent":["import type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type { BeforeOperationHook, Collection, DataFromCollectionSlug } from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const deleteByIDOperation = async <TSlug extends CollectionSlug, TSelect extends SelectType>(\n incomingArgs: Arguments,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(\n async (priorHook: BeforeOperationHook | Promise<void>, hook: BeforeOperationHook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'delete',\n req: args.req,\n })) || args\n },\n Promise.resolve(),\n )\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, req }, collectionConfig.access.delete)\n : true\n const hasWhereAccess = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // beforeDelete - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeDelete.reduce(async (priorHook, hook) => {\n await priorHook\n\n return hook({\n id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const docToDelete = await req.payload.db.findOne({\n collection: collectionConfig.slug,\n locale: req.locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n })\n\n if (!docToDelete && !hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (!docToDelete && hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked and cannot be deleted.`,\n overrideLock,\n req,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docToDelete,\n overrideDelete: true,\n req,\n })\n\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete document\n // /////////////////////////////////////\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n select,\n where: { id: { equals: id } },\n })\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n await deleteUserPreferences({\n collectionConfig,\n ids: [id],\n payload,\n req,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterDelete - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterDelete.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'deleteByID',\n result,\n })\n\n // /////////////////////////////////////\n // 8. Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","combineQueries","Forbidden","NotFound","afterRead","deleteUserPreferences","deleteAssociatedFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","deleteCollectionVersions","buildAfterOperation","deleteByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","id","collectionConfig","depth","overrideAccess","overrideLock","fallbackLocale","locale","payload","select","showHiddenFields","accessResults","access","delete","hasWhereAccess","beforeDelete","docToDelete","db","findOne","slug","where","equals","t","collectionSlug","lockErrorMessage","doc","overrideDelete","versions","result","deleteOne","ids","draft","undefined","global","afterDelete","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/deleteByID.ts"],"sourcesContent":["import type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type { BeforeOperationHook, Collection, DataFromCollectionSlug } from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const deleteByIDOperation = async <TSlug extends CollectionSlug, TSelect extends SelectType>(\n incomingArgs: Arguments,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(\n async (priorHook: BeforeOperationHook | Promise<void>, hook: BeforeOperationHook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'delete',\n req: args.req,\n })) || args\n },\n Promise.resolve(),\n )\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, req }, collectionConfig.access.delete)\n : true\n const hasWhereAccess = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // beforeDelete - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeDelete.reduce(async (priorHook, hook) => {\n await priorHook\n\n return hook({\n id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const docToDelete = await req.payload.db.findOne({\n collection: collectionConfig.slug,\n locale: req.locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n })\n\n if (!docToDelete && !hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (!docToDelete && hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked and cannot be deleted.`,\n overrideLock,\n req,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docToDelete,\n overrideDelete: true,\n req,\n })\n\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete document\n // /////////////////////////////////////\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n select,\n where: { id: { equals: id } },\n })\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n await deleteUserPreferences({\n collectionConfig,\n ids: [id],\n payload,\n req,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterDelete - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterDelete.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'deleteByID',\n result,\n })\n\n // /////////////////////////////////////\n // 8. Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","combineQueries","Forbidden","NotFound","afterRead","deleteUserPreferences","deleteAssociatedFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","deleteCollectionVersions","buildAfterOperation","deleteByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","id","collectionConfig","depth","overrideAccess","overrideLock","populate","fallbackLocale","locale","payload","select","showHiddenFields","accessResults","access","delete","hasWhereAccess","beforeDelete","docToDelete","db","findOne","slug","where","equals","t","collectionSlug","lockErrorMessage","doc","overrideDelete","versions","result","deleteOne","ids","draft","undefined","global","afterDelete","error"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CollectionSlug } from '../../index.js';
|
|
2
|
-
import type { PayloadRequest, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
|
|
2
|
+
import type { PayloadRequest, PopulateType, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
|
|
3
3
|
import type { Collection, SelectFromCollectionSlug } from '../config/types.js';
|
|
4
4
|
export type Arguments = {
|
|
5
5
|
collection: Collection;
|
|
@@ -8,6 +8,7 @@ export type Arguments = {
|
|
|
8
8
|
draft?: boolean;
|
|
9
9
|
id: number | string;
|
|
10
10
|
overrideAccess?: boolean;
|
|
11
|
+
populate?: PopulateType;
|
|
11
12
|
req: PayloadRequest;
|
|
12
13
|
select?: SelectType;
|
|
13
14
|
showHiddenFields?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/duplicate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAqB3B,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/duplicate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAqB3B,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,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;CAC3B,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA+UvD,CAAA"}
|
|
@@ -35,7 +35,7 @@ export const duplicateOperation = async (incomingArgs)=>{
|
|
|
35
35
|
req: args.req
|
|
36
36
|
}) || args;
|
|
37
37
|
}, Promise.resolve());
|
|
38
|
-
const { id, collection: { config: collectionConfig }, depth, draft: draftArg = true, overrideAccess, req: { fallbackLocale, locale: localeArg, payload }, req, select, showHiddenFields } = args;
|
|
38
|
+
const { id, collection: { config: collectionConfig }, depth, draft: draftArg = true, overrideAccess, populate, req: { fallbackLocale, locale: localeArg, payload }, req, select, showHiddenFields } = args;
|
|
39
39
|
if (!id) {
|
|
40
40
|
throw new APIError('Missing ID of document to duplicate.', httpStatus.BAD_REQUEST);
|
|
41
41
|
}
|
|
@@ -224,6 +224,7 @@ export const duplicateOperation = async (incomingArgs)=>{
|
|
|
224
224
|
global: null,
|
|
225
225
|
locale: localeArg,
|
|
226
226
|
overrideAccess,
|
|
227
|
+
populate,
|
|
227
228
|
req,
|
|
228
229
|
select,
|
|
229
230
|
showHiddenFields
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/duplicate.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n SelectType,\n TransformCollectionWithSelect,\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 { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeDuplicate } from '../../fields/hooks/beforeDuplicate/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const duplicateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n const operation = 'create'\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation,\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = true,\n overrideAccess,\n req: { fallbackLocale, locale: localeArg, payload },\n req,\n select,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to duplicate.', httpStatus.BAD_REQUEST)\n }\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Read Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, req }, collectionConfig.access.read)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: req.locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n let docWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n // remove the createdAt timestamp and id to rely on the db to set the default it\n delete docWithLocales.createdAt\n delete docWithLocales.id\n\n docWithLocales = await beforeDuplicate({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: docWithLocales,\n overrideAccess,\n req,\n })\n\n // for version enabled collections, override the current status with draft, unless draft is explicitly set to false\n if (shouldSaveDraft) {\n docWithLocales._status = 'draft'\n }\n\n let result\n\n let originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: docWithLocales,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: req.locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection: args.collection,\n config: req.payload.config,\n data: originalDoc,\n operation: 'create',\n overwriteExistingFiles: 'forceDisable',\n req,\n throwOnMissingFile: true,\n })\n\n originalDoc = newFileData\n\n // /////////////////////////////////////\n // Create Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ data: originalDoc, req }, collectionConfig.access.create)\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data: originalDoc,\n doc: originalDoc,\n duplicate: true,\n global: null,\n operation,\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales,\n global: null,\n operation,\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate,\n })\n\n // set req.locale back to the original locale\n req.locale = localeArg\n\n // /////////////////////////////////////\n // Create / Update\n // /////////////////////////////////////\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n let versionDoc = await payload.db.create({\n collection: collectionConfig.slug,\n data: result,\n req,\n select,\n })\n\n versionDoc = sanitizeInternalFields(versionDoc)\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id: versionDoc.id,\n collection: collectionConfig,\n docWithLocales: versionDoc,\n draft: shouldSaveDraft,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: versionDoc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale: localeArg,\n overrideAccess,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data: versionDoc,\n doc: result,\n global: null,\n operation,\n previousDoc: {},\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation,\n previousDoc: {},\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeDuplicate","beforeValidate","generateFileData","uploadFiles","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getLatestCollectionVersion","saveVersion","buildAfterOperation","duplicateOperation","incomingArgs","args","operation","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","Promise","resolve","id","collectionConfig","depth","draft","draftArg","overrideAccess","fallbackLocale","locale","localeArg","payload","select","showHiddenFields","BAD_REQUEST","shouldSaveDraft","Boolean","versions","drafts","accessResults","access","read","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","createdAt","doc","_status","result","originalDoc","global","data","newFileData","files","filesToUpload","overwriteExistingFiles","throwOnMissingFile","create","duplicate","skipValidation","validate","upload","disableLocalStorage","versionDoc","db","previousDoc","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/duplicate.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\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 { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeDuplicate } from '../../fields/hooks/beforeDuplicate/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const duplicateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n const operation = 'create'\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation,\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = true,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale: localeArg, payload },\n req,\n select,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to duplicate.', httpStatus.BAD_REQUEST)\n }\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Read Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, req }, collectionConfig.access.read)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: req.locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n let docWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n // remove the createdAt timestamp and id to rely on the db to set the default it\n delete docWithLocales.createdAt\n delete docWithLocales.id\n\n docWithLocales = await beforeDuplicate({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: docWithLocales,\n overrideAccess,\n req,\n })\n\n // for version enabled collections, override the current status with draft, unless draft is explicitly set to false\n if (shouldSaveDraft) {\n docWithLocales._status = 'draft'\n }\n\n let result\n\n let originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: docWithLocales,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: req.locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection: args.collection,\n config: req.payload.config,\n data: originalDoc,\n operation: 'create',\n overwriteExistingFiles: 'forceDisable',\n req,\n throwOnMissingFile: true,\n })\n\n originalDoc = newFileData\n\n // /////////////////////////////////////\n // Create Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ data: originalDoc, req }, collectionConfig.access.create)\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data: originalDoc,\n doc: originalDoc,\n duplicate: true,\n global: null,\n operation,\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales,\n global: null,\n operation,\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate,\n })\n\n // set req.locale back to the original locale\n req.locale = localeArg\n\n // /////////////////////////////////////\n // Create / Update\n // /////////////////////////////////////\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n let versionDoc = await payload.db.create({\n collection: collectionConfig.slug,\n data: result,\n req,\n select,\n })\n\n versionDoc = sanitizeInternalFields(versionDoc)\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id: versionDoc.id,\n collection: collectionConfig,\n docWithLocales: versionDoc,\n draft: shouldSaveDraft,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: versionDoc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale: localeArg,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data: versionDoc,\n doc: result,\n global: null,\n operation,\n previousDoc: {},\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation,\n previousDoc: {},\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeDuplicate","beforeValidate","generateFileData","uploadFiles","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getLatestCollectionVersion","saveVersion","buildAfterOperation","duplicateOperation","incomingArgs","args","operation","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","Promise","resolve","id","collectionConfig","depth","draft","draftArg","overrideAccess","populate","fallbackLocale","locale","localeArg","payload","select","showHiddenFields","BAD_REQUEST","shouldSaveDraft","Boolean","versions","drafts","accessResults","access","read","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","createdAt","doc","_status","result","originalDoc","global","data","newFileData","files","filesToUpload","overwriteExistingFiles","throwOnMissingFile","create","duplicate","skipValidation","validate","upload","disableLocalStorage","versionDoc","db","previousDoc","error"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PaginatedDocs } from '../../database/types.js';
|
|
2
2
|
import type { CollectionSlug, JoinQuery } from '../../index.js';
|
|
3
|
-
import type { PayloadRequest, SelectType, Sort, TransformCollectionWithSelect, Where } from '../../types/index.js';
|
|
3
|
+
import type { PayloadRequest, PopulateType, SelectType, Sort, TransformCollectionWithSelect, Where } from '../../types/index.js';
|
|
4
4
|
import type { Collection, SelectFromCollectionSlug } from '../config/types.js';
|
|
5
5
|
export type Arguments = {
|
|
6
6
|
collection: Collection;
|
|
@@ -14,6 +14,7 @@ export type Arguments = {
|
|
|
14
14
|
overrideAccess?: boolean;
|
|
15
15
|
page?: number;
|
|
16
16
|
pagination?: boolean;
|
|
17
|
+
populate?: PopulateType;
|
|
17
18
|
req?: PayloadRequest;
|
|
18
19
|
select?: SelectType;
|
|
19
20
|
showHiddenFields?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,IAAI,EACJ,6BAA6B,EAC7B,KAAK,EACN,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,IAAI,EACJ,6BAA6B,EAC7B,KAAK,EACN,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAc3B,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,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,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,KAAK,CAAA;CACd,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CA+StE,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import executeAccess from '../../auth/executeAccess.js';
|
|
2
2
|
import { combineQueries } from '../../database/combineQueries.js';
|
|
3
3
|
import { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js';
|
|
4
|
+
import { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js';
|
|
4
5
|
import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
5
6
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
6
7
|
import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
|
|
@@ -24,7 +25,7 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
24
25
|
req: args.req
|
|
25
26
|
}) || args;
|
|
26
27
|
}, Promise.resolve());
|
|
27
|
-
const { collection: { config: collectionConfig }, collection, currentDepth, depth, disableErrors, draft: draftsEnabled, includeLockStatus, joins, limit, overrideAccess, page, pagination = true, req: { fallbackLocale, locale, payload }, req, select, showHiddenFields, sort, where } = args;
|
|
28
|
+
const { collection: { config: collectionConfig }, collection, currentDepth, depth, disableErrors, draft: draftsEnabled, includeLockStatus, joins, limit, overrideAccess, page, pagination = true, populate, req: { fallbackLocale, locale, payload }, req, select, showHiddenFields, sort, where } = args;
|
|
28
29
|
// /////////////////////////////////////
|
|
29
30
|
// Access
|
|
30
31
|
// /////////////////////////////////////
|
|
@@ -58,6 +59,12 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
58
59
|
const sanitizedPage = page || 1;
|
|
59
60
|
let result;
|
|
60
61
|
let fullWhere = combineQueries(where, accessResult);
|
|
62
|
+
const sanitizedJoins = await sanitizeJoinQuery({
|
|
63
|
+
collectionConfig,
|
|
64
|
+
joins,
|
|
65
|
+
overrideAccess,
|
|
66
|
+
req
|
|
67
|
+
});
|
|
61
68
|
if (collectionConfig.versions?.drafts && draftsEnabled) {
|
|
62
69
|
fullWhere = appendVersionToQueryKey(fullWhere);
|
|
63
70
|
await validateQueryPaths({
|
|
@@ -69,7 +76,7 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
69
76
|
});
|
|
70
77
|
result = await payload.db.queryDrafts({
|
|
71
78
|
collection: collectionConfig.slug,
|
|
72
|
-
joins: req.payloadAPI === 'GraphQL' ? false :
|
|
79
|
+
joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
|
|
73
80
|
limit: sanitizedLimit,
|
|
74
81
|
locale,
|
|
75
82
|
page: sanitizedPage,
|
|
@@ -93,7 +100,7 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
93
100
|
});
|
|
94
101
|
result = await payload.db.find({
|
|
95
102
|
collection: collectionConfig.slug,
|
|
96
|
-
joins: req.payloadAPI === 'GraphQL' ? false :
|
|
103
|
+
joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
|
|
97
104
|
limit: sanitizedLimit,
|
|
98
105
|
locale,
|
|
99
106
|
page: sanitizedPage,
|
|
@@ -199,6 +206,7 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
199
206
|
global: null,
|
|
200
207
|
locale,
|
|
201
208
|
overrideAccess,
|
|
209
|
+
populate,
|
|
202
210
|
req,
|
|
203
211
|
select,
|
|
204
212
|
showHiddenFields
|
|
@@ -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 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 { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.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 './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 req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n where?: Where\n}\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 await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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 req: { fallbackLocale, locale, payload },\n req,\n select,\n showHiddenFields,\n sort,\n where,\n } = args\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,\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\n if (collectionConfig.versions?.drafts && draftsEnabled) {\n fullWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: fullWhere,\n })\n\n result = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : joins,\n limit: sanitizedLimit,\n locale,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : joins,\n limit: sanitizedLimit,\n 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 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 lockedDocuments = await payload.find({\n collection: 'payload-locked-documents',\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(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const now = new Date().getTime()\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 result.docs = result.docs.map((doc) => {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n return {\n ...doc,\n _isLocked: !!lockedDoc,\n _userEditing: lockedDoc ? lockedDoc?.user?.value : null,\n }\n })\n } catch (error) {\n result.docs = result.docs.map((doc) => ({\n ...doc,\n _isLocked: false,\n _userEditing: null,\n }))\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = {\n ...result,\n 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,\n doc,\n draft: draftsEnabled,\n fallbackLocale,\n findMany: true,\n global: null,\n locale,\n overrideAccess,\n req,\n select,\n showHiddenFields,\n }),\n ),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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","afterRead","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","buildAfterOperation","findOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","fallbackLocale","locale","payload","select","showHiddenFields","sort","where","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","versions","drafts","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","Date","getTime","now","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","error","all","docRef","beforeRead","query","findMany","global"],"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 { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.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 './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 where?: Where\n}\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 await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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 req: { fallbackLocale, locale, payload },\n req,\n select,\n showHiddenFields,\n sort,\n where,\n } = args\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,\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\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n 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,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: fullWhere,\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,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n 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 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 lockedDocuments = await payload.find({\n collection: 'payload-locked-documents',\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(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const now = new Date().getTime()\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 result.docs = result.docs.map((doc) => {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n return {\n ...doc,\n _isLocked: !!lockedDoc,\n _userEditing: lockedDoc ? lockedDoc?.user?.value : null,\n }\n })\n } catch (error) {\n result.docs = result.docs.map((doc) => ({\n ...doc,\n _isLocked: false,\n _userEditing: null,\n }))\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = {\n ...result,\n 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,\n doc,\n draft: draftsEnabled,\n fallbackLocale,\n findMany: true,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n }),\n ),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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","afterRead","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","buildAfterOperation","findOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","populate","fallbackLocale","locale","payload","select","showHiddenFields","sort","where","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","sanitizedJoins","versions","drafts","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","Date","getTime","now","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","error","all","docRef","beforeRead","query","findMany","global"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CollectionSlug, JoinQuery } from '../../index.js';
|
|
2
|
-
import type { ApplyDisableErrors, PayloadRequest, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
|
|
2
|
+
import type { ApplyDisableErrors, PayloadRequest, PopulateType, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
|
|
3
3
|
import type { Collection, SelectFromCollectionSlug } from '../config/types.js';
|
|
4
4
|
export type Arguments = {
|
|
5
5
|
collection: Collection;
|
|
@@ -11,6 +11,7 @@ export type Arguments = {
|
|
|
11
11
|
includeLockStatus?: boolean;
|
|
12
12
|
joins?: JoinQuery;
|
|
13
13
|
overrideAccess?: boolean;
|
|
14
|
+
populate?: PopulateType;
|
|
14
15
|
req: PayloadRequest;
|
|
15
16
|
select?: SelectType;
|
|
16
17
|
showHiddenFields?: boolean;
|
|
@@ -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,cAAc,EACd,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,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,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAY3B,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,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;CAC3B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAqP3F,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import executeAccess from '../../auth/executeAccess.js';
|
|
2
2
|
import { combineQueries } from '../../database/combineQueries.js';
|
|
3
|
+
import { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js';
|
|
3
4
|
import { NotFound } from '../../errors/index.js';
|
|
4
5
|
import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
6
|
+
import { validateQueryPaths } from '../../index.js';
|
|
5
7
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
6
8
|
import replaceWithDraftIfAvailable from '../../versions/drafts/replaceWithDraftIfAvailable.js';
|
|
7
9
|
import { buildAfterOperation } from './utils.js';
|
|
@@ -21,7 +23,7 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
21
23
|
req: args.req
|
|
22
24
|
}) || args;
|
|
23
25
|
}, Promise.resolve());
|
|
24
|
-
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, draft: draftEnabled = false, includeLockStatus, joins, overrideAccess = false, req: { fallbackLocale, locale, t }, req, select, showHiddenFields } = args;
|
|
26
|
+
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, draft: draftEnabled = false, includeLockStatus, joins, overrideAccess = false, populate, req: { fallbackLocale, locale, t }, req, select, showHiddenFields } = args;
|
|
25
27
|
// /////////////////////////////////////
|
|
26
28
|
// Access
|
|
27
29
|
// /////////////////////////////////////
|
|
@@ -34,20 +36,33 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
34
36
|
if (accessResult === false) {
|
|
35
37
|
return null;
|
|
36
38
|
}
|
|
39
|
+
const where = combineQueries({
|
|
40
|
+
id: {
|
|
41
|
+
equals: id
|
|
42
|
+
}
|
|
43
|
+
}, accessResult);
|
|
44
|
+
const sanitizedJoins = await sanitizeJoinQuery({
|
|
45
|
+
collectionConfig,
|
|
46
|
+
joins,
|
|
47
|
+
overrideAccess,
|
|
48
|
+
req
|
|
49
|
+
});
|
|
37
50
|
const findOneArgs = {
|
|
38
51
|
collection: collectionConfig.slug,
|
|
39
|
-
joins: req.payloadAPI === 'GraphQL' ? false :
|
|
52
|
+
joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
|
|
40
53
|
locale,
|
|
41
54
|
req: {
|
|
42
55
|
transactionID: req.transactionID
|
|
43
56
|
},
|
|
44
57
|
select,
|
|
45
|
-
where
|
|
46
|
-
id: {
|
|
47
|
-
equals: id
|
|
48
|
-
}
|
|
49
|
-
}, accessResult)
|
|
58
|
+
where
|
|
50
59
|
};
|
|
60
|
+
await validateQueryPaths({
|
|
61
|
+
collectionConfig,
|
|
62
|
+
overrideAccess,
|
|
63
|
+
req,
|
|
64
|
+
where
|
|
65
|
+
});
|
|
51
66
|
// /////////////////////////////////////
|
|
52
67
|
// Find by ID
|
|
53
68
|
// /////////////////////////////////////
|
|
@@ -150,6 +165,7 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
150
165
|
global: null,
|
|
151
166
|
locale,
|
|
152
167
|
overrideAccess,
|
|
168
|
+
populate,
|
|
153
169
|
req,
|
|
154
170
|
select,
|
|
155
171
|
showHiddenFields
|