payload 3.90.2 → 3.91.0-internal.c1569dc

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.
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/refresh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAO3D,eAAO,MAAM,cAAc,EAAE,cAuC5B,CAAA"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/refresh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAO3D,eAAO,MAAM,cAAc,EAAE,cAwC5B,CAAA"}
@@ -14,21 +14,19 @@ export const refreshHandler = async (req)=>{
14
14
  collection,
15
15
  req
16
16
  });
17
+ const { refreshedToken, ...resultWithoutToken } = result;
17
18
  if (result.setCookie) {
18
19
  const cookie = generatePayloadCookie({
19
20
  collectionAuthConfig: collection.config.auth,
20
21
  cookiePrefix: req.payload.config.cookiePrefix,
21
- token: result.refreshedToken
22
+ token: refreshedToken
22
23
  });
23
- if (collection.config.auth.removeTokenFromResponses) {
24
- // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
25
- delete result.refreshedToken;
26
- }
27
24
  headers.set('Set-Cookie', cookie);
28
25
  }
26
+ const responseResult = collection.config.auth.removeTokenFromResponses ? resultWithoutToken : result;
29
27
  return Response.json({
30
28
  message: t('authentication:tokenRefreshSuccessful'),
31
- ...result
29
+ ...responseResult
32
30
  }, {
33
31
  headers,
34
32
  status: httpStatus.OK
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/endpoints/refresh.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\n\nimport { getRequestCollection } from '../../utilities/getRequestEntity.js'\nimport { headersWithCors } from '../../utilities/headersWithCors.js'\nimport { generatePayloadCookie } from '../cookies.js'\nimport { refreshOperation } from '../operations/refresh.js'\n\nexport const refreshHandler: PayloadHandler = async (req) => {\n const collection = getRequestCollection(req)\n const { t } = req\n\n const headers = headersWithCors({\n headers: new Headers(),\n req,\n })\n\n const result = await refreshOperation({\n collection,\n req,\n })\n\n if (result.setCookie) {\n const cookie = generatePayloadCookie({\n collectionAuthConfig: collection.config.auth,\n cookiePrefix: req.payload.config.cookiePrefix,\n token: result.refreshedToken,\n })\n\n if (collection.config.auth.removeTokenFromResponses) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n delete result.refreshedToken\n }\n\n headers.set('Set-Cookie', cookie)\n }\n\n return Response.json(\n {\n message: t('authentication:tokenRefreshSuccessful'),\n ...result,\n },\n {\n headers,\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["status","httpStatus","getRequestCollection","headersWithCors","generatePayloadCookie","refreshOperation","refreshHandler","req","collection","t","headers","Headers","result","setCookie","cookie","collectionAuthConfig","config","auth","cookiePrefix","payload","token","refreshedToken","removeTokenFromResponses","set","Response","json","message","OK"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAIlD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,qBAAqB,QAAQ,gBAAe;AACrD,SAASC,gBAAgB,QAAQ,2BAA0B;AAE3D,OAAO,MAAMC,iBAAiC,OAAOC;IACnD,MAAMC,aAAaN,qBAAqBK;IACxC,MAAM,EAAEE,CAAC,EAAE,GAAGF;IAEd,MAAMG,UAAUP,gBAAgB;QAC9BO,SAAS,IAAIC;QACbJ;IACF;IAEA,MAAMK,SAAS,MAAMP,iBAAiB;QACpCG;QACAD;IACF;IAEA,IAAIK,OAAOC,SAAS,EAAE;QACpB,MAAMC,SAASV,sBAAsB;YACnCW,sBAAsBP,WAAWQ,MAAM,CAACC,IAAI;YAC5CC,cAAcX,IAAIY,OAAO,CAACH,MAAM,CAACE,YAAY;YAC7CE,OAAOR,OAAOS,cAAc;QAC9B;QAEA,IAAIb,WAAWQ,MAAM,CAACC,IAAI,CAACK,wBAAwB,EAAE;YACnD,oFAAoF;YACpF,OAAOV,OAAOS,cAAc;QAC9B;QAEAX,QAAQa,GAAG,CAAC,cAAcT;IAC5B;IAEA,OAAOU,SAASC,IAAI,CAClB;QACEC,SAASjB,EAAE;QACX,GAAGG,MAAM;IACX,GACA;QACEF;QACAV,QAAQC,WAAW0B,EAAE;IACvB;AAEJ,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/endpoints/refresh.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\n\nimport { getRequestCollection } from '../../utilities/getRequestEntity.js'\nimport { headersWithCors } from '../../utilities/headersWithCors.js'\nimport { generatePayloadCookie } from '../cookies.js'\nimport { refreshOperation } from '../operations/refresh.js'\n\nexport const refreshHandler: PayloadHandler = async (req) => {\n const collection = getRequestCollection(req)\n const { t } = req\n\n const headers = headersWithCors({\n headers: new Headers(),\n req,\n })\n\n const result = await refreshOperation({\n collection,\n req,\n })\n\n const { refreshedToken, ...resultWithoutToken } = result\n\n if (result.setCookie) {\n const cookie = generatePayloadCookie({\n collectionAuthConfig: collection.config.auth,\n cookiePrefix: req.payload.config.cookiePrefix,\n token: refreshedToken,\n })\n\n headers.set('Set-Cookie', cookie)\n }\n\n const responseResult = collection.config.auth.removeTokenFromResponses\n ? resultWithoutToken\n : result\n\n return Response.json(\n {\n message: t('authentication:tokenRefreshSuccessful'),\n ...responseResult,\n },\n {\n headers,\n status: httpStatus.OK,\n },\n )\n}\n"],"names":["status","httpStatus","getRequestCollection","headersWithCors","generatePayloadCookie","refreshOperation","refreshHandler","req","collection","t","headers","Headers","result","refreshedToken","resultWithoutToken","setCookie","cookie","collectionAuthConfig","config","auth","cookiePrefix","payload","token","set","responseResult","removeTokenFromResponses","Response","json","message","OK"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAIlD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,qBAAqB,QAAQ,gBAAe;AACrD,SAASC,gBAAgB,QAAQ,2BAA0B;AAE3D,OAAO,MAAMC,iBAAiC,OAAOC;IACnD,MAAMC,aAAaN,qBAAqBK;IACxC,MAAM,EAAEE,CAAC,EAAE,GAAGF;IAEd,MAAMG,UAAUP,gBAAgB;QAC9BO,SAAS,IAAIC;QACbJ;IACF;IAEA,MAAMK,SAAS,MAAMP,iBAAiB;QACpCG;QACAD;IACF;IAEA,MAAM,EAAEM,cAAc,EAAE,GAAGC,oBAAoB,GAAGF;IAElD,IAAIA,OAAOG,SAAS,EAAE;QACpB,MAAMC,SAASZ,sBAAsB;YACnCa,sBAAsBT,WAAWU,MAAM,CAACC,IAAI;YAC5CC,cAAcb,IAAIc,OAAO,CAACH,MAAM,CAACE,YAAY;YAC7CE,OAAOT;QACT;QAEAH,QAAQa,GAAG,CAAC,cAAcP;IAC5B;IAEA,MAAMQ,iBAAiBhB,WAAWU,MAAM,CAACC,IAAI,CAACM,wBAAwB,GAClEX,qBACAF;IAEJ,OAAOc,SAASC,IAAI,CAClB;QACEC,SAASnB,EAAE;QACX,GAAGe,cAAc;IACnB,GACA;QACEd;QACAV,QAAQC,WAAW4B,EAAE;IACvB;AAEJ,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAYrF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GACnD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEjD,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,YAAY,KACzB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAsS3F,CAAA"}
1
+ {"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EAEzB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAerF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GACnD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEjD,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,YAAY,KACzB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAuV3F,CAAA"}
@@ -11,6 +11,9 @@ import { getSelectMode } from '../../utilities/getSelectMode.js';
11
11
  import { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js';
12
12
  import { killTransaction } from '../../utilities/killTransaction.js';
13
13
  import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
14
+ import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
15
+ import { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js';
16
+ import { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js';
14
17
  import { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js';
15
18
  import { buildAfterOperation } from './utilities/buildAfterOperation.js';
16
19
  import { buildBeforeOperation } from './utilities/buildBeforeOperation.js';
@@ -45,6 +48,10 @@ export const findByIDOperation = async (incomingArgs)=>{
45
48
  if (accessResult === false) {
46
49
  return null;
47
50
  }
51
+ const isValidID = typeof id === 'string' && id.length > 0 || typeof id === 'number' && Number.isFinite(id);
52
+ if (!isValidID) {
53
+ throw new NotFound(t);
54
+ }
48
55
  const where = {
49
56
  id: {
50
57
  equals: id
@@ -80,6 +87,9 @@ export const findByIDOperation = async (incomingArgs)=>{
80
87
  // /////////////////////////////////////
81
88
  // Find by ID
82
89
  // /////////////////////////////////////
90
+ const shouldQueryDrafts = !args.data && replaceWithVersion && hasDraftsEnabled(collectionConfig);
91
+ let docFromDB;
92
+ let query = fullWhere;
83
93
  let dbSelect = select;
84
94
  if (collectionConfig.versions?.drafts && replaceWithVersion && select && getSelectMode(select) === 'include') {
85
95
  dbSelect = {
@@ -99,10 +109,48 @@ export const findByIDOperation = async (incomingArgs)=>{
99
109
  select: dbSelect,
100
110
  where: fullWhere
101
111
  };
102
- if (!findOneArgs.where?.and?.[0]?.id) {
103
- throw new NotFound(t);
112
+ if (shouldQueryDrafts) {
113
+ query = appendVersionToQueryKey(fullWhere);
114
+ await validateQueryPaths({
115
+ collectionConfig,
116
+ overrideAccess,
117
+ req,
118
+ versionFields: buildVersionCollectionFields(req.payload.config, collectionConfig, true),
119
+ where: appendVersionToQueryKey(where)
120
+ });
121
+ const { docs } = await req.payload.db.queryDrafts({
122
+ collection: collectionConfig.slug,
123
+ joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,
124
+ limit: 1,
125
+ locale: locale,
126
+ pagination: false,
127
+ req,
128
+ select: getQueryDraftsSelect({
129
+ select
130
+ }),
131
+ where: query
132
+ });
133
+ docFromDB = docs[0];
134
+ if (!docFromDB) {
135
+ const { docs: existingVersions } = await req.payload.db.queryDrafts({
136
+ collection: collectionConfig.slug,
137
+ limit: 1,
138
+ locale: locale,
139
+ pagination: false,
140
+ req,
141
+ select: {
142
+ parent: true
143
+ },
144
+ where: appendVersionToQueryKey(where)
145
+ });
146
+ if (!existingVersions[0]) {
147
+ query = fullWhere;
148
+ docFromDB = await req.payload.db.findOne(findOneArgs);
149
+ }
150
+ }
151
+ } else {
152
+ docFromDB = await req.payload.db.findOne(findOneArgs);
104
153
  }
105
- const docFromDB = await req.payload.db.findOne(findOneArgs);
106
154
  if (!docFromDB && !args.data) {
107
155
  if (!disableErrors) {
108
156
  throw new NotFound(req.t);
@@ -170,7 +218,7 @@ export const findByIDOperation = async (incomingArgs)=>{
170
218
  // /////////////////////////////////////
171
219
  // Replace document with draft if available
172
220
  // /////////////////////////////////////
173
- if (replaceWithVersion && hasDraftsEnabled(collectionConfig)) {
221
+ if (!shouldQueryDrafts && replaceWithVersion && hasDraftsEnabled(collectionConfig)) {
174
222
  result = await replaceWithDraftIfAvailable({
175
223
  accessResult,
176
224
  doc: result,
@@ -191,7 +239,7 @@ export const findByIDOperation = async (incomingArgs)=>{
191
239
  context: req.context,
192
240
  doc: result,
193
241
  overrideAccess,
194
- query: findOneArgs.where,
242
+ query,
195
243
  req
196
244
  }) || result;
197
245
  }
@@ -226,7 +274,7 @@ export const findByIDOperation = async (incomingArgs)=>{
226
274
  context: req.context,
227
275
  doc: result,
228
276
  overrideAccess,
229
- query: findOneArgs.where,
277
+ query,
230
278
  req
231
279
  }) || result;
232
280
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, FindOptions, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n JsonObject,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead, type AfterReadArgs } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { getSelectMode } from '../../utilities/getSelectMode.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type FindByIDArgs = {\n collection: Collection\n currentDepth?: number\n /**\n * You may pass the document data directly which will skip the `db.findOne` database query.\n * This is useful if you want to use this endpoint solely for running hooks and populating data.\n */\n data?: Record<string, unknown>\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<AfterReadArgs<JsonObject>, 'flattenLocales'> &\n Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: FindByIDArgs,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'read',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: replaceWithVersion = false,\n flattenLocales,\n includeLockStatus: includeLockStatusFromArgs,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n const includeLockStatus =\n includeLockStatusFromArgs && req.payload.collections?.[lockedDocumentsCollectionSlug]\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null!\n }\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResult)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({\n fields: collectionConfig.flattenedFields,\n payload: args.req.payload,\n where: fullWhere,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n // execute only if there's a custom ID and potentially overwriten access on id\n if (req.payload.collections[collectionConfig.slug]!.customIDType) {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n let dbSelect = select\n\n if (\n collectionConfig.versions?.drafts &&\n replaceWithVersion &&\n select &&\n getSelectMode(select) === 'include'\n ) {\n dbSelect = { ...select, createdAt: true, updatedAt: true }\n }\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n draftsEnabled: replaceWithVersion,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale: locale!,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select: dbSelect,\n where: fullWhere,\n }\n\n if (!findOneArgs.where?.and?.[0]?.id) {\n throw new NotFound(t)\n }\n\n const docFromDB = await req.payload.db.findOne(findOneArgs)\n\n if (!docFromDB && !args.data) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n return null!\n }\n\n let result: DataFromCollectionSlug<TSlug> =\n (args.data as DataFromCollectionSlug<TSlug>) ?? docFromDB!\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus: (JsonObject & TypeWithID) | null = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]!\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (replaceWithVersion && hasDraftsEnabled(collectionConfig)) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result,\n draft: replaceWithVersion,\n fallbackLocale: fallbackLocale!,\n flattenLocales,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n query: findOneArgs.where,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","sanitizeWhereQuery","NotFound","afterRead","validateQueryPaths","lockedDocumentsCollectionSlug","appendNonTrashedFilter","getSelectMode","hasDraftsEnabled","killTransaction","sanitizeSelect","replaceWithDraftIfAvailable","buildAfterOperation","buildBeforeOperation","findByIDOperation","incomingArgs","args","collection","config","operation","overrideAccess","id","collectionConfig","currentDepth","depth","disableErrors","draft","replaceWithVersion","flattenLocales","includeLockStatus","includeLockStatusFromArgs","joins","populate","req","fallbackLocale","locale","t","select","incomingSelect","showHiddenFields","trash","payload","collections","fields","flattenedFields","forceSelect","accessResult","access","read","where","equals","fullWhere","enableTrash","sanitizedJoins","slug","customIDType","dbSelect","versions","drafts","createdAt","updatedAt","findOneArgs","draftsEnabled","payloadAPI","transactionID","and","docFromDB","db","findOne","data","result","auth","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","limit","pagination","greater_than","Date","getTime","docs","length","_isLocked","_userEditing","user","value","doc","entity","entityType","hooks","beforeRead","hook","context","query","global","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, FindOptions, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n JsonObject,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead, type AfterReadArgs } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { lockedDocumentsCollectionSlug } from '../../locked-documents/config.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { getSelectMode } from '../../utilities/getSelectMode.js'\nimport { hasDraftsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { replaceWithDraftIfAvailable } from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type FindByIDArgs = {\n collection: Collection\n currentDepth?: number\n /**\n * You may pass the document data directly which will skip the `db.findOne` database query.\n * This is useful if you want to use this endpoint solely for running hooks and populating data.\n */\n data?: Record<string, unknown>\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<AfterReadArgs<JsonObject>, 'flattenLocales'> &\n Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: FindByIDArgs,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'read',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: replaceWithVersion = false,\n flattenLocales,\n includeLockStatus: includeLockStatusFromArgs,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n const includeLockStatus =\n includeLockStatusFromArgs && req.payload.collections?.[lockedDocumentsCollectionSlug]\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n forceSelect: collectionConfig.forceSelect,\n select: incomingSelect,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null!\n }\n\n const isValidID =\n (typeof id === 'string' && id.length > 0) || (typeof id === 'number' && Number.isFinite(id))\n\n if (!isValidID) {\n throw new NotFound(t)\n }\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResult)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({\n fields: collectionConfig.flattenedFields,\n payload: args.req.payload,\n where: fullWhere,\n })\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n // execute only if there's a custom ID and potentially overwriten access on id\n if (req.payload.collections[collectionConfig.slug]!.customIDType) {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const shouldQueryDrafts = !args.data && replaceWithVersion && hasDraftsEnabled(collectionConfig)\n let docFromDB: DataFromCollectionSlug<TSlug> | null | undefined\n let query = fullWhere\n\n let dbSelect = select\n\n if (\n collectionConfig.versions?.drafts &&\n replaceWithVersion &&\n select &&\n getSelectMode(select) === 'include'\n ) {\n dbSelect = { ...select, createdAt: true, updatedAt: true }\n }\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n draftsEnabled: replaceWithVersion,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale: locale!,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select: dbSelect,\n where: fullWhere,\n }\n\n if (shouldQueryDrafts) {\n query = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(req.payload.config, collectionConfig, true),\n where: appendVersionToQueryKey(where),\n })\n\n const { docs } = await req.payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select: getQueryDraftsSelect({ select }),\n where: query,\n })\n\n docFromDB = docs[0]\n\n if (!docFromDB) {\n const { docs: existingVersions } = await req.payload.db.queryDrafts({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select: { parent: true },\n where: appendVersionToQueryKey(where),\n })\n\n if (!existingVersions[0]) {\n query = fullWhere\n docFromDB = await req.payload.db.findOne(findOneArgs)\n }\n }\n } else {\n docFromDB = await req.payload.db.findOne(findOneArgs)\n }\n\n if (!docFromDB && !args.data) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n return null!\n }\n\n let result: DataFromCollectionSlug<TSlug> =\n (args.data as DataFromCollectionSlug<TSlug>) ?? docFromDB!\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus: (JsonObject & TypeWithID) | null = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: lockedDocumentsCollectionSlug,\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]!\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (!shouldQueryDrafts && replaceWithVersion && hasDraftsEnabled(collectionConfig)) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n query,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result,\n draft: replaceWithVersion,\n fallbackLocale: fallbackLocale!,\n flattenLocales,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n query,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","sanitizeWhereQuery","NotFound","afterRead","validateQueryPaths","lockedDocumentsCollectionSlug","appendNonTrashedFilter","getSelectMode","hasDraftsEnabled","killTransaction","sanitizeSelect","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","replaceWithDraftIfAvailable","buildAfterOperation","buildBeforeOperation","findByIDOperation","incomingArgs","args","collection","config","operation","overrideAccess","id","collectionConfig","currentDepth","depth","disableErrors","draft","replaceWithVersion","flattenLocales","includeLockStatus","includeLockStatusFromArgs","joins","populate","req","fallbackLocale","locale","t","select","incomingSelect","showHiddenFields","trash","payload","collections","fields","flattenedFields","forceSelect","accessResult","access","read","isValidID","length","Number","isFinite","where","equals","fullWhere","enableTrash","sanitizedJoins","slug","customIDType","shouldQueryDrafts","data","docFromDB","query","dbSelect","versions","drafts","createdAt","updatedAt","findOneArgs","draftsEnabled","payloadAPI","transactionID","versionFields","docs","db","queryDrafts","limit","pagination","existingVersions","parent","findOne","result","auth","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","and","greater_than","Date","getTime","_isLocked","_userEditing","user","value","doc","entity","entityType","hooks","beforeRead","hook","context","global","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findVersionByID.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/findVersionByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAY/D,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;IACnC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,wBAAwB,GAAU,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC,cACnE,SAAS,KACd,OAAO,CAAC,CAAC,CA4IX,CAAA"}
1
+ {"version":3,"file":"findVersionByID.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/findVersionByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAY/D,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;IACnC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,wBAAwB,GAAU,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC,cACnE,SAAS,KACd,OAAO,CAAC,CAAC,CA+IX,CAAA"}
@@ -22,6 +22,10 @@ export const findVersionByIDOperation = async (args)=>{
22
22
  if (accessResults === false) {
23
23
  return null;
24
24
  }
25
+ const isValidID = typeof id === 'string' && id.length > 0 || typeof id === 'number' && Number.isFinite(id);
26
+ if (!isValidID) {
27
+ throw new NotFound(req.t);
28
+ }
25
29
  const hasWhereAccess = typeof accessResults === 'object';
26
30
  const select = sanitizeSelect({
27
31
  fields: buildVersionGlobalFields(payload.config, globalConfig, true),
@@ -46,9 +50,6 @@ export const findVersionByIDOperation = async (args)=>{
46
50
  // /////////////////////////////////////
47
51
  // Find by ID
48
52
  // /////////////////////////////////////
49
- if (!findGlobalVersionsArgs.where?.and?.[0]?.id) {
50
- throw new NotFound(req.t);
51
- }
52
53
  const { docs: results } = await payload.db.findGlobalVersions(findGlobalVersionsArgs);
53
54
  if (!results || results?.length === 0) {
54
55
  if (!disableErrors) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/globals/operations/findVersionByID.ts"],"sourcesContent":["import type { FindOptions } from '../../collections/operations/local/find.js'\nimport type { FindGlobalVersionsArgs } from '../../database/types.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { SanitizedGlobalConfig } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionGlobalFields } from '../../versions/buildGlobalFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\n\nexport type Arguments = {\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n globalConfig: SanitizedGlobalConfig\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findVersionByIDOperation = async <T extends TypeWithVersion<T> = any>(\n args: Arguments,\n): Promise<T> => {\n const {\n id,\n currentDepth,\n depth,\n disableErrors,\n globalConfig,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n } = args\n\n try {\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, globalConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const select = sanitizeSelect({\n fields: buildVersionGlobalFields(payload.config, globalConfig, true),\n forceSelect: getQueryDraftsSelect({ select: globalConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const findGlobalVersionsArgs: FindGlobalVersionsArgs = {\n global: globalConfig.slug,\n limit: 1,\n locale: locale!,\n req,\n select,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n if (!findGlobalVersionsArgs.where?.and?.[0]?.id) {\n throw new NotFound(req.t)\n }\n\n const { docs: results } = await payload.db.findGlobalVersions(findGlobalVersionsArgs)\n if (!results || results?.length === 0) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n // Clone the result - it may have come back memoized\n let result: any = deepCopyObjectSimple(results[0])\n\n if (!result.version) {\n result.version = {}\n }\n\n // Patch globalType onto version doc\n result.version.globalType = globalConfig.slug\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeRead?.length) {\n for (const hook of globalConfig.hooks.beforeRead) {\n result =\n (await hook({\n context: req.context,\n doc: result.version,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: null,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result.version =\n (await hook({\n context: req.context,\n doc: result.version,\n global: globalConfig,\n overrideAccess,\n query: findGlobalVersionsArgs.where,\n req,\n })) || result.version\n }\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","Forbidden","NotFound","afterRead","deepCopyObjectSimple","killTransaction","sanitizeSelect","buildVersionGlobalFields","getQueryDraftsSelect","findVersionByIDOperation","args","id","currentDepth","depth","disableErrors","globalConfig","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","accessResults","access","readVersions","hasWhereAccess","fields","config","forceSelect","versions","findGlobalVersionsArgs","global","slug","limit","where","equals","and","t","docs","results","db","findGlobalVersions","length","result","version","globalType","hooks","beforeRead","hook","context","doc","collection","draft","undefined","query","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/globals/operations/findVersionByID.ts"],"sourcesContent":["import type { FindOptions } from '../../collections/operations/local/find.js'\nimport type { FindGlobalVersionsArgs } from '../../database/types.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { SanitizedGlobalConfig } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionGlobalFields } from '../../versions/buildGlobalFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\n\nexport type Arguments = {\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n globalConfig: SanitizedGlobalConfig\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findVersionByIDOperation = async <T extends TypeWithVersion<T> = any>(\n args: Arguments,\n): Promise<T> => {\n const {\n id,\n currentDepth,\n depth,\n disableErrors,\n globalConfig,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n } = args\n\n try {\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, globalConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const isValidID =\n (typeof id === 'string' && id.length > 0) || (typeof id === 'number' && Number.isFinite(id))\n\n if (!isValidID) {\n throw new NotFound(req.t)\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const select = sanitizeSelect({\n fields: buildVersionGlobalFields(payload.config, globalConfig, true),\n forceSelect: getQueryDraftsSelect({ select: globalConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const findGlobalVersionsArgs: FindGlobalVersionsArgs = {\n global: globalConfig.slug,\n limit: 1,\n locale: locale!,\n req,\n select,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const { docs: results } = await payload.db.findGlobalVersions(findGlobalVersionsArgs)\n if (!results || results?.length === 0) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n // Clone the result - it may have come back memoized\n let result: any = deepCopyObjectSimple(results[0])\n\n if (!result.version) {\n result.version = {}\n }\n\n // Patch globalType onto version doc\n result.version.globalType = globalConfig.slug\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeRead?.length) {\n for (const hook of globalConfig.hooks.beforeRead) {\n result =\n (await hook({\n context: req.context,\n doc: result.version,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: null,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result.version =\n (await hook({\n context: req.context,\n doc: result.version,\n global: globalConfig,\n overrideAccess,\n query: findGlobalVersionsArgs.where,\n req,\n })) || result.version\n }\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","Forbidden","NotFound","afterRead","deepCopyObjectSimple","killTransaction","sanitizeSelect","buildVersionGlobalFields","getQueryDraftsSelect","findVersionByIDOperation","args","id","currentDepth","depth","disableErrors","globalConfig","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","accessResults","access","readVersions","isValidID","length","Number","isFinite","t","hasWhereAccess","fields","config","forceSelect","versions","findGlobalVersionsArgs","global","slug","limit","where","equals","docs","results","db","findGlobalVersions","result","version","globalType","hooks","beforeRead","hook","context","doc","collection","draft","undefined","query","error"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.90.2",
3
+ "version": "3.91.0-internal.c1569dc",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -116,7 +116,7 @@
116
116
  "undici": "7.29.0",
117
117
  "uuid": "13.0.2",
118
118
  "ws": "^8.16.0",
119
- "@payloadcms/translations": "3.90.2"
119
+ "@payloadcms/translations": "3.91.0-internal.c1569dc"
120
120
  },
121
121
  "devDependencies": {
122
122
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",