payload 3.71.0-internal-debug.cd77e5d → 3.71.0-internal-debug.dea9d74

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.
Files changed (46) hide show
  1. package/dist/admin/forms/Form.d.ts +2 -2
  2. package/dist/admin/forms/Form.d.ts.map +1 -1
  3. package/dist/admin/forms/Form.js.map +1 -1
  4. package/dist/collections/operations/create.d.ts.map +1 -1
  5. package/dist/collections/operations/create.js +2 -1
  6. package/dist/collections/operations/create.js.map +1 -1
  7. package/dist/config/types.d.ts +6 -1
  8. package/dist/config/types.d.ts.map +1 -1
  9. package/dist/config/types.js.map +1 -1
  10. package/dist/exports/internal.d.ts +9 -0
  11. package/dist/exports/internal.d.ts.map +1 -1
  12. package/dist/exports/internal.js.map +1 -1
  13. package/dist/fields/config/types.d.ts +1 -1
  14. package/dist/fields/config/types.d.ts.map +1 -1
  15. package/dist/fields/config/types.js.map +1 -1
  16. package/dist/fields/getFieldPaths.d.ts +6 -6
  17. package/dist/fields/getFieldPaths.d.ts.map +1 -1
  18. package/dist/fields/getFieldPaths.js +7 -22
  19. package/dist/fields/getFieldPaths.js.map +1 -1
  20. package/dist/fields/hooks/afterChange/promise.js +1 -1
  21. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  22. package/dist/fields/hooks/afterRead/promise.js +1 -1
  23. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  24. package/dist/fields/hooks/beforeChange/promise.js +1 -1
  25. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  26. package/dist/fields/hooks/beforeDuplicate/promise.js +1 -1
  27. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  28. package/dist/fields/hooks/beforeValidate/promise.js +1 -1
  29. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  30. package/dist/index.bundled.d.ts +57 -34
  31. package/dist/index.d.ts +28 -30
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/utilities/formatErrors.js.map +1 -1
  36. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  37. package/dist/utilities/handleEndpoints.js +11 -9
  38. package/dist/utilities/handleEndpoints.js.map +1 -1
  39. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  40. package/dist/utilities/headersWithCors.js +20 -13
  41. package/dist/utilities/headersWithCors.js.map +1 -1
  42. package/dist/versions/saveVersion.d.ts +8 -1
  43. package/dist/versions/saveVersion.d.ts.map +1 -1
  44. package/dist/versions/saveVersion.js +6 -2
  45. package/dist/versions/saveVersion.js.map +1 -1
  46. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/handleEndpoints.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\nimport { match } from 'path-to-regexp'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { Endpoint, PayloadHandler, SanitizedConfig } from '../config/types.js'\nimport type { APIError } from '../errors/APIError.js'\nimport type { GlobalConfig } from '../globals/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { createPayloadRequest } from './createPayloadRequest.js'\nimport { formatAdminURL } from './formatAdminURL.js'\nimport { headersWithCors } from './headersWithCors.js'\nimport { mergeHeaders } from './mergeHeaders.js'\nimport { routeError } from './routeError.js'\n\nconst notFoundResponse = (req: PayloadRequest, pathname?: string) => {\n return Response.json(\n {\n message: `Route not found \"${pathname ?? new URL(req.url!).pathname}\"`,\n },\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.NOT_FOUND,\n },\n )\n}\n\n/**\n * Attaches the Payload REST API to any backend framework that uses Fetch Request/Response\n * like Next.js (app router), Remix, Bun, Hono.\n *\n * ### Example: Using Hono\n * ```ts\n * import { handleEndpoints } from 'payload';\n * import { serve } from '@hono/node-server';\n * import { loadEnv } from 'payload/node';\n *\n * const port = 3001;\n * loadEnv();\n *\n * const { default: config } = await import('@payload-config');\n *\n * const server = serve({\n * fetch: async (request) => {\n * const response = await handleEndpoints({\n * config,\n * request: request.clone(),\n * });\n *\n * return response;\n * },\n * port,\n * });\n *\n * server.on('listening', () => {\n * console.log(`API server is listening on http://localhost:${port}/api`);\n * });\n * ```\n */\nexport const handleEndpoints = async ({\n basePath = '',\n config: incomingConfig,\n path,\n payloadInstanceCacheKey,\n request,\n}: {\n basePath?: string\n config: Promise<SanitizedConfig> | SanitizedConfig\n /** Override path from the request */\n path?: string\n payloadInstanceCacheKey?: string\n request: Request\n}): Promise<Response> => {\n let handler!: PayloadHandler\n let req: PayloadRequest\n let collection!: Collection\n\n // This can be used against GET request search params size limit.\n // Instead you can do POST request with a text body as search params.\n // We use this internally for relationships querying on the frontend\n // packages/ui/src/fields/Relationship/index.tsx\n if (\n request.method.toLowerCase() === 'post' &&\n (request.headers.get('X-Payload-HTTP-Method-Override') === 'GET' ||\n request.headers.get('X-HTTP-Method-Override') === 'GET')\n ) {\n let url = request.url\n let data: any = undefined\n\n if (request.headers.get('Content-Type') === 'application/x-www-form-urlencoded') {\n const search = await request.text()\n url = `${request.url}?${search}`\n } else if (request.headers.get('Content-Type') === 'application/json') {\n // May not be supported by every endpoint\n data = await request.json()\n\n // locale and fallbackLocale is read by createPayloadRequest to populate req.locale and req.fallbackLocale\n // => add to searchParams\n if (data?.locale) {\n url += `?locale=${data.locale}`\n }\n if (data?.fallbackLocale) {\n url += `&fallbackLocale=${data.depth}`\n }\n }\n\n const req = new Request(url, {\n // @ts-expect-error // TODO: check if this is required\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n method: 'GET',\n signal: request.signal,\n })\n\n if (data) {\n // @ts-expect-error attach data to request - less overhead than using urlencoded\n req.data = data\n }\n\n const response = await handleEndpoints({\n basePath,\n config: incomingConfig,\n path,\n payloadInstanceCacheKey,\n request: req,\n })\n\n return response\n }\n\n try {\n req = await createPayloadRequest({\n canSetHeaders: true,\n config: incomingConfig,\n payloadInstanceCacheKey,\n request,\n })\n\n if (req.method?.toLowerCase() === 'options') {\n return Response.json(\n {},\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: 200,\n },\n )\n }\n\n const { payload } = req\n const { config } = payload\n\n const pathname = path ?? new URL(req.url!).pathname\n const baseAPIPath = formatAdminURL({\n apiRoute: config.routes.api,\n path: '',\n })\n\n if (!pathname.startsWith(baseAPIPath)) {\n return notFoundResponse(req, pathname)\n }\n\n // /api/posts/route -> /posts/route\n let adjustedPathname = pathname.replace(baseAPIPath, '')\n\n let isGlobals = false\n\n // /globals/header/route -> /header/route\n if (adjustedPathname.startsWith('/globals')) {\n isGlobals = true\n adjustedPathname = adjustedPathname.replace('/globals', '')\n }\n\n const segments = adjustedPathname.split('/')\n // remove empty string first element\n segments.shift()\n\n const firstParam = segments[0]\n\n let globalConfig!: GlobalConfig\n\n // first param can be a global slug or collection slug, find the relevant config\n if (firstParam) {\n if (isGlobals) {\n globalConfig = payload.globals.config.find((each) => each.slug === firstParam)!\n } else if (payload.collections[firstParam]) {\n collection = payload.collections[firstParam]\n }\n }\n\n let endpoints: Endpoint[] | false = config.endpoints\n\n if (collection) {\n endpoints = collection.config.endpoints\n // /posts/route -> /route\n adjustedPathname = adjustedPathname.replace(`/${collection.config.slug}`, '')\n } else if (globalConfig) {\n // /header/route -> /route\n adjustedPathname = adjustedPathname.replace(`/${globalConfig.slug}`, '')\n endpoints = globalConfig.endpoints!\n }\n\n // sanitize when endpoint.path is '/'\n if (adjustedPathname === '') {\n adjustedPathname = '/'\n }\n\n if (endpoints === false) {\n return Response.json(\n {\n message: `Cannot ${req.method?.toUpperCase()} ${req.url}`,\n },\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.NOT_IMPLEMENTED,\n },\n )\n }\n\n // Find the relevant endpoint configuration\n const endpoint = endpoints?.find((endpoint) => {\n if (endpoint.method !== req.method?.toLowerCase()) {\n return false\n }\n\n const pathMatchFn = match(endpoint.path, { decode: decodeURIComponent })\n\n const matchResult = pathMatchFn(adjustedPathname)\n\n if (!matchResult) {\n return false\n }\n\n req.routeParams = matchResult.params as Record<string, unknown>\n\n // Inject to routeParams the slug as well so it can be used later\n if (collection) {\n req.routeParams.collection = collection.config.slug\n } else if (globalConfig) {\n req.routeParams.global = globalConfig.slug\n }\n\n return true\n })\n\n if (endpoint) {\n handler = endpoint.handler\n }\n\n if (!handler) {\n return notFoundResponse(req, pathname)\n }\n\n const response = await handler(req)\n\n return new Response(response.body, {\n headers: headersWithCors({\n headers: mergeHeaders(req.responseHeaders ?? new Headers(), response.headers),\n req,\n }),\n status: response.status,\n statusText: response.statusText,\n })\n } catch (_err) {\n const err = _err as APIError\n return routeError({\n collection,\n config: incomingConfig,\n err,\n req: req!,\n })\n }\n}\n"],"names":["status","httpStatus","match","createPayloadRequest","formatAdminURL","headersWithCors","mergeHeaders","routeError","notFoundResponse","req","pathname","Response","json","message","URL","url","headers","Headers","NOT_FOUND","handleEndpoints","basePath","config","incomingConfig","path","payloadInstanceCacheKey","request","handler","collection","method","toLowerCase","get","data","undefined","search","text","locale","fallbackLocale","depth","Request","cache","credentials","signal","response","canSetHeaders","payload","baseAPIPath","apiRoute","routes","api","startsWith","adjustedPathname","replace","isGlobals","segments","split","shift","firstParam","globalConfig","globals","find","each","slug","collections","endpoints","toUpperCase","NOT_IMPLEMENTED","endpoint","pathMatchFn","decode","decodeURIComponent","matchResult","routeParams","params","global","body","responseHeaders","statusText","_err","err"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/handleEndpoints.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\nimport { match } from 'path-to-regexp'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { Endpoint, PayloadHandler, SanitizedConfig } from '../config/types.js'\nimport type { APIError } from '../errors/APIError.js'\nimport type { GlobalConfig } from '../globals/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { createPayloadRequest } from './createPayloadRequest.js'\nimport { formatAdminURL } from './formatAdminURL.js'\nimport { headersWithCors } from './headersWithCors.js'\nimport { mergeHeaders } from './mergeHeaders.js'\nimport { routeError } from './routeError.js'\n\nconst notFoundResponse = (req: PayloadRequest, pathname?: string) => {\n return Response.json(\n {\n message: `Route not found \"${pathname ?? new URL(req.url!).pathname}\"`,\n },\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.NOT_FOUND,\n },\n )\n}\n\n/**\n * Attaches the Payload REST API to any backend framework that uses Fetch Request/Response\n * like Next.js (app router), Remix, Bun, Hono.\n *\n * ### Example: Using Hono\n * ```ts\n * import { handleEndpoints } from 'payload';\n * import { serve } from '@hono/node-server';\n * import { loadEnv } from 'payload/node';\n *\n * const port = 3001;\n * loadEnv();\n *\n * const { default: config } = await import('@payload-config');\n *\n * const server = serve({\n * fetch: async (request) => {\n * const response = await handleEndpoints({\n * config,\n * request: request.clone(),\n * });\n *\n * return response;\n * },\n * port,\n * });\n *\n * server.on('listening', () => {\n * console.log(`API server is listening on http://localhost:${port}/api`);\n * });\n * ```\n */\nexport const handleEndpoints = async ({\n basePath = '',\n config: incomingConfig,\n path,\n payloadInstanceCacheKey,\n request,\n}: {\n basePath?: string\n config: Promise<SanitizedConfig> | SanitizedConfig\n /** Override path from the request */\n path?: string\n payloadInstanceCacheKey?: string\n request: Request\n}): Promise<Response> => {\n let handler!: PayloadHandler\n let req: PayloadRequest\n let collection!: Collection\n\n // This can be used against GET request search params size limit.\n // Instead you can do POST request with a text body as search params.\n // We use this internally for relationships querying on the frontend\n // packages/ui/src/fields/Relationship/index.tsx\n if (\n request.method.toLowerCase() === 'post' &&\n (request.headers.get('X-Payload-HTTP-Method-Override') === 'GET' ||\n request.headers.get('X-HTTP-Method-Override') === 'GET')\n ) {\n let url = request.url\n let data: any = undefined\n\n if (request.headers.get('Content-Type') === 'application/x-www-form-urlencoded') {\n const search = await request.text()\n url = `${request.url}?${search}`\n } else if (request.headers.get('Content-Type') === 'application/json') {\n // May not be supported by every endpoint\n data = await request.json()\n\n // locale and fallbackLocale is read by createPayloadRequest to populate req.locale and req.fallbackLocale\n // => add to searchParams\n if (data?.locale) {\n url += `?locale=${data.locale}`\n }\n if (data?.fallbackLocale) {\n url += `&fallbackLocale=${data.depth}`\n }\n }\n\n const req = new Request(url, {\n // @ts-expect-error // TODO: check if this is required\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n method: 'GET',\n signal: request.signal,\n })\n\n if (data) {\n // @ts-expect-error attach data to request - less overhead than using urlencoded\n req.data = data\n }\n\n const response = await handleEndpoints({\n basePath,\n config: incomingConfig,\n path,\n payloadInstanceCacheKey,\n request: req,\n })\n\n return response\n }\n\n try {\n req = await createPayloadRequest({\n canSetHeaders: true,\n config: incomingConfig,\n payloadInstanceCacheKey,\n request,\n })\n\n const { payload } = req\n const { config } = payload\n\n const pathname = path ?? new URL(req.url!).pathname\n const baseAPIPath = formatAdminURL({\n apiRoute: config.routes.api,\n path: '',\n })\n\n if (!pathname.startsWith(baseAPIPath)) {\n return notFoundResponse(req, pathname)\n }\n\n // /api/posts/route -> /posts/route\n let adjustedPathname = pathname.replace(baseAPIPath, '')\n\n let isGlobals = false\n\n // /globals/header/route -> /header/route\n if (adjustedPathname.startsWith('/globals')) {\n isGlobals = true\n adjustedPathname = adjustedPathname.replace('/globals', '')\n }\n\n const segments = adjustedPathname.split('/')\n // remove empty string first element\n segments.shift()\n\n const firstParam = segments[0]\n\n let globalConfig!: GlobalConfig\n\n // first param can be a global slug or collection slug, find the relevant config\n if (firstParam) {\n if (isGlobals) {\n globalConfig = payload.globals.config.find((each) => each.slug === firstParam)!\n } else if (payload.collections[firstParam]) {\n collection = payload.collections[firstParam]\n }\n }\n\n let endpoints: Endpoint[] | false = config.endpoints\n\n if (collection) {\n endpoints = collection.config.endpoints\n // /posts/route -> /route\n adjustedPathname = adjustedPathname.replace(`/${collection.config.slug}`, '')\n } else if (globalConfig) {\n // /header/route -> /route\n adjustedPathname = adjustedPathname.replace(`/${globalConfig.slug}`, '')\n endpoints = globalConfig.endpoints!\n }\n\n // sanitize when endpoint.path is '/'\n if (adjustedPathname === '') {\n adjustedPathname = '/'\n }\n\n if (endpoints === false) {\n return Response.json(\n {\n message: `Cannot ${req.method?.toUpperCase()} ${req.url}`,\n },\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.NOT_IMPLEMENTED,\n },\n )\n }\n\n // Find the relevant endpoint configuration\n const endpoint = endpoints?.find((endpoint) => {\n if (endpoint.method !== req.method?.toLowerCase()) {\n return false\n }\n\n const pathMatchFn = match(endpoint.path, { decode: decodeURIComponent })\n\n const matchResult = pathMatchFn(adjustedPathname)\n\n if (!matchResult) {\n return false\n }\n\n req.routeParams = matchResult.params as Record<string, unknown>\n\n // Inject to routeParams the slug as well so it can be used later\n if (collection) {\n req.routeParams.collection = collection.config.slug\n } else if (globalConfig) {\n req.routeParams.global = globalConfig.slug\n }\n\n return true\n })\n\n if (endpoint) {\n handler = endpoint.handler\n }\n\n if (!handler) {\n // If no custom handler found and this is an OPTIONS request,\n // return default CORS response for preflight requests\n if (req.method?.toLowerCase() === 'options') {\n return Response.json(\n {},\n {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: 200,\n },\n )\n }\n\n return notFoundResponse(req, pathname)\n }\n\n const response = await handler(req)\n\n return new Response(response.body, {\n headers: headersWithCors({\n headers: mergeHeaders(req.responseHeaders ?? new Headers(), response.headers),\n req,\n }),\n status: response.status,\n statusText: response.statusText,\n })\n } catch (_err) {\n const err = _err as APIError\n return routeError({\n collection,\n config: incomingConfig,\n err,\n req: req!,\n })\n }\n}\n"],"names":["status","httpStatus","match","createPayloadRequest","formatAdminURL","headersWithCors","mergeHeaders","routeError","notFoundResponse","req","pathname","Response","json","message","URL","url","headers","Headers","NOT_FOUND","handleEndpoints","basePath","config","incomingConfig","path","payloadInstanceCacheKey","request","handler","collection","method","toLowerCase","get","data","undefined","search","text","locale","fallbackLocale","depth","Request","cache","credentials","signal","response","canSetHeaders","payload","baseAPIPath","apiRoute","routes","api","startsWith","adjustedPathname","replace","isGlobals","segments","split","shift","firstParam","globalConfig","globals","find","each","slug","collections","endpoints","toUpperCase","NOT_IMPLEMENTED","endpoint","pathMatchFn","decode","decodeURIComponent","matchResult","routeParams","params","global","body","responseHeaders","statusText","_err","err"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"headersWithCors.d.ts","sourceRoot":"","sources":["../../src/utilities/headersWithCors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC7B,CAAA;AACD,eAAO,MAAM,eAAe,qBAAsB,QAAQ,KAAG,OA0C5D,CAAA"}
1
+ {"version":3,"file":"headersWithCors.d.ts","sourceRoot":"","sources":["../../src/utilities/headersWithCors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC7B,CAAA;AACD,eAAO,MAAM,eAAe,qBAAsB,QAAQ,KAAG,OAiD5D,CAAA"}
@@ -12,20 +12,27 @@ export const headersWithCors = ({ headers, req })=>{
12
12
  'x-apollo-tracing',
13
13
  'X-Payload-HTTP-Method-Override'
14
14
  ];
15
- headers.set('Access-Control-Allow-Methods', 'PUT, PATCH, POST, GET, DELETE, OPTIONS');
16
- if (typeof cors === 'object' && 'headers' in cors) {
17
- headers.set('Access-Control-Allow-Headers', [
18
- ...defaultAllowedHeaders,
19
- ...cors.headers
20
- ].filter(Boolean).join(', '));
21
- } else {
22
- headers.set('Access-Control-Allow-Headers', defaultAllowedHeaders.join(', '));
15
+ // Only set default CORS headers if they haven't been set by custom handler
16
+ if (!headers.has('Access-Control-Allow-Methods')) {
17
+ headers.set('Access-Control-Allow-Methods', 'PUT, PATCH, POST, GET, DELETE, OPTIONS');
23
18
  }
24
- if (cors === '*' || typeof cors === 'object' && 'origins' in cors && cors.origins === '*') {
25
- headers.set('Access-Control-Allow-Origin', '*');
26
- } else if (Array.isArray(cors) && cors.indexOf(requestOrigin) > -1 || !Array.isArray(cors) && typeof cors === 'object' && 'origins' in cors && cors.origins.indexOf(requestOrigin) > -1) {
27
- headers.set('Access-Control-Allow-Credentials', 'true');
28
- headers.set('Access-Control-Allow-Origin', requestOrigin);
19
+ if (!headers.has('Access-Control-Allow-Headers')) {
20
+ if (typeof cors === 'object' && 'headers' in cors) {
21
+ headers.set('Access-Control-Allow-Headers', [
22
+ ...defaultAllowedHeaders,
23
+ ...cors.headers
24
+ ].filter(Boolean).join(', '));
25
+ } else {
26
+ headers.set('Access-Control-Allow-Headers', defaultAllowedHeaders.join(', '));
27
+ }
28
+ }
29
+ if (!headers.has('Access-Control-Allow-Origin')) {
30
+ if (cors === '*' || typeof cors === 'object' && 'origins' in cors && cors.origins === '*') {
31
+ headers.set('Access-Control-Allow-Origin', '*');
32
+ } else if (Array.isArray(cors) && cors.indexOf(requestOrigin) > -1 || !Array.isArray(cors) && typeof cors === 'object' && 'origins' in cors && cors.origins.indexOf(requestOrigin) > -1) {
33
+ headers.set('Access-Control-Allow-Credentials', 'true');
34
+ headers.set('Access-Control-Allow-Origin', requestOrigin);
35
+ }
29
36
  }
30
37
  }
31
38
  return headers;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/headersWithCors.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\ntype CorsArgs = {\n headers: Headers\n req: Partial<PayloadRequest>\n}\nexport const headersWithCors = ({ headers, req }: CorsArgs): Headers => {\n const cors = req?.payload?.config.cors\n const requestOrigin = req?.headers?.get('Origin')\n\n if (cors) {\n const defaultAllowedHeaders = [\n 'Origin',\n 'X-Requested-With',\n 'Content-Type',\n 'Accept',\n 'Authorization',\n 'Content-Encoding',\n 'x-apollo-tracing',\n 'X-Payload-HTTP-Method-Override',\n ]\n\n headers.set('Access-Control-Allow-Methods', 'PUT, PATCH, POST, GET, DELETE, OPTIONS')\n\n if (typeof cors === 'object' && 'headers' in cors) {\n headers.set(\n 'Access-Control-Allow-Headers',\n [...defaultAllowedHeaders, ...cors.headers].filter(Boolean).join(', '),\n )\n } else {\n headers.set('Access-Control-Allow-Headers', defaultAllowedHeaders.join(', '))\n }\n\n if (cors === '*' || (typeof cors === 'object' && 'origins' in cors && cors.origins === '*')) {\n headers.set('Access-Control-Allow-Origin', '*')\n } else if (\n (Array.isArray(cors) && cors.indexOf(requestOrigin!) > -1) ||\n (!Array.isArray(cors) &&\n typeof cors === 'object' &&\n 'origins' in cors &&\n cors.origins.indexOf(requestOrigin!) > -1)\n ) {\n headers.set('Access-Control-Allow-Credentials', 'true')\n headers.set('Access-Control-Allow-Origin', requestOrigin!)\n }\n }\n\n return headers\n}\n"],"names":["headersWithCors","headers","req","cors","payload","config","requestOrigin","get","defaultAllowedHeaders","set","filter","Boolean","join","origins","Array","isArray","indexOf"],"mappings":"AAMA,OAAO,MAAMA,kBAAkB,CAAC,EAAEC,OAAO,EAAEC,GAAG,EAAY;IACxD,MAAMC,OAAOD,KAAKE,SAASC,OAAOF;IAClC,MAAMG,gBAAgBJ,KAAKD,SAASM,IAAI;IAExC,IAAIJ,MAAM;QACR,MAAMK,wBAAwB;YAC5B;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QAEDP,QAAQQ,GAAG,CAAC,gCAAgC;QAE5C,IAAI,OAAON,SAAS,YAAY,aAAaA,MAAM;YACjDF,QAAQQ,GAAG,CACT,gCACA;mBAAID;mBAA0BL,KAAKF,OAAO;aAAC,CAACS,MAAM,CAACC,SAASC,IAAI,CAAC;QAErE,OAAO;YACLX,QAAQQ,GAAG,CAAC,gCAAgCD,sBAAsBI,IAAI,CAAC;QACzE;QAEA,IAAIT,SAAS,OAAQ,OAAOA,SAAS,YAAY,aAAaA,QAAQA,KAAKU,OAAO,KAAK,KAAM;YAC3FZ,QAAQQ,GAAG,CAAC,+BAA+B;QAC7C,OAAO,IACL,AAACK,MAAMC,OAAO,CAACZ,SAASA,KAAKa,OAAO,CAACV,iBAAkB,CAAC,KACvD,CAACQ,MAAMC,OAAO,CAACZ,SACd,OAAOA,SAAS,YAChB,aAAaA,QACbA,KAAKU,OAAO,CAACG,OAAO,CAACV,iBAAkB,CAAC,GAC1C;YACAL,QAAQQ,GAAG,CAAC,oCAAoC;YAChDR,QAAQQ,GAAG,CAAC,+BAA+BH;QAC7C;IACF;IAEA,OAAOL;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/headersWithCors.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\ntype CorsArgs = {\n headers: Headers\n req: Partial<PayloadRequest>\n}\nexport const headersWithCors = ({ headers, req }: CorsArgs): Headers => {\n const cors = req?.payload?.config.cors\n const requestOrigin = req?.headers?.get('Origin')\n\n if (cors) {\n const defaultAllowedHeaders = [\n 'Origin',\n 'X-Requested-With',\n 'Content-Type',\n 'Accept',\n 'Authorization',\n 'Content-Encoding',\n 'x-apollo-tracing',\n 'X-Payload-HTTP-Method-Override',\n ]\n\n // Only set default CORS headers if they haven't been set by custom handler\n if (!headers.has('Access-Control-Allow-Methods')) {\n headers.set('Access-Control-Allow-Methods', 'PUT, PATCH, POST, GET, DELETE, OPTIONS')\n }\n\n if (!headers.has('Access-Control-Allow-Headers')) {\n if (typeof cors === 'object' && 'headers' in cors) {\n headers.set(\n 'Access-Control-Allow-Headers',\n [...defaultAllowedHeaders, ...cors.headers].filter(Boolean).join(', '),\n )\n } else {\n headers.set('Access-Control-Allow-Headers', defaultAllowedHeaders.join(', '))\n }\n }\n\n if (!headers.has('Access-Control-Allow-Origin')) {\n if (cors === '*' || (typeof cors === 'object' && 'origins' in cors && cors.origins === '*')) {\n headers.set('Access-Control-Allow-Origin', '*')\n } else if (\n (Array.isArray(cors) && cors.indexOf(requestOrigin!) > -1) ||\n (!Array.isArray(cors) &&\n typeof cors === 'object' &&\n 'origins' in cors &&\n cors.origins.indexOf(requestOrigin!) > -1)\n ) {\n headers.set('Access-Control-Allow-Credentials', 'true')\n headers.set('Access-Control-Allow-Origin', requestOrigin!)\n }\n }\n }\n\n return headers\n}\n"],"names":["headersWithCors","headers","req","cors","payload","config","requestOrigin","get","defaultAllowedHeaders","has","set","filter","Boolean","join","origins","Array","isArray","indexOf"],"mappings":"AAMA,OAAO,MAAMA,kBAAkB,CAAC,EAAEC,OAAO,EAAEC,GAAG,EAAY;IACxD,MAAMC,OAAOD,KAAKE,SAASC,OAAOF;IAClC,MAAMG,gBAAgBJ,KAAKD,SAASM,IAAI;IAExC,IAAIJ,MAAM;QACR,MAAMK,wBAAwB;YAC5B;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QAED,2EAA2E;QAC3E,IAAI,CAACP,QAAQQ,GAAG,CAAC,iCAAiC;YAChDR,QAAQS,GAAG,CAAC,gCAAgC;QAC9C;QAEA,IAAI,CAACT,QAAQQ,GAAG,CAAC,iCAAiC;YAChD,IAAI,OAAON,SAAS,YAAY,aAAaA,MAAM;gBACjDF,QAAQS,GAAG,CACT,gCACA;uBAAIF;uBAA0BL,KAAKF,OAAO;iBAAC,CAACU,MAAM,CAACC,SAASC,IAAI,CAAC;YAErE,OAAO;gBACLZ,QAAQS,GAAG,CAAC,gCAAgCF,sBAAsBK,IAAI,CAAC;YACzE;QACF;QAEA,IAAI,CAACZ,QAAQQ,GAAG,CAAC,gCAAgC;YAC/C,IAAIN,SAAS,OAAQ,OAAOA,SAAS,YAAY,aAAaA,QAAQA,KAAKW,OAAO,KAAK,KAAM;gBAC3Fb,QAAQS,GAAG,CAAC,+BAA+B;YAC7C,OAAO,IACL,AAACK,MAAMC,OAAO,CAACb,SAASA,KAAKc,OAAO,CAACX,iBAAkB,CAAC,KACvD,CAACS,MAAMC,OAAO,CAACb,SACd,OAAOA,SAAS,YAChB,aAAaA,QACbA,KAAKW,OAAO,CAACG,OAAO,CAACX,iBAAkB,CAAC,GAC1C;gBACAL,QAAQS,GAAG,CAAC,oCAAoC;gBAChDT,QAAQS,GAAG,CAAC,+BAA+BJ;YAC7C;QACF;IACF;IAEA,OAAOL;AACT,EAAC"}
@@ -13,9 +13,16 @@ type Args<T extends JsonObject = JsonObject> = {
13
13
  payload: Payload;
14
14
  publishSpecificLocale?: string;
15
15
  req?: PayloadRequest;
16
+ returning?: boolean;
16
17
  select?: SelectType;
17
18
  snapshot?: any;
18
19
  };
19
- export declare const saveVersion: <TData extends JsonObject = JsonObject>({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, select, snapshot, }: Args<TData>) => Promise<JsonObject>;
20
+ export declare function saveVersion<TData extends JsonObject = JsonObject>(args: {
21
+ returning: false;
22
+ } & Args<TData>): Promise<null>;
23
+ export declare function saveVersion<TData extends JsonObject = JsonObject>(args: {
24
+ returning: true;
25
+ } & Args<TData>): Promise<JsonObject>;
26
+ export declare function saveVersion<TData extends JsonObject = JsonObject>(args: Omit<Args<TData>, 'returning'>): Promise<JsonObject>;
20
27
  export {};
21
28
  //# sourceMappingURL=saveVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAS/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAA;CACf,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,KAAK,SAAS,UAAU,+IAavD,IAAI,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,UAAU,CA+JlC,CAAA"}
1
+ {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAA8C,OAAO,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAS/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAA;CACf,CAAA;AAED,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GACtC,OAAO,CAAC,UAAU,CAAC,CAAA;AACtB,wBAAsB,WAAW,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EACrE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GACnC,OAAO,CAAC,UAAU,CAAC,CAAA"}
@@ -4,7 +4,7 @@ import { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js';
4
4
  import { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js';
5
5
  import { enforceMaxVersions } from './enforceMaxVersions.js';
6
6
  import { saveSnapshot } from './saveSnapshot.js';
7
- export const saveVersion = async ({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, select, snapshot })=>{
7
+ export async function saveVersion({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, returning, select, snapshot }) {
8
8
  let result;
9
9
  let createNewVersion = true;
10
10
  const now = new Date().toISOString();
@@ -92,6 +92,7 @@ export const saveVersion = async ({ id, autosave, collection, docWithLocales, dr
92
92
  parent: collection ? id : undefined,
93
93
  publishedLocale: publishSpecificLocale || undefined,
94
94
  req,
95
+ returning,
95
96
  select: getQueryDraftsSelect({
96
97
  select
97
98
  }),
@@ -145,10 +146,13 @@ export const saveVersion = async ({ id, autosave, collection, docWithLocales, dr
145
146
  req
146
147
  });
147
148
  }
149
+ if (returning === false) {
150
+ return null;
151
+ }
148
152
  let createdVersion = result.version;
149
153
  createdVersion = sanitizeInternalFields(createdVersion);
150
154
  createdVersion.id = result.parent;
151
155
  return createdVersion;
152
- };
156
+ }
153
157
 
154
158
  //# sourceMappingURL=saveVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n select?: SelectType\n snapshot?: any\n}\n\nexport const saveVersion = async <TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n select,\n snapshot,\n}: Args<TData>): Promise<JsonObject> => {\n let result: JsonObject | undefined\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if (draft) {\n versionData._status = 'draft'\n }\n\n if (collection?.timestamps && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n limit: 1,\n pagination: false,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n limit: 1,\n pagination: false,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {\n createNewVersion = false\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n result = await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","select","snapshot","result","createNewVersion","now","Date","toISOString","versionData","_status","timestamps","updatedAt","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","updateVersionArgs","createdAt","latest","version","updateVersion","updateGlobalVersion","createVersionArgs","Boolean","collectionSlug","undefined","globalSlug","publishedLocale","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n returning?: boolean\n select?: SelectType\n snapshot?: any\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n returning,\n select,\n snapshot,\n}: Args<TData>): Promise<JsonObject | null> {\n let result: JsonObject | undefined\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if (draft) {\n versionData._status = 'draft'\n }\n\n if (collection?.timestamps && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n limit: 1,\n pagination: false,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n limit: 1,\n pagination: false,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {\n createNewVersion = false\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n result = await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n if (returning === false) {\n return null\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","result","createNewVersion","now","Date","toISOString","versionData","_status","timestamps","updatedAt","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","updateVersionArgs","createdAt","latest","version","updateVersion","updateGlobalVersion","createVersionArgs","Boolean","collectionSlug","undefined","globalSlug","publishedLocale","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.71.0-internal-debug.cd77e5d",
3
+ "version": "3.71.0-internal-debug.dea9d74",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -111,7 +111,7 @@
111
111
  "undici": "7.10.0",
112
112
  "uuid": "10.0.0",
113
113
  "ws": "^8.16.0",
114
- "@payloadcms/translations": "3.71.0-internal-debug.cd77e5d"
114
+ "@payloadcms/translations": "3.71.0-internal-debug.dea9d74"
115
115
  },
116
116
  "devDependencies": {
117
117
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",