payload 3.0.0-beta.112 → 3.0.0-beta.114
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/types.d.ts +2 -2
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/types.d.ts +1 -1
- package/dist/admin/views/types.d.ts.map +1 -1
- package/dist/admin/views/types.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +16 -0
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/collections/config/useAsTitle.d.ts.map +1 -1
- package/dist/collections/config/useAsTitle.js +4 -1
- package/dist/collections/config/useAsTitle.js.map +1 -1
- package/dist/collections/operations/create.d.ts +1 -0
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +1 -1
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts +1 -0
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +1 -1
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts +1 -0
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +1 -1
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/duplicate.d.ts +1 -0
- package/dist/collections/operations/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/duplicate.js +2 -5
- package/dist/collections/operations/duplicate.js.map +1 -1
- package/dist/collections/operations/find.js +4 -1
- package/dist/collections/operations/find.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +1 -0
- 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 +1 -0
- 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 +1 -0
- 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/update.d.ts +3 -0
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js +3 -1
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/update.d.ts +2 -0
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +5 -7
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +1 -0
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +2 -5
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/database/migrations/migrateReset.js +1 -1
- package/dist/database/migrations/migrateReset.js.map +1 -1
- package/dist/exports/i18n/sl.d.ts +2 -0
- package/dist/exports/i18n/sl.d.ts.map +1 -0
- package/dist/exports/i18n/sl.js +3 -0
- package/dist/exports/i18n/sl.js.map +1 -0
- package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
- package/dist/fields/config/sanitizeJoinField.js +2 -0
- package/dist/fields/config/sanitizeJoinField.js.map +1 -1
- package/dist/fields/config/types.d.ts +5 -0
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/globals/operations/update.d.ts +1 -0
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +3 -7
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSort.d.ts +5 -1
- package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
- package/dist/versions/drafts/getQueryDraftsSort.js +6 -2
- package/dist/versions/drafts/getQueryDraftsSort.js.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.js +2 -6
- package/dist/versions/getLatestCollectionVersion.js.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +7 -5
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +3 -5
- package/dist/versions/saveVersion.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/collections/operations/local/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { CollectionSlug, Payload, TypedLocale } from '../../../index.js'\nimport type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js'\nimport type { File } from '../../../uploads/types.js'\nimport type {\n BulkOperationResult,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { getFileByPath } from '../../../uploads/getFileByPath.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { updateOperation } from '../update.js'\nimport { updateByIDOperation } from '../updateByID.js'\n\nexport type BaseOptions<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: TSlug\n /**\n * context, which will then be passed to req.context, which can be read by hooks\n */\n context?: RequestContext\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n draft?: boolean\n fallbackLocale?: TypedLocale\n file?: File\n filePath?: string\n locale?: TypedLocale\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req?: PayloadRequest\n showHiddenFields?: boolean\n user?: Document\n}\n\nexport type ByIDOptions<TSlug extends CollectionSlug> = {\n id: number | string\n where?: never\n} & BaseOptions<TSlug>\n\nexport type ManyOptions<TSlug extends CollectionSlug> = {\n id?: never\n where: Where\n} & BaseOptions<TSlug>\n\nexport type Options<TSlug extends CollectionSlug> = ByIDOptions<TSlug> | ManyOptions<TSlug>\n\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ByIDOptions<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ManyOptions<TSlug>,\n): Promise<BulkOperationResult<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const {\n id,\n autosave,\n collection: collectionSlug,\n data,\n depth,\n draft,\n file,\n filePath,\n overrideAccess = true,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n showHiddenFields,\n where,\n } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Update Operation.`,\n )\n }\n\n const req = await createLocalReq(options, payload)\n req.file = file ?? (await getFileByPath(filePath))\n\n const args = {\n id,\n autosave,\n collection,\n data,\n depth,\n draft,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles,\n payload,\n publishSpecificLocale,\n req,\n showHiddenFields,\n where,\n }\n\n if (options.id) {\n return updateByIDOperation<TSlug>(args)\n }\n return updateOperation<TSlug>(args)\n}\n\nexport default updateLocal\n"],"names":["APIError","getFileByPath","createLocalReq","updateOperation","updateByIDOperation","updateLocal","payload","options","id","autosave","collection","collectionSlug","data","depth","draft","file","filePath","overrideAccess","overrideLock","overwriteExistingFiles","publishSpecificLocale","showHiddenFields","where","collections","String","req","args"],"mappings":"AAWA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,aAAa,QAAQ,oCAAmC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAC9C,SAASC,mBAAmB,QAAQ,mBAAkB;
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/operations/local/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { CollectionSlug, Payload, TypedLocale } from '../../../index.js'\nimport type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js'\nimport type { File } from '../../../uploads/types.js'\nimport type {\n BulkOperationResult,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { getFileByPath } from '../../../uploads/getFileByPath.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { updateOperation } from '../update.js'\nimport { updateByIDOperation } from '../updateByID.js'\n\nexport type BaseOptions<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: TSlug\n /**\n * context, which will then be passed to req.context, which can be read by hooks\n */\n context?: RequestContext\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n draft?: boolean\n fallbackLocale?: TypedLocale\n file?: File\n filePath?: string\n locale?: TypedLocale\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req?: PayloadRequest\n showHiddenFields?: boolean\n user?: Document\n}\n\nexport type ByIDOptions<TSlug extends CollectionSlug> = {\n id: number | string\n limit?: never\n where?: never\n} & BaseOptions<TSlug>\n\nexport type ManyOptions<TSlug extends CollectionSlug> = {\n id?: never\n limit?: number\n where: Where\n} & BaseOptions<TSlug>\n\nexport type Options<TSlug extends CollectionSlug> = ByIDOptions<TSlug> | ManyOptions<TSlug>\n\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ByIDOptions<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ManyOptions<TSlug>,\n): Promise<BulkOperationResult<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const {\n id,\n autosave,\n collection: collectionSlug,\n data,\n depth,\n disableTransaction,\n draft,\n file,\n filePath,\n limit,\n overrideAccess = true,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n showHiddenFields,\n where,\n } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Update Operation.`,\n )\n }\n\n const req = await createLocalReq(options, payload)\n req.file = file ?? (await getFileByPath(filePath))\n\n const args = {\n id,\n autosave,\n collection,\n data,\n depth,\n disableTransaction,\n draft,\n limit,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles,\n payload,\n publishSpecificLocale,\n req,\n showHiddenFields,\n where,\n }\n\n if (options.id) {\n return updateByIDOperation<TSlug>(args)\n }\n return updateOperation<TSlug>(args)\n}\n\nexport default updateLocal\n"],"names":["APIError","getFileByPath","createLocalReq","updateOperation","updateByIDOperation","updateLocal","payload","options","id","autosave","collection","collectionSlug","data","depth","disableTransaction","draft","file","filePath","limit","overrideAccess","overrideLock","overwriteExistingFiles","publishSpecificLocale","showHiddenFields","where","collections","String","req","args"],"mappings":"AAWA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,aAAa,QAAQ,oCAAmC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAC9C,SAASC,mBAAmB,QAAQ,mBAAkB;AAoDtD,eAAeC,YACbC,OAAgB,EAChBC,OAAuB;IAEvB,MAAM,EACJC,EAAE,EACFC,QAAQ,EACRC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,KAAK,EACLC,kBAAkB,EAClBC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACLC,iBAAiB,IAAI,EACrBC,YAAY,EACZC,yBAAyB,KAAK,EAC9BC,qBAAqB,EACrBC,gBAAgB,EAChBC,KAAK,EACN,GAAGjB;IAEJ,MAAMG,aAAaJ,QAAQmB,WAAW,CAACd,eAAe;IAEtD,IAAI,CAACD,YAAY;QACf,MAAM,IAAIV,SACR,CAAC,yBAAyB,EAAE0B,OAAOf,gBAAgB,kCAAkC,CAAC;IAE1F;IAEA,MAAMgB,MAAM,MAAMzB,eAAeK,SAASD;IAC1CqB,IAAIX,IAAI,GAAGA,QAAS,MAAMf,cAAcgB;IAExC,MAAMW,OAAO;QACXpB;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;QACAG;QACAC;QACAC;QACAC;QACAf;QACAgB;QACAK;QACAJ;QACAC;IACF;IAEA,IAAIjB,QAAQC,EAAE,EAAE;QACd,OAAOJ,oBAA2BwB;IACpC;IACA,OAAOzB,gBAAuByB;AAChC;AAEA,eAAevB,YAAW"}
|
|
@@ -6,8 +6,10 @@ export type Arguments<TSlug extends CollectionSlug> = {
|
|
|
6
6
|
collection: Collection;
|
|
7
7
|
data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>;
|
|
8
8
|
depth?: number;
|
|
9
|
+
disableTransaction?: boolean;
|
|
9
10
|
disableVerificationEmail?: boolean;
|
|
10
11
|
draft?: boolean;
|
|
12
|
+
limit?: number;
|
|
11
13
|
overrideAccess?: boolean;
|
|
12
14
|
overrideLock?: boolean;
|
|
13
15
|
overwriteExistingFiles?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,cAAc,gBAClD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,cAAc,gBAClD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAiZpC,CAAA"}
|
|
@@ -23,7 +23,7 @@ import { buildAfterOperation } from './utils.js';
|
|
|
23
23
|
export const updateOperation = async (incomingArgs)=>{
|
|
24
24
|
let args = incomingArgs;
|
|
25
25
|
try {
|
|
26
|
-
const shouldCommit = await initTransaction(args.req);
|
|
26
|
+
const shouldCommit = !args.disableTransaction && await initTransaction(args.req);
|
|
27
27
|
// /////////////////////////////////////
|
|
28
28
|
// beforeOperation - Collection
|
|
29
29
|
// /////////////////////////////////////
|
|
@@ -37,7 +37,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
37
37
|
req: args.req
|
|
38
38
|
}) || args;
|
|
39
39
|
}, Promise.resolve());
|
|
40
|
-
const { collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields, where } = args;
|
|
40
|
+
const { collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, limit = 0, overrideAccess, overrideLock, overwriteExistingFiles = false, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields, where } = args;
|
|
41
41
|
if (!where) {
|
|
42
42
|
throw new APIError("Missing 'where' query of documents to update.", httpStatus.BAD_REQUEST);
|
|
43
43
|
}
|
|
@@ -74,6 +74,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
74
74
|
});
|
|
75
75
|
const query = await payload.db.queryDrafts({
|
|
76
76
|
collection: collectionConfig.slug,
|
|
77
|
+
limit,
|
|
77
78
|
locale,
|
|
78
79
|
pagination: false,
|
|
79
80
|
req,
|
|
@@ -83,7 +84,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
83
84
|
} else {
|
|
84
85
|
const query = await payload.db.find({
|
|
85
86
|
collection: collectionConfig.slug,
|
|
86
|
-
limit
|
|
87
|
+
limit,
|
|
87
88
|
locale,
|
|
88
89
|
pagination: false,
|
|
89
90
|
req,
|
|
@@ -234,10 +235,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
234
235
|
result = await saveVersion({
|
|
235
236
|
id,
|
|
236
237
|
collection: collectionConfig,
|
|
237
|
-
docWithLocales:
|
|
238
|
-
...result,
|
|
239
|
-
createdAt: doc.createdAt
|
|
240
|
-
},
|
|
238
|
+
docWithLocales: result,
|
|
241
239
|
payload,
|
|
242
240
|
req
|
|
243
241
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } 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 { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.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 { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableVerificationEmail?: boolean\n draft?: boolean\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit: 0,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\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 by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: {\n ...result,\n createdAt: doc.createdAt,\n },\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: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n req,\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,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\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: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\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","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","locale","payload","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","limit","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","createdAt","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } 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 { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.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 { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug>> => {\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(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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\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 by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: result,\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: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n req,\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,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\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: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\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","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","limit","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","locale","payload","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export type Arguments<TSlug extends CollectionSlug> = {
|
|
|
7
7
|
collection: Collection;
|
|
8
8
|
data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>;
|
|
9
9
|
depth?: number;
|
|
10
|
+
disableTransaction?: boolean;
|
|
10
11
|
disableVerificationEmail?: boolean;
|
|
11
12
|
draft?: boolean;
|
|
12
13
|
id: number | string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,gBACtD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,gBACtD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CA0ZvC,CAAA"}
|
|
@@ -23,7 +23,7 @@ import { buildAfterOperation } from './utils.js';
|
|
|
23
23
|
export const updateByIDOperation = async (incomingArgs)=>{
|
|
24
24
|
let args = incomingArgs;
|
|
25
25
|
try {
|
|
26
|
-
const shouldCommit = await initTransaction(args.req);
|
|
26
|
+
const shouldCommit = !args.disableTransaction && await initTransaction(args.req);
|
|
27
27
|
// /////////////////////////////////////
|
|
28
28
|
// beforeOperation - Collection
|
|
29
29
|
// /////////////////////////////////////
|
|
@@ -263,10 +263,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
|
|
|
263
263
|
id,
|
|
264
264
|
autosave,
|
|
265
265
|
collection: collectionConfig,
|
|
266
|
-
docWithLocales:
|
|
267
|
-
...result,
|
|
268
|
-
createdAt: docWithLocales.createdAt
|
|
269
|
-
},
|
|
266
|
+
docWithLocales: result,
|
|
270
267
|
draft: shouldSaveDraft,
|
|
271
268
|
payload,
|
|
272
269
|
publishSpecificLocale,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { Args } from '../../fields/hooks/beforeChange/index.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { generatePasswordSaltHash } from '../../auth/strategies/local/generatePasswordSaltHash.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 { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.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 { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n let { data } = args\n const password = data?.password\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n const shouldSavePassword = Boolean(password && collectionConfig.auth && !shouldSaveDraft)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n const 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 // /////////////////////////////////////\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 by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const 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,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n }\n\n if (publishSpecificLocale) {\n publishedDocWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: findOneArgs,\n req,\n })\n\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: {\n ...result,\n createdAt: docWithLocales.createdAt,\n },\n draft: shouldSaveDraft,\n payload,\n publishSpecificLocale,\n req,\n snapshot: versionSnapshotResult,\n })\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: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\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,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\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: 'update',\n previousDoc: originalDoc,\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: 'updateByID',\n result,\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\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","ensureUsernameOrEmail","executeAccess","generatePasswordSaltHash","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","getLatestCollectionVersion","saveVersion","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","payload","showHiddenFields","BAD_REQUEST","data","password","shouldSaveDraft","Boolean","versions","drafts","shouldSavePassword","auth","accessResults","access","update","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","collectionSlug","lockErrorMessage","originalDoc","doc","global","authOptions","newFileData","files","filesToUpload","throwOnMissingFile","overrideDelete","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","_status","published","result","dataToUpdate","hash","salt","db","updateOne","createdAt","snapshot","previousDoc","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { Args } from '../../fields/hooks/beforeChange/index.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { generatePasswordSaltHash } from '../../auth/strategies/local/generatePasswordSaltHash.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 { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.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 { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>> => {\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(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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n let { data } = args\n const password = data?.password\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n const shouldSavePassword = Boolean(password && collectionConfig.auth && !shouldSaveDraft)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n const 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 // /////////////////////////////////////\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 by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const 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,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\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: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n }\n\n if (publishSpecificLocale) {\n publishedDocWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: findOneArgs,\n req,\n })\n\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: result,\n draft: shouldSaveDraft,\n payload,\n publishSpecificLocale,\n req,\n snapshot: versionSnapshotResult,\n })\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: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\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,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\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: 'update',\n previousDoc: originalDoc,\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: 'updateByID',\n result,\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\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","ensureUsernameOrEmail","executeAccess","generatePasswordSaltHash","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","getLatestCollectionVersion","saveVersion","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","payload","showHiddenFields","BAD_REQUEST","data","password","shouldSaveDraft","Boolean","versions","drafts","shouldSavePassword","auth","accessResults","access","update","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","collectionSlug","lockErrorMessage","originalDoc","doc","global","authOptions","newFileData","files","filesToUpload","throwOnMissingFile","overrideDelete","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","_status","published","result","dataToUpdate","hash","salt","db","updateOne","snapshot","previousDoc","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/database/migrations/migrateReset.ts"],"sourcesContent":["import type { PayloadRequest } from '../../types/index.js'\nimport type { BaseDatabaseAdapter } from '../types.js'\n\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getMigrations } from './getMigrations.js'\nimport { readMigrationFiles } from './readMigrationFiles.js'\n\nexport async function migrateReset(this: BaseDatabaseAdapter): Promise<void> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations } = await getMigrations({ payload })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to reset.' })\n return\n }\n\n const req = { payload } as PayloadRequest\n\n // Rollback all migrations in order\n for (const migration of migrationFiles) {\n // Create or update migration in database\n const existingMigration = existingMigrations.find(\n (existing) => existing.name === migration.name,\n )\n if (existingMigration) {\n payload.logger.info({ msg: `Migrating down: ${migration.name}` })\n try {\n const start = Date.now()\n await initTransaction(req)\n await migration.down({ payload, req })\n await payload.delete({\n collection: 'payload-migrations',\n req,\n where: {\n id: {\n equals: existingMigration.id,\n },\n },\n })\n await commitTransaction(req)\n payload.logger.info({ msg: `Migrated down: ${migration.name} (${Date.now() - start}ms)` })\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({ err, msg: `Error running migration ${migration.name}` })\n throw err\n }\n }\n }\n\n // Delete dev migration\n try {\n await payload.delete({\n collection: 'payload-migrations',\n where: {\n batch: {\n equals: -1,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({
|
|
1
|
+
{"version":3,"sources":["../../../src/database/migrations/migrateReset.ts"],"sourcesContent":["import type { PayloadRequest } from '../../types/index.js'\nimport type { BaseDatabaseAdapter } from '../types.js'\n\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getMigrations } from './getMigrations.js'\nimport { readMigrationFiles } from './readMigrationFiles.js'\n\nexport async function migrateReset(this: BaseDatabaseAdapter): Promise<void> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations } = await getMigrations({ payload })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to reset.' })\n return\n }\n\n const req = { payload } as PayloadRequest\n\n // Rollback all migrations in order\n for (const migration of migrationFiles) {\n // Create or update migration in database\n const existingMigration = existingMigrations.find(\n (existing) => existing.name === migration.name,\n )\n if (existingMigration) {\n payload.logger.info({ msg: `Migrating down: ${migration.name}` })\n try {\n const start = Date.now()\n await initTransaction(req)\n await migration.down({ payload, req })\n await payload.delete({\n collection: 'payload-migrations',\n req,\n where: {\n id: {\n equals: existingMigration.id,\n },\n },\n })\n await commitTransaction(req)\n payload.logger.info({ msg: `Migrated down: ${migration.name} (${Date.now() - start}ms)` })\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({ err, msg: `Error running migration ${migration.name}` })\n throw err\n }\n }\n }\n\n // Delete dev migration\n try {\n await payload.delete({\n collection: 'payload-migrations',\n where: {\n batch: {\n equals: -1,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: 'Error deleting dev migration' })\n }\n}\n"],"names":["commitTransaction","initTransaction","killTransaction","getMigrations","readMigrationFiles","migrateReset","payload","migrationFiles","existingMigrations","length","logger","info","msg","req","migration","existingMigration","find","existing","name","start","Date","now","down","delete","collection","where","id","equals","err","error","batch"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,kBAAkB,QAAQ,0BAAyB;AAE5D,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAMH,mBAAmB;QAAEE;IAAQ;IAE1D,MAAM,EAAEE,kBAAkB,EAAE,GAAG,MAAML,cAAc;QAAEG;IAAQ;IAE7D,IAAI,CAACE,oBAAoBC,QAAQ;QAC/BH,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAA0B;QACrD;IACF;IAEA,MAAMC,MAAM;QAAEP;IAAQ;IAEtB,mCAAmC;IACnC,KAAK,MAAMQ,aAAaP,eAAgB;QACtC,yCAAyC;QACzC,MAAMQ,oBAAoBP,mBAAmBQ,IAAI,CAC/C,CAACC,WAAaA,SAASC,IAAI,KAAKJ,UAAUI,IAAI;QAEhD,IAAIH,mBAAmB;YACrBT,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,CAAC,gBAAgB,EAAEE,UAAUI,IAAI,CAAC,CAAC;YAAC;YAC/D,IAAI;gBACF,MAAMC,QAAQC,KAAKC,GAAG;gBACtB,MAAMpB,gBAAgBY;gBACtB,MAAMC,UAAUQ,IAAI,CAAC;oBAAEhB;oBAASO;gBAAI;gBACpC,MAAMP,QAAQiB,MAAM,CAAC;oBACnBC,YAAY;oBACZX;oBACAY,OAAO;wBACLC,IAAI;4BACFC,QAAQZ,kBAAkBW,EAAE;wBAC9B;oBACF;gBACF;gBACA,MAAM1B,kBAAkBa;gBACxBP,QAAQI,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,CAAC,gBAAgB,EAAEE,UAAUI,IAAI,CAAC,EAAE,EAAEE,KAAKC,GAAG,KAAKF,MAAM,GAAG,CAAC;gBAAC;YAC3F,EAAE,OAAOS,KAAc;gBACrB,MAAM1B,gBAAgBW;gBACtBP,QAAQI,MAAM,CAACmB,KAAK,CAAC;oBAAED;oBAAKhB,KAAK,CAAC,wBAAwB,EAAEE,UAAUI,IAAI,CAAC,CAAC;gBAAC;gBAC7E,MAAMU;YACR;QACF;IACF;IAEA,uBAAuB;IACvB,IAAI;QACF,MAAMtB,QAAQiB,MAAM,CAAC;YACnBC,YAAY;YACZC,OAAO;gBACLK,OAAO;oBACLH,QAAQ,CAAC;gBACX;YACF;QACF;IACF,EAAE,OAAOC,KAAc;QACrBtB,QAAQI,MAAM,CAACmB,KAAK,CAAC;YAAED;YAAKhB,KAAK;QAA+B;IAClE;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sl.d.ts","sourceRoot":"","sources":["../../../src/exports/i18n/sl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uCAAuC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/exports/i18n/sl.ts"],"sourcesContent":["export { sl } from '@payloadcms/translations/languages/sl'\n"],"names":["sl"],"mappings":"AAAA,SAASA,EAAE,QAAQ,wCAAuC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAkC,MAAM,YAAY,CAAA;AAK3E,eAAO,MAAM,iBAAiB,0CAK3B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,
|
|
1
|
+
{"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAkC,MAAM,YAAY,CAAA;AAK3E,eAAO,MAAM,iBAAiB,0CAK3B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,SA2EA,CAAA"}
|
|
@@ -58,6 +58,8 @@ export const sanitizeJoinField = ({ config, field, joins, schemaPath })=>{
|
|
|
58
58
|
join.targetField = joinRelationship;
|
|
59
59
|
// override the join field localized property to use whatever the relationship field has
|
|
60
60
|
field.localized = joinRelationship.localized;
|
|
61
|
+
// override the join field hasMany property to use whatever the relationship field has
|
|
62
|
+
field.hasMany = joinRelationship.hasMany;
|
|
61
63
|
if (!joins[field.collection]) {
|
|
62
64
|
joins[field.collection] = [
|
|
63
65
|
join
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { JoinField, RelationshipField, UploadField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { traverseFields } from '../../utilities/traverseFields.js'\nexport const sanitizeJoinField = ({\n config,\n field,\n joins,\n schemaPath,\n}: {\n config: Config\n field: JoinField\n joins?: SanitizedJoins\n schemaPath?: string\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (!field.maxDepth) {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n schemaPath: `${schemaPath || ''}${schemaPath ? '.' : ''}${field.name}`,\n targetField: undefined,\n }\n const joinCollection = config.collections.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n let joinRelationship: RelationshipField | UploadField\n\n const pathSegments = field.on.split('.') // Split the schema path into segments\n let currentSegmentIndex = 0\n\n // Traverse fields and match based on the schema path\n traverseFields({\n callback: ({ field, next }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n const currentSegment = pathSegments[currentSegmentIndex]\n // match field on path segments\n if ('name' in field && field.name === currentSegment) {\n // Check if this is the last segment in the path\n if (\n (currentSegmentIndex === pathSegments.length - 1 &&\n 'type' in field &&\n field.type === 'relationship') ||\n field.type === 'upload'\n ) {\n joinRelationship = field // Return the matched field\n next()\n return true\n } else {\n // Move to the next path segment and continue traversal\n currentSegmentIndex++\n }\n } else {\n // skip fields in non-matching path segments\n next()\n return\n }\n },\n fields: joinCollection.fields,\n })\n\n if (!joinRelationship) {\n throw new InvalidFieldJoin(join.field)\n }\n if (Array.isArray(joinRelationship.relationTo)) {\n throw new APIError('Join fields cannot be used with polymorphic relationships.')\n }\n\n join.targetField = joinRelationship\n\n // override the join field localized property to use whatever the relationship field has\n field.localized = joinRelationship.localized\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection].push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","traverseFields","sanitizeJoinField","config","field","joins","schemaPath","maxDepth","join","name","targetField","undefined","joinCollection","collections","find","collection","slug","joinRelationship","pathSegments","on","split","currentSegmentIndex","callback","next","currentSegment","length","type","fields","Array","isArray","relationTo","localized","push"],"mappings":"AAIA,SAASA,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAM,EACNC,KAAK,EACLC,KAAK,EACLC,UAAU,EAMX;IACC,uGAAuG;IACvG,IAAI,OAAOD,UAAU,aAAa;QAChC,MAAM,IAAIN,SAAS;IACrB;IACA,IAAI,CAACK,MAAMG,QAAQ,EAAE;QACnBH,MAAMG,QAAQ,GAAG;IACnB;IACA,MAAMC,OAAsB;QAC1BJ;QACAE,YAAY,CAAC,EAAEA,cAAc,GAAG,EAAEA,aAAa,MAAM,GAAG,EAAEF,MAAMK,IAAI,CAAC,CAAC;QACtEC,aAAaC;IACf;IACA,MAAMC,iBAAiBT,OAAOU,WAAW,CAACC,IAAI,CAC5C,CAACC,aAAeA,WAAWC,IAAI,KAAKZ,MAAMW,UAAU;IAEtD,IAAI,CAACH,gBAAgB;QACnB,MAAM,IAAIZ,iBAAiBI;IAC7B;IACA,IAAIa;IAEJ,MAAMC,eAAed,MAAMe,EAAE,CAACC,KAAK,CAAC,KAAK,sCAAsC;;IAC/E,IAAIC,sBAAsB;IAE1B,qDAAqD;IACrDpB,eAAe;QACbqB,UAAU,CAAC,EAAElB,KAAK,EAAEmB,IAAI,EAAE;YACxB,IAAI,CAAE,CAAA,UAAUnB,KAAI,KAAM,CAACA,MAAMK,IAAI,EAAE;gBACrC;YACF;YACA,MAAMe,iBAAiBN,YAAY,CAACG,oBAAoB;YACxD,+BAA+B;YAC/B,IAAI,UAAUjB,SAASA,MAAMK,IAAI,KAAKe,gBAAgB;gBACpD,gDAAgD;gBAChD,IACE,AAACH,wBAAwBH,aAAaO,MAAM,GAAG,KAC7C,UAAUrB,SACVA,MAAMsB,IAAI,KAAK,kBACjBtB,MAAMsB,IAAI,KAAK,UACf;oBACAT,mBAAmBb,MAAM,2BAA2B;;oBACpDmB;oBACA,OAAO;gBACT,OAAO;oBACL,uDAAuD;oBACvDF;gBACF;YACF,OAAO;gBACL,4CAA4C;gBAC5CE;gBACA;YACF;QACF;QACAI,QAAQf,eAAee,MAAM;IAC/B;IAEA,IAAI,CAACV,kBAAkB;QACrB,MAAM,IAAIjB,iBAAiBQ,KAAKJ,KAAK;IACvC;IACA,IAAIwB,MAAMC,OAAO,CAACZ,iBAAiBa,UAAU,GAAG;QAC9C,MAAM,IAAI/B,SAAS;IACrB;IAEAS,KAAKE,WAAW,GAAGO;IAEnB,wFAAwF;IACxFb,MAAM2B,SAAS,GAAGd,iBAAiBc,SAAS;
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { JoinField, RelationshipField, UploadField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { traverseFields } from '../../utilities/traverseFields.js'\nexport const sanitizeJoinField = ({\n config,\n field,\n joins,\n schemaPath,\n}: {\n config: Config\n field: JoinField\n joins?: SanitizedJoins\n schemaPath?: string\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (!field.maxDepth) {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n schemaPath: `${schemaPath || ''}${schemaPath ? '.' : ''}${field.name}`,\n targetField: undefined,\n }\n const joinCollection = config.collections.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n let joinRelationship: RelationshipField | UploadField\n\n const pathSegments = field.on.split('.') // Split the schema path into segments\n let currentSegmentIndex = 0\n\n // Traverse fields and match based on the schema path\n traverseFields({\n callback: ({ field, next }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n const currentSegment = pathSegments[currentSegmentIndex]\n // match field on path segments\n if ('name' in field && field.name === currentSegment) {\n // Check if this is the last segment in the path\n if (\n (currentSegmentIndex === pathSegments.length - 1 &&\n 'type' in field &&\n field.type === 'relationship') ||\n field.type === 'upload'\n ) {\n joinRelationship = field // Return the matched field\n next()\n return true\n } else {\n // Move to the next path segment and continue traversal\n currentSegmentIndex++\n }\n } else {\n // skip fields in non-matching path segments\n next()\n return\n }\n },\n fields: joinCollection.fields,\n })\n\n if (!joinRelationship) {\n throw new InvalidFieldJoin(join.field)\n }\n if (Array.isArray(joinRelationship.relationTo)) {\n throw new APIError('Join fields cannot be used with polymorphic relationships.')\n }\n\n join.targetField = joinRelationship\n\n // override the join field localized property to use whatever the relationship field has\n field.localized = joinRelationship.localized\n // override the join field hasMany property to use whatever the relationship field has\n field.hasMany = joinRelationship.hasMany\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection].push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","traverseFields","sanitizeJoinField","config","field","joins","schemaPath","maxDepth","join","name","targetField","undefined","joinCollection","collections","find","collection","slug","joinRelationship","pathSegments","on","split","currentSegmentIndex","callback","next","currentSegment","length","type","fields","Array","isArray","relationTo","localized","hasMany","push"],"mappings":"AAIA,SAASA,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAM,EACNC,KAAK,EACLC,KAAK,EACLC,UAAU,EAMX;IACC,uGAAuG;IACvG,IAAI,OAAOD,UAAU,aAAa;QAChC,MAAM,IAAIN,SAAS;IACrB;IACA,IAAI,CAACK,MAAMG,QAAQ,EAAE;QACnBH,MAAMG,QAAQ,GAAG;IACnB;IACA,MAAMC,OAAsB;QAC1BJ;QACAE,YAAY,CAAC,EAAEA,cAAc,GAAG,EAAEA,aAAa,MAAM,GAAG,EAAEF,MAAMK,IAAI,CAAC,CAAC;QACtEC,aAAaC;IACf;IACA,MAAMC,iBAAiBT,OAAOU,WAAW,CAACC,IAAI,CAC5C,CAACC,aAAeA,WAAWC,IAAI,KAAKZ,MAAMW,UAAU;IAEtD,IAAI,CAACH,gBAAgB;QACnB,MAAM,IAAIZ,iBAAiBI;IAC7B;IACA,IAAIa;IAEJ,MAAMC,eAAed,MAAMe,EAAE,CAACC,KAAK,CAAC,KAAK,sCAAsC;;IAC/E,IAAIC,sBAAsB;IAE1B,qDAAqD;IACrDpB,eAAe;QACbqB,UAAU,CAAC,EAAElB,KAAK,EAAEmB,IAAI,EAAE;YACxB,IAAI,CAAE,CAAA,UAAUnB,KAAI,KAAM,CAACA,MAAMK,IAAI,EAAE;gBACrC;YACF;YACA,MAAMe,iBAAiBN,YAAY,CAACG,oBAAoB;YACxD,+BAA+B;YAC/B,IAAI,UAAUjB,SAASA,MAAMK,IAAI,KAAKe,gBAAgB;gBACpD,gDAAgD;gBAChD,IACE,AAACH,wBAAwBH,aAAaO,MAAM,GAAG,KAC7C,UAAUrB,SACVA,MAAMsB,IAAI,KAAK,kBACjBtB,MAAMsB,IAAI,KAAK,UACf;oBACAT,mBAAmBb,MAAM,2BAA2B;;oBACpDmB;oBACA,OAAO;gBACT,OAAO;oBACL,uDAAuD;oBACvDF;gBACF;YACF,OAAO;gBACL,4CAA4C;gBAC5CE;gBACA;YACF;QACF;QACAI,QAAQf,eAAee,MAAM;IAC/B;IAEA,IAAI,CAACV,kBAAkB;QACrB,MAAM,IAAIjB,iBAAiBQ,KAAKJ,KAAK;IACvC;IACA,IAAIwB,MAAMC,OAAO,CAACZ,iBAAiBa,UAAU,GAAG;QAC9C,MAAM,IAAI/B,SAAS;IACrB;IAEAS,KAAKE,WAAW,GAAGO;IAEnB,wFAAwF;IACxFb,MAAM2B,SAAS,GAAGd,iBAAiBc,SAAS;IAC5C,sFAAsF;IACtF3B,MAAM4B,OAAO,GAAGf,iBAAiBe,OAAO;IAExC,IAAI,CAAC3B,KAAK,CAACD,MAAMW,UAAU,CAAC,EAAE;QAC5BV,KAAK,CAACD,MAAMW,UAAU,CAAC,GAAG;YAACP;SAAK;IAClC,OAAO;QACLH,KAAK,CAACD,MAAMW,UAAU,CAAC,CAACkB,IAAI,CAACzB;IAC/B;AACF,EAAC"}
|
|
@@ -266,6 +266,7 @@ export interface FieldBase {
|
|
|
266
266
|
/**
|
|
267
267
|
* Pass `true` to disable field in the DB
|
|
268
268
|
* for [Virtual Fields](https://payloadcms.com/blog/learn-how-virtual-fields-can-help-solve-common-cms-challenges):
|
|
269
|
+
* A virtual field cannot be used in `admin.useAsTitle`
|
|
269
270
|
*/
|
|
270
271
|
virtual?: boolean;
|
|
271
272
|
}
|
|
@@ -1116,6 +1117,10 @@ export type JoinField = {
|
|
|
1116
1117
|
*/
|
|
1117
1118
|
collection: CollectionSlug;
|
|
1118
1119
|
defaultValue?: never;
|
|
1120
|
+
/**
|
|
1121
|
+
* This does not need to be set and will be overridden by the relationship field's hasMany property.
|
|
1122
|
+
*/
|
|
1123
|
+
hasMany?: boolean;
|
|
1119
1124
|
hidden?: false;
|
|
1120
1125
|
index?: never;
|
|
1121
1126
|
/**
|