payload 3.91.0-internal.6e3dc85 → 3.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +3 -14
- package/dist/auth/endpoints/refresh.d.ts.map +1 -1
- package/dist/auth/endpoints/refresh.js +4 -6
- package/dist/auth/endpoints/refresh.js.map +1 -1
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +15 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/index.spec.js +54 -0
- package/dist/bin/index.spec.js.map +1 -0
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +54 -6
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +7 -0
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +5 -0
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/database/createSchemaBuildContext.d.ts +12 -0
- package/dist/database/createSchemaBuildContext.d.ts.map +1 -0
- package/dist/database/createSchemaBuildContext.js +24 -0
- package/dist/database/createSchemaBuildContext.js.map +1 -0
- package/dist/database/createSchemaBuildContext.spec.js +146 -0
- package/dist/database/createSchemaBuildContext.spec.js.map +1 -0
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
- package/dist/database/sanitizeJoinQuery.js +2 -1
- package/dist/database/sanitizeJoinQuery.js.map +1 -1
- package/dist/exports/internal.d.ts +2 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +1 -0
- package/dist/exports/internal.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.js +3 -3
- package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.spec.js +22 -0
- package/dist/fields/baseFields/slug/generateSlug.spec.js.map +1 -0
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +11 -3
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +5 -0
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/queues/utilities/updateJob.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.js +15 -0
- package/dist/queues/utilities/updateJob.js.map +1 -1
- package/dist/utilities/getNextJsHMRURL.d.ts.map +1 -1
- package/dist/utilities/getNextJsHMRURL.js +4 -2
- package/dist/utilities/getNextJsHMRURL.js.map +1 -1
- package/dist/utilities/getNextJsHMRURL.spec.js +11 -0
- package/dist/utilities/getNextJsHMRURL.spec.js.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts +4 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.js +5 -0
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/lexicalLoader.mjs +26 -0
- package/package.json +7 -6
package/bin.js
CHANGED
|
@@ -15,7 +15,7 @@ if (disableTranspile) {
|
|
|
15
15
|
await bin()
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
await start()
|
|
19
19
|
} else {
|
|
20
20
|
const filename = fileURLToPath(import.meta.url)
|
|
21
21
|
const dirname = path.dirname(filename)
|
|
@@ -23,17 +23,6 @@ if (disableTranspile) {
|
|
|
23
23
|
|
|
24
24
|
if (!useSwc) {
|
|
25
25
|
const start = async () => {
|
|
26
|
-
// tsx 4.22.4 uses Node's synchronous `module.registerHooks` API when it is available
|
|
27
|
-
// (Node v23.5+). On those versions that code path leaks tsx's internal `?namespace=...`
|
|
28
|
-
// query string onto resolved specifiers — including Node built-ins like `node:crypto` —
|
|
29
|
-
// which Node then tries to open as a file, failing with ENOENT. Removing `registerHooks`
|
|
30
|
-
// forces tsx to fall back to its older async `module.register()` worker path, which does
|
|
31
|
-
// not have this bug. See https://github.com/payloadcms/payload/issues/16949
|
|
32
|
-
const nodeModule = await import('node:module')
|
|
33
|
-
if (typeof nodeModule.default.registerHooks === 'function') {
|
|
34
|
-
nodeModule.default.registerHooks = undefined
|
|
35
|
-
}
|
|
36
|
-
|
|
37
26
|
// Use tsx
|
|
38
27
|
let tsImport = (await import('tsx/esm/api')).tsImport
|
|
39
28
|
|
|
@@ -41,7 +30,7 @@ if (disableTranspile) {
|
|
|
41
30
|
await bin()
|
|
42
31
|
}
|
|
43
32
|
|
|
44
|
-
|
|
33
|
+
await start()
|
|
45
34
|
} else if (useSwc) {
|
|
46
35
|
const { register } = await import('node:module')
|
|
47
36
|
// Remove --use-swc from arguments
|
|
@@ -60,6 +49,6 @@ if (disableTranspile) {
|
|
|
60
49
|
await bin()
|
|
61
50
|
}
|
|
62
51
|
|
|
63
|
-
|
|
52
|
+
await start()
|
|
64
53
|
}
|
|
65
54
|
}
|
|
@@ -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,
|
|
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:
|
|
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
|
-
...
|
|
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:
|
|
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"}
|
package/dist/bin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,GAAG,qBAoDf,CAAA"}
|
package/dist/bin/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable no-console */ import { Cron } from 'croner';
|
|
2
2
|
import minimist from 'minimist';
|
|
3
|
+
import * as nodeModule from 'node:module';
|
|
3
4
|
import { pathToFileURL } from 'node:url';
|
|
4
5
|
import path from 'path';
|
|
5
6
|
import { findConfig } from '../config/find.js';
|
|
@@ -22,6 +23,20 @@ const availableScripts = [
|
|
|
22
23
|
];
|
|
23
24
|
export const bin = async ()=>{
|
|
24
25
|
loadEnv();
|
|
26
|
+
// Lexical 0.50's Node entry points use top-level dynamic imports that can stall under tsx.
|
|
27
|
+
// Select its equivalent static exports after loading the user's environment instead.
|
|
28
|
+
const environmentCondition = process.env.NODE_ENV === 'production' ? 'production' : 'development';
|
|
29
|
+
if (typeof nodeModule.registerHooks === 'function') {
|
|
30
|
+
const { initialize, resolve } = await import(new URL('../../lexicalLoader.mjs', import.meta.url).href);
|
|
31
|
+
initialize(environmentCondition);
|
|
32
|
+
nodeModule.registerHooks({
|
|
33
|
+
resolve
|
|
34
|
+
});
|
|
35
|
+
} else {
|
|
36
|
+
nodeModule.register('../../lexicalLoader.mjs', import.meta.url, {
|
|
37
|
+
data: environmentCondition
|
|
38
|
+
});
|
|
39
|
+
}
|
|
25
40
|
process.env.DISABLE_PAYLOAD_HMR = 'true';
|
|
26
41
|
const args = minimist(process.argv.slice(2));
|
|
27
42
|
const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase();
|
package/dist/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Cron } from 'croner'\nimport minimist from 'minimist'\nimport { pathToFileURL } from 'node:url'\nimport path from 'path'\n\nimport { findConfig } from '../config/find.js'\nimport { getPayload, type Payload } from '../index.js'\nimport { generateImportMap } from './generateImportMap/index.js'\nimport { generateTypes } from './generateTypes.js'\nimport { info } from './info.js'\nimport { loadEnv } from './loadEnv.js'\nimport { migrate, availableCommands as migrateCommands } from './migrate.js'\n\n// Note: this does not account for any user bin scripts\nconst availableScripts = [\n 'generate:db-schema',\n 'generate:importmap',\n 'generate:types',\n 'info',\n 'jobs:run',\n 'jobs:handle-schedules',\n 'run',\n ...migrateCommands,\n] as const\n\nexport const bin = async () => {\n loadEnv()\n process.env.DISABLE_PAYLOAD_HMR = 'true'\n\n const args = minimist(process.argv.slice(2))\n const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase()\n\n if (args.cron) {\n new Cron(\n args.cron,\n async () => {\n // If the bin script initializes payload (getPayload), this will only happen once, as getPayload\n // caches the payload instance on the module scope => no need to manually cache and manage getPayload initialization\n // outside the Cron here.\n await runBinScript({ args, script })\n },\n {\n // Do not run consecutive crons if previous crons still ongoing\n protect: true,\n // TODO: Remove this compatibility option in 4.0. This only exists to ensure backwards-compatibility between Croner v9 and Croner v10 cron syntax\n sloppyRanges: true,\n },\n )\n\n process.stdin.resume() // Keep the process alive\n\n return\n } else {\n const { payload } = await runBinScript({ args, script })\n if (payload) {\n await payload.destroy() // close database connections after running jobs so process can exit cleanly\n }\n process.exit(0)\n }\n}\n\nasync function runBinScript({\n args,\n script,\n}: {\n args: minimist.ParsedArgs\n script: string\n}): Promise<{\n /**\n * Scripts can return a payload instance if it exists. The bin script runner can then safely\n * shut off the instance, depending on if it's running in a cron job or not.\n */\n payload?: Payload\n}> {\n if (script === 'info') {\n await info()\n return {}\n }\n\n if (script === 'run') {\n const scriptPath = args._[1]\n if (!scriptPath) {\n console.error('Please provide a script path to run.')\n process.exit(1)\n }\n\n const absoluteScriptPath = path.resolve(process.cwd(), scriptPath)\n\n // Modify process.argv to remove 'run' and the script path\n const originalArgv = process.argv\n process.argv = [process.argv[0]!, process.argv[1]!, ...args._.slice(2)]\n\n try {\n await import(pathToFileURL(absoluteScriptPath).toString())\n } catch (error) {\n console.error(`Error running script: ${absoluteScriptPath}`)\n console.error(error)\n process.exit(1)\n } finally {\n // Restore original process.argv\n process.argv = originalArgv\n }\n return {}\n }\n\n const configPath = findConfig()\n const configPromise = await import(pathToFileURL(configPath).toString())\n let config = await configPromise\n if (config.default) {\n config = await config.default\n }\n\n const userBinScript = Array.isArray(config.bin)\n ? config.bin.find(({ key }: { key: string }) => key === script)\n : false\n\n if (userBinScript) {\n try {\n const module = await import(pathToFileURL(userBinScript.scriptPath).toString())\n\n if (!module.script || typeof module.script !== 'function') {\n console.error(\n `Could not find \"script\" function export for script ${userBinScript.key} in ${userBinScript.scriptPath}`,\n )\n } else {\n await module.script(config).catch((err: unknown) => {\n console.log(`Script ${userBinScript.key} failed, details:`)\n console.error(err)\n })\n }\n } catch (err) {\n console.log(`Could not find associated bin script for the ${userBinScript.key} command`)\n console.error(err)\n }\n\n return {}\n }\n\n if (script.startsWith('migrate')) {\n await migrate({ config, parsedArgs: args })\n return {}\n }\n\n if (script === 'generate:types') {\n await generateTypes(config)\n return {}\n }\n\n if (script === 'generate:importmap') {\n await generateImportMap(config)\n return {}\n }\n\n if (script === 'jobs:run') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const limit = args.limit ? parseInt(args.limit, 10) : undefined\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n const handleSchedules = !!args['handle-schedules']\n\n if (handleSchedules) {\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n }\n\n await payload.jobs.run({\n allQueues,\n limit,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'jobs:handle-schedules') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'generate:db-schema') {\n // Barebones instance to access database adapter, without connecting to the DB\n const payload = await getPayload({ config, disableDBConnect: true, disableOnInit: true }) // Do not setup crons here\n\n if (typeof payload.db.generateSchema !== 'function') {\n payload.logger.error({\n msg: `${payload.db.packageName} does not support database schema generation`,\n })\n\n await payload.destroy()\n process.exit(1)\n }\n\n await payload.db.generateSchema({\n log: args.log === 'false' ? false : true,\n prettify: args.prettify === 'false' ? false : true,\n })\n\n return { payload }\n }\n\n console.error(script ? `Unknown command: \"${script}\"` : 'Please provide a command to run')\n console.log(`\\nAvailable commands:\\n${availableScripts.map((c) => ` - ${c}`).join('\\n')}`)\n\n process.exit(1)\n}\n"],"names":["Cron","minimist","pathToFileURL","path","findConfig","getPayload","generateImportMap","generateTypes","info","loadEnv","migrate","availableCommands","migrateCommands","availableScripts","bin","process","env","DISABLE_PAYLOAD_HMR","args","argv","slice","script","_","toLowerCase","cron","runBinScript","protect","sloppyRanges","stdin","resume","payload","destroy","exit","scriptPath","console","error","absoluteScriptPath","resolve","cwd","originalArgv","toString","configPath","configPromise","config","default","userBinScript","Array","isArray","find","key","module","catch","err","log","startsWith","parsedArgs","limit","parseInt","undefined","queue","allQueues","handleSchedules","jobs","run","disableDBConnect","disableOnInit","db","generateSchema","logger","msg","packageName","prettify","map","c","join"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Cron } from 'croner'\nimport minimist from 'minimist'\nimport * as nodeModule from 'node:module'\nimport { pathToFileURL } from 'node:url'\nimport path from 'path'\n\nimport { findConfig } from '../config/find.js'\nimport { getPayload, type Payload } from '../index.js'\nimport { generateImportMap } from './generateImportMap/index.js'\nimport { generateTypes } from './generateTypes.js'\nimport { info } from './info.js'\nimport { loadEnv } from './loadEnv.js'\nimport { migrate, availableCommands as migrateCommands } from './migrate.js'\n\n// Note: this does not account for any user bin scripts\nconst availableScripts = [\n 'generate:db-schema',\n 'generate:importmap',\n 'generate:types',\n 'info',\n 'jobs:run',\n 'jobs:handle-schedules',\n 'run',\n ...migrateCommands,\n] as const\n\nexport const bin = async () => {\n loadEnv()\n\n // Lexical 0.50's Node entry points use top-level dynamic imports that can stall under tsx.\n // Select its equivalent static exports after loading the user's environment instead.\n const environmentCondition = process.env.NODE_ENV === 'production' ? 'production' : 'development'\n\n if (typeof nodeModule.registerHooks === 'function') {\n const { initialize, resolve } = await import(\n new URL('../../lexicalLoader.mjs', import.meta.url).href\n )\n\n initialize(environmentCondition)\n nodeModule.registerHooks({ resolve })\n } else {\n nodeModule.register('../../lexicalLoader.mjs', import.meta.url, {\n data: environmentCondition,\n })\n }\n\n process.env.DISABLE_PAYLOAD_HMR = 'true'\n\n const args = minimist(process.argv.slice(2))\n const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase()\n\n if (args.cron) {\n new Cron(\n args.cron,\n async () => {\n // If the bin script initializes payload (getPayload), this will only happen once, as getPayload\n // caches the payload instance on the module scope => no need to manually cache and manage getPayload initialization\n // outside the Cron here.\n await runBinScript({ args, script })\n },\n {\n // Do not run consecutive crons if previous crons still ongoing\n protect: true,\n // TODO: Remove this compatibility option in 4.0. This only exists to ensure backwards-compatibility between Croner v9 and Croner v10 cron syntax\n sloppyRanges: true,\n },\n )\n\n process.stdin.resume() // Keep the process alive\n\n return\n } else {\n const { payload } = await runBinScript({ args, script })\n if (payload) {\n await payload.destroy() // close database connections after running jobs so process can exit cleanly\n }\n process.exit(0)\n }\n}\n\nasync function runBinScript({\n args,\n script,\n}: {\n args: minimist.ParsedArgs\n script: string\n}): Promise<{\n /**\n * Scripts can return a payload instance if it exists. The bin script runner can then safely\n * shut off the instance, depending on if it's running in a cron job or not.\n */\n payload?: Payload\n}> {\n if (script === 'info') {\n await info()\n return {}\n }\n\n if (script === 'run') {\n const scriptPath = args._[1]\n if (!scriptPath) {\n console.error('Please provide a script path to run.')\n process.exit(1)\n }\n\n const absoluteScriptPath = path.resolve(process.cwd(), scriptPath)\n\n // Modify process.argv to remove 'run' and the script path\n const originalArgv = process.argv\n process.argv = [process.argv[0]!, process.argv[1]!, ...args._.slice(2)]\n\n try {\n await import(pathToFileURL(absoluteScriptPath).toString())\n } catch (error) {\n console.error(`Error running script: ${absoluteScriptPath}`)\n console.error(error)\n process.exit(1)\n } finally {\n // Restore original process.argv\n process.argv = originalArgv\n }\n return {}\n }\n\n const configPath = findConfig()\n const configPromise = await import(pathToFileURL(configPath).toString())\n let config = await configPromise\n if (config.default) {\n config = await config.default\n }\n\n const userBinScript = Array.isArray(config.bin)\n ? config.bin.find(({ key }: { key: string }) => key === script)\n : false\n\n if (userBinScript) {\n try {\n const module = await import(pathToFileURL(userBinScript.scriptPath).toString())\n\n if (!module.script || typeof module.script !== 'function') {\n console.error(\n `Could not find \"script\" function export for script ${userBinScript.key} in ${userBinScript.scriptPath}`,\n )\n } else {\n await module.script(config).catch((err: unknown) => {\n console.log(`Script ${userBinScript.key} failed, details:`)\n console.error(err)\n })\n }\n } catch (err) {\n console.log(`Could not find associated bin script for the ${userBinScript.key} command`)\n console.error(err)\n }\n\n return {}\n }\n\n if (script.startsWith('migrate')) {\n await migrate({ config, parsedArgs: args })\n return {}\n }\n\n if (script === 'generate:types') {\n await generateTypes(config)\n return {}\n }\n\n if (script === 'generate:importmap') {\n await generateImportMap(config)\n return {}\n }\n\n if (script === 'jobs:run') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const limit = args.limit ? parseInt(args.limit, 10) : undefined\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n const handleSchedules = !!args['handle-schedules']\n\n if (handleSchedules) {\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n }\n\n await payload.jobs.run({\n allQueues,\n limit,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'jobs:handle-schedules') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'generate:db-schema') {\n // Barebones instance to access database adapter, without connecting to the DB\n const payload = await getPayload({ config, disableDBConnect: true, disableOnInit: true }) // Do not setup crons here\n\n if (typeof payload.db.generateSchema !== 'function') {\n payload.logger.error({\n msg: `${payload.db.packageName} does not support database schema generation`,\n })\n\n await payload.destroy()\n process.exit(1)\n }\n\n await payload.db.generateSchema({\n log: args.log === 'false' ? false : true,\n prettify: args.prettify === 'false' ? false : true,\n })\n\n return { payload }\n }\n\n console.error(script ? `Unknown command: \"${script}\"` : 'Please provide a command to run')\n console.log(`\\nAvailable commands:\\n${availableScripts.map((c) => ` - ${c}`).join('\\n')}`)\n\n process.exit(1)\n}\n"],"names":["Cron","minimist","nodeModule","pathToFileURL","path","findConfig","getPayload","generateImportMap","generateTypes","info","loadEnv","migrate","availableCommands","migrateCommands","availableScripts","bin","environmentCondition","process","env","NODE_ENV","registerHooks","initialize","resolve","URL","url","href","register","data","DISABLE_PAYLOAD_HMR","args","argv","slice","script","_","toLowerCase","cron","runBinScript","protect","sloppyRanges","stdin","resume","payload","destroy","exit","scriptPath","console","error","absoluteScriptPath","cwd","originalArgv","toString","configPath","configPromise","config","default","userBinScript","Array","isArray","find","key","module","catch","err","log","startsWith","parsedArgs","limit","parseInt","undefined","queue","allQueues","handleSchedules","jobs","run","disableDBConnect","disableOnInit","db","generateSchema","logger","msg","packageName","prettify","map","c","join"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
7
|
+
const binPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../bin.js');
|
|
8
|
+
describe('CLI exit codes', ()=>{
|
|
9
|
+
let testDir;
|
|
10
|
+
beforeEach(async ()=>{
|
|
11
|
+
testDir = await mkdtemp(path.join(tmpdir(), 'payload-cli-exit-'));
|
|
12
|
+
});
|
|
13
|
+
afterEach(async ()=>{
|
|
14
|
+
await rm(testDir, {
|
|
15
|
+
force: true,
|
|
16
|
+
recursive: true
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it.each([
|
|
20
|
+
{
|
|
21
|
+
exitCode: 0,
|
|
22
|
+
source: 'await Promise.resolve()',
|
|
23
|
+
state: 'completes'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
exitCode: 13,
|
|
27
|
+
source: 'await new Promise(() => {})',
|
|
28
|
+
state: 'remains pending'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
exitCode: 1,
|
|
32
|
+
source: "throw new Error('EXPECTED_FAILURE')",
|
|
33
|
+
state: 'throws'
|
|
34
|
+
}
|
|
35
|
+
])('should exit with code $exitCode when the script $state', async ({ exitCode, source })=>{
|
|
36
|
+
const scriptPath = path.join(testDir, 'script.mjs');
|
|
37
|
+
await writeFile(scriptPath, `console.log('SCRIPT_STARTED')\n${source}\n`);
|
|
38
|
+
const result = spawnSync(process.execPath, [
|
|
39
|
+
binPath,
|
|
40
|
+
'run',
|
|
41
|
+
scriptPath
|
|
42
|
+
], {
|
|
43
|
+
cwd: testDir,
|
|
44
|
+
encoding: 'utf8',
|
|
45
|
+
timeout: 10_000
|
|
46
|
+
});
|
|
47
|
+
expect(result.error).toBeUndefined();
|
|
48
|
+
expect(result.signal).toBeNull();
|
|
49
|
+
expect(result.stdout).toContain('SCRIPT_STARTED');
|
|
50
|
+
expect(result.status).toBe(exitCode);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=index.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/index.spec.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process'\nimport { mkdtemp, rm, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { afterEach, beforeEach, describe, expect, it } from 'vitest'\n\nconst binPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../bin.js')\n\ndescribe('CLI exit codes', () => {\n let testDir: string\n\n beforeEach(async () => {\n testDir = await mkdtemp(path.join(tmpdir(), 'payload-cli-exit-'))\n })\n\n afterEach(async () => {\n await rm(testDir, { force: true, recursive: true })\n })\n\n it.each([\n { exitCode: 0, source: 'await Promise.resolve()', state: 'completes' },\n { exitCode: 13, source: 'await new Promise(() => {})', state: 'remains pending' },\n { exitCode: 1, source: \"throw new Error('EXPECTED_FAILURE')\", state: 'throws' },\n ])('should exit with code $exitCode when the script $state', async ({ exitCode, source }) => {\n const scriptPath = path.join(testDir, 'script.mjs')\n\n await writeFile(scriptPath, `console.log('SCRIPT_STARTED')\\n${source}\\n`)\n\n const result = spawnSync(process.execPath, [binPath, 'run', scriptPath], {\n cwd: testDir,\n encoding: 'utf8',\n timeout: 10_000,\n })\n\n expect(result.error).toBeUndefined()\n expect(result.signal).toBeNull()\n expect(result.stdout).toContain('SCRIPT_STARTED')\n expect(result.status).toBe(exitCode)\n })\n})\n"],"names":["spawnSync","mkdtemp","rm","writeFile","tmpdir","path","fileURLToPath","afterEach","beforeEach","describe","expect","it","binPath","resolve","dirname","url","testDir","join","force","recursive","each","exitCode","source","state","scriptPath","result","process","execPath","cwd","encoding","timeout","error","toBeUndefined","signal","toBeNull","stdout","toContain","status","toBe"],"mappings":"AAAA,SAASA,SAAS,QAAQ,qBAAoB;AAC9C,SAASC,OAAO,EAAEC,EAAE,EAAEC,SAAS,QAAQ,mBAAkB;AACzD,SAASC,MAAM,QAAQ,UAAS;AAChC,OAAOC,UAAU,YAAW;AAC5B,SAASC,aAAa,QAAQ,WAAU;AACxC,SAASC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAEpE,MAAMC,UAAUP,KAAKQ,OAAO,CAACR,KAAKS,OAAO,CAACR,cAAc,YAAYS,GAAG,IAAI;AAE3EN,SAAS,kBAAkB;IACzB,IAAIO;IAEJR,WAAW;QACTQ,UAAU,MAAMf,QAAQI,KAAKY,IAAI,CAACb,UAAU;IAC9C;IAEAG,UAAU;QACR,MAAML,GAAGc,SAAS;YAAEE,OAAO;YAAMC,WAAW;QAAK;IACnD;IAEAR,GAAGS,IAAI,CAAC;QACN;YAAEC,UAAU;YAAGC,QAAQ;YAA2BC,OAAO;QAAY;QACrE;YAAEF,UAAU;YAAIC,QAAQ;YAA+BC,OAAO;QAAkB;QAChF;YAAEF,UAAU;YAAGC,QAAQ;YAAuCC,OAAO;QAAS;KAC/E,EAAE,0DAA0D,OAAO,EAAEF,QAAQ,EAAEC,MAAM,EAAE;QACtF,MAAME,aAAanB,KAAKY,IAAI,CAACD,SAAS;QAEtC,MAAMb,UAAUqB,YAAY,CAAC,+BAA+B,EAAEF,OAAO,EAAE,CAAC;QAExE,MAAMG,SAASzB,UAAU0B,QAAQC,QAAQ,EAAE;YAACf;YAAS;YAAOY;SAAW,EAAE;YACvEI,KAAKZ;YACLa,UAAU;YACVC,SAAS;QACX;QAEApB,OAAOe,OAAOM,KAAK,EAAEC,aAAa;QAClCtB,OAAOe,OAAOQ,MAAM,EAAEC,QAAQ;QAC9BxB,OAAOe,OAAOU,MAAM,EAAEC,SAAS,CAAC;QAChC1B,OAAOe,OAAOY,MAAM,EAAEC,IAAI,CAACjB;IAC7B;AACF"}
|
|
@@ -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;
|
|
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 (
|
|
103
|
-
|
|
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
|
|
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
|
|
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/collections/operations/findVersionByID.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"findVersionByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersionByID.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAehE,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,wBAAwB,GAAU,KAAK,SAAS,UAAU,cAC/D,SAAS,KACd,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CA0LhC,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { combineQueries } from '../../database/combineQueries.js';
|
|
|
4
4
|
import { APIError, Forbidden, NotFound } from '../../errors/index.js';
|
|
5
5
|
import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
6
6
|
import { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js';
|
|
7
|
+
import { hasVersionsEnabled } from '../../utilities/getVersionsConfig.js';
|
|
7
8
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
8
9
|
import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
|
|
9
10
|
import { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js';
|
|
@@ -15,6 +16,12 @@ export const findVersionByIDOperation = async (args)=>{
|
|
|
15
16
|
if (!id) {
|
|
16
17
|
throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST);
|
|
17
18
|
}
|
|
19
|
+
if (!hasVersionsEnabled(collectionConfig)) {
|
|
20
|
+
if (disableErrors) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
throw new NotFound(req.t);
|
|
24
|
+
}
|
|
18
25
|
try {
|
|
19
26
|
// /////////////////////////////////////
|
|
20
27
|
// beforeOperation - Collection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/findVersionByID.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOptions } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findVersionByIDOperation = async <TData extends TypeWithID = any>(\n args: Arguments,\n): Promise<TypeWithVersion<TData>> => {\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST)\n }\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n overrideAccess,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: buildVersionCollectionFields(payload.config, collectionConfig, true),\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const versionsQuery = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select,\n where: fullWhere,\n })\n\n let result = versionsQuery.docs[0]!\n\n if (!result) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n if (!result.version) {\n // Fallback if not selected\n ;(result as any).version = {}\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n overrideAccess,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n overrideAccess,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","APIError","Forbidden","NotFound","afterRead","appendNonTrashedFilter","killTransaction","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","buildAfterOperation","buildBeforeOperation","findVersionByIDOperation","args","id","collection","config","collectionConfig","currentDepth","depth","disableErrors","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","operation","accessResults","access","readVersions","hasWhereAccess","where","equals","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","versionsQuery","db","findVersions","slug","limit","pagination","result","docs","t","version","hooks","beforeRead","length","hook","context","doc","query","draft","undefined","global","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/findVersionByID.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOptions } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { hasVersionsEnabled } from '../../utilities/getVersionsConfig.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const findVersionByIDOperation = async <TData extends TypeWithID = any>(\n args: Arguments,\n): Promise<TypeWithVersion<TData>> => {\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n overrideAccess,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of version.', httpStatus.BAD_REQUEST)\n }\n\n if (!hasVersionsEnabled(collectionConfig)) {\n if (disableErrors) {\n return null!\n }\n\n throw new NotFound(req.t)\n }\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n overrideAccess,\n })\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.readVersions)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResults === false) {\n return null!\n }\n\n const hasWhereAccess = typeof accessResults === 'object'\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n fullWhere = appendNonTrashedFilter({\n deletedAtPath: 'version.deletedAt',\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: buildVersionCollectionFields(payload.config, collectionConfig, true),\n forceSelect: getQueryDraftsSelect({ select: collectionConfig.forceSelect }),\n select: incomingSelect,\n versions: true,\n })\n\n const versionsQuery = await payload.db.findVersions<TData>({\n collection: collectionConfig.slug,\n limit: 1,\n locale: locale!,\n pagination: false,\n req,\n select,\n where: fullWhere,\n })\n\n let result = versionsQuery.docs[0]!\n\n if (!result) {\n if (!disableErrors) {\n if (!hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n }\n\n return null!\n }\n\n if (!result.version) {\n // Fallback if not selected\n ;(result as any).version = {}\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeRead?.length) {\n for (const hook of collectionConfig.hooks.beforeRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n overrideAccess,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result.version = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth: depth!,\n doc: result.version,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select: typeof select?.version === 'object' ? select.version : undefined,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result.version =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result.version,\n overrideAccess,\n query: fullWhere,\n req,\n })) || result.version\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findVersionByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","combineQueries","APIError","Forbidden","NotFound","afterRead","appendNonTrashedFilter","hasVersionsEnabled","killTransaction","sanitizeSelect","buildVersionCollectionFields","getQueryDraftsSelect","buildAfterOperation","buildBeforeOperation","findVersionByIDOperation","args","id","collection","config","collectionConfig","currentDepth","depth","disableErrors","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","BAD_REQUEST","t","operation","accessResults","access","readVersions","hasWhereAccess","where","equals","fullWhere","deletedAtPath","enableTrash","fields","forceSelect","versions","versionsQuery","db","findVersions","slug","limit","pagination","result","docs","version","hooks","beforeRead","length","hook","context","doc","query","draft","undefined","global","error"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAOlD,SAASC,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AACrE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,sBAAsB,QAAQ,4CAA2C;AAClF,SAASC,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,oBAAoB,QAAQ,gDAA+C;AACpF,SAASC,mBAAmB,QAAQ,qCAAoC;AACxE,SAASC,oBAAoB,QAAQ,sCAAqC;AAe1E,OAAO,MAAMC,2BAA2B,OACtCC;IAEA,MAAM,EACJC,EAAE,EACFC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,YAAY,EACZC,KAAK,EACLC,aAAa,EACbC,cAAc,EACdC,QAAQ,EACRC,KAAK,EAAEC,cAAc,EAAEC,MAAM,EAAEC,OAAO,EAAE,EACxCH,GAAG,EACHI,QAAQC,cAAc,EACtBC,gBAAgB,EAChBC,QAAQ,KAAK,EACd,GAAGjB;IAEJ,IAAI,CAACC,IAAI;QACP,MAAM,IAAId,SAAS,0BAA0BH,WAAWkC,WAAW;IACrE;IAEA,IAAI,CAAC1B,mBAAmBY,mBAAmB;QACzC,IAAIG,eAAe;YACjB,OAAO;QACT;QAEA,MAAM,IAAIlB,SAASqB,IAAIS,CAAC;IAC1B;IAEA,IAAI;QACF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExCnB,OAAO,MAAMF,qBAAqB;YAChCE;YACAE,YAAYE;YACZgB,WAAW;YACXZ;QACF;QAEA,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,MAAMa,gBAAgB,CAACb,iBACnB,MAAMvB,cAAc;YAAEgB;YAAIM;YAAeG;QAAI,GAAGN,iBAAiBkB,MAAM,CAACC,YAAY,IACpF;QAEJ,gEAAgE;QAChE,IAAIF,kBAAkB,OAAO;YAC3B,OAAO;QACT;QAEA,MAAMG,iBAAiB,OAAOH,kBAAkB;QAEhD,MAAMI,QAAQ;YAAExB,IAAI;gBAAEyB,QAAQzB;YAAG;QAAE;QAEnC,IAAI0B,YAAYzC,eAAeuC,OAAOJ;QAEtCM,YAAYpC,uBAAuB;YACjCqC,eAAe;YACfC,aAAazB,iBAAiBa,KAAK;YACnCA;YACAQ,OAAOE;QACT;QAEA,wCAAwC;QACxC,aAAa;QACb,wCAAwC;QAExC,MAAMb,SAASpB,eAAe;YAC5BoC,QAAQnC,6BAA6BkB,QAAQV,MAAM,EAAEC,kBAAkB;YACvE2B,aAAanC,qBAAqB;gBAAEkB,QAAQV,iBAAiB2B,WAAW;YAAC;YACzEjB,QAAQC;YACRiB,UAAU;QACZ;QAEA,MAAMC,gBAAgB,MAAMpB,QAAQqB,EAAE,CAACC,YAAY,CAAQ;YACzDjC,YAAYE,iBAAiBgC,IAAI;YACjCC,OAAO;YACPzB,QAAQA;YACR0B,YAAY;YACZ5B;YACAI;YACAW,OAAOE;QACT;QAEA,IAAIY,SAASN,cAAcO,IAAI,CAAC,EAAE;QAElC,IAAI,CAACD,QAAQ;YACX,IAAI,CAAChC,eAAe;gBAClB,IAAI,CAACiB,gBAAgB;oBACnB,MAAM,IAAInC,SAASqB,IAAIS,CAAC;gBAC1B;gBACA,IAAIK,gBAAgB;oBAClB,MAAM,IAAIpC,UAAUsB,IAAIS,CAAC;gBAC3B;YACF;YAEA,OAAO;QACT;QAEA,IAAI,CAACoB,OAAOE,OAAO,EAAE;YACnB,2BAA2B;;YACzBF,OAAeE,OAAO,GAAG,CAAC;QAC9B;QAEA,wCAAwC;QACxC,0BAA0B;QAC1B,wCAAwC;QAExC,IAAIrC,iBAAiBsC,KAAK,EAAEC,YAAYC,QAAQ;YAC9C,KAAK,MAAMC,QAAQzC,iBAAiBsC,KAAK,CAACC,UAAU,CAAE;gBACpDJ,OAAOE,OAAO,GACZ,AAAC,MAAMI,KAAK;oBACV3C,YAAYE;oBACZ0C,SAASpC,IAAIoC,OAAO;oBACpBC,KAAKR,OAAOE,OAAO;oBACnBjC;oBACAwC,OAAOrB;oBACPjB;gBACF,MAAO6B,OAAOE,OAAO;YACzB;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExCF,OAAOE,OAAO,GAAG,MAAMnD,UAAU;YAC/BY,YAAYE;YACZ0C,SAASpC,IAAIoC,OAAO;YACpBzC;YACAC,OAAOA;YACPyC,KAAKR,OAAOE,OAAO;YACnB,oFAAoF;YACpFQ,OAAOC;YACPvC,gBAAgBA;YAChBwC,QAAQ;YACRvC,QAAQA;YACRJ,gBAAgBA;YAChBC;YACAC;YACAI,QAAQ,OAAOA,QAAQ2B,YAAY,WAAW3B,OAAO2B,OAAO,GAAGS;YAC/DlC,kBAAkBA;QACpB;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,IAAIZ,iBAAiBsC,KAAK,EAAEpD,WAAWsD,QAAQ;YAC7C,KAAK,MAAMC,QAAQzC,iBAAiBsC,KAAK,CAACpD,SAAS,CAAE;gBACnDiD,OAAOE,OAAO,GACZ,AAAC,MAAMI,KAAK;oBACV3C,YAAYE;oBACZ0C,SAASpC,IAAIoC,OAAO;oBACpBC,KAAKR,OAAOE,OAAO;oBACnBjC;oBACAwC,OAAOrB;oBACPjB;gBACF,MAAO6B,OAAOE,OAAO;YACzB;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCF,SAAS,MAAM1C,oBAAoB;YACjCG;YACAE,YAAYE;YACZgB,WAAW;YACXZ;YACA+B;QACF;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QAExC,OAAOA;IACT,EAAE,OAAOa,OAAgB;QACvB,MAAM3D,gBAAgBiB;QACtB,MAAM0C;IACR;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAmBlD,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,qBAAqB,GAAU,KAAK,SAAS,eAAe,CAAC,KAAK,CAAC,QACxE,SAAS,KACd,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CA+M9B,CAAA"}
|