payload 3.42.0 → 3.43.0-internal.c5bbc84

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 (220) hide show
  1. package/dist/admin/functions/index.d.ts +8 -0
  2. package/dist/admin/functions/index.d.ts.map +1 -1
  3. package/dist/admin/functions/index.js.map +1 -1
  4. package/dist/admin/types.d.ts +1 -1
  5. package/dist/admin/types.d.ts.map +1 -1
  6. package/dist/admin/types.js.map +1 -1
  7. package/dist/admin/views/folderList.d.ts +14 -5
  8. package/dist/admin/views/folderList.d.ts.map +1 -1
  9. package/dist/admin/views/folderList.js.map +1 -1
  10. package/dist/auth/crypto.d.ts.map +1 -1
  11. package/dist/auth/crypto.js +6 -3
  12. package/dist/auth/crypto.js.map +1 -1
  13. package/dist/auth/operations/unlock.d.ts.map +1 -1
  14. package/dist/auth/operations/unlock.js +1 -2
  15. package/dist/auth/operations/unlock.js.map +1 -1
  16. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  17. package/dist/auth/strategies/local/authenticate.js +1 -0
  18. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  19. package/dist/bin/index.js.map +1 -1
  20. package/dist/bin/migrate.d.ts.map +1 -1
  21. package/dist/bin/migrate.js +2 -2
  22. package/dist/bin/migrate.js.map +1 -1
  23. package/dist/collections/config/client.d.ts.map +1 -1
  24. package/dist/collections/config/client.js +3 -1
  25. package/dist/collections/config/client.js.map +1 -1
  26. package/dist/collections/dataloader.d.ts.map +1 -1
  27. package/dist/collections/dataloader.js +0 -1
  28. package/dist/collections/dataloader.js.map +1 -1
  29. package/dist/collections/operations/delete.d.ts.map +1 -1
  30. package/dist/collections/operations/delete.js +1 -2
  31. package/dist/collections/operations/delete.js.map +1 -1
  32. package/dist/collections/operations/findVersions.js +0 -1
  33. package/dist/collections/operations/findVersions.js.map +1 -1
  34. package/dist/collections/operations/update.d.ts.map +1 -1
  35. package/dist/collections/operations/update.js +3 -2
  36. package/dist/collections/operations/update.js.map +1 -1
  37. package/dist/config/client.d.ts.map +1 -1
  38. package/dist/config/client.js +1 -1
  39. package/dist/config/client.js.map +1 -1
  40. package/dist/config/sanitize.d.ts.map +1 -1
  41. package/dist/config/sanitize.js +1 -2
  42. package/dist/config/sanitize.js.map +1 -1
  43. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  44. package/dist/database/queryValidation/validateQueryPaths.js +0 -1
  45. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  46. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  47. package/dist/database/queryValidation/validateSearchParams.js +0 -1
  48. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  49. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
  50. package/dist/database/sanitizeJoinQuery.js +3 -1
  51. package/dist/database/sanitizeJoinQuery.js.map +1 -1
  52. package/dist/fields/config/client.d.ts.map +1 -1
  53. package/dist/fields/config/client.js +6 -1
  54. package/dist/fields/config/client.js.map +1 -1
  55. package/dist/fields/config/sanitize.d.ts.map +1 -1
  56. package/dist/fields/config/sanitize.js +0 -1
  57. package/dist/fields/config/sanitize.js.map +1 -1
  58. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  59. package/dist/fields/hooks/afterRead/index.js +0 -1
  60. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  61. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  62. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +1 -2
  63. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  64. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  65. package/dist/fields/hooks/beforeChange/promise.js +0 -1
  66. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  67. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  68. package/dist/fields/validations.d.ts.map +1 -1
  69. package/dist/fields/validations.js +1 -2
  70. package/dist/fields/validations.js.map +1 -1
  71. package/dist/folders/types.d.ts +2 -0
  72. package/dist/folders/types.d.ts.map +1 -1
  73. package/dist/folders/types.js.map +1 -1
  74. package/dist/globals/config/client.d.ts.map +1 -1
  75. package/dist/globals/config/client.js +2 -1
  76. package/dist/globals/config/client.js.map +1 -1
  77. package/dist/index.d.ts +1 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +2 -3
  80. package/dist/index.js.map +1 -1
  81. package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
  82. package/dist/queues/operations/runJobs/index.js +0 -1
  83. package/dist/queues/operations/runJobs/index.js.map +1 -1
  84. package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
  85. package/dist/queues/operations/runJobs/runJSONJob/index.js +2 -2
  86. package/dist/queues/operations/runJobs/runJSONJob/index.js.map +1 -1
  87. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
  88. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +0 -1
  89. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  90. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
  91. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +1 -1
  92. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
  93. package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts.map +1 -1
  94. package/dist/queues/operations/runJobs/runJob/importHandlerPath.js +1 -2
  95. package/dist/queues/operations/runJobs/runJob/importHandlerPath.js.map +1 -1
  96. package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
  97. package/dist/queues/operations/runJobs/runJob/index.js +2 -2
  98. package/dist/queues/operations/runJobs/runJob/index.js.map +1 -1
  99. package/dist/uploads/cropImage.d.ts +0 -1
  100. package/dist/uploads/cropImage.d.ts.map +1 -1
  101. package/dist/uploads/cropImage.js +2 -3
  102. package/dist/uploads/cropImage.js.map +1 -1
  103. package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
  104. package/dist/uploads/endpoints/getFile.js +0 -1
  105. package/dist/uploads/endpoints/getFile.js.map +1 -1
  106. package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
  107. package/dist/uploads/endpoints/getFileFromURL.js +2 -3
  108. package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
  109. package/dist/uploads/fetchAPI-multipart/fileFactory.d.ts.map +1 -1
  110. package/dist/uploads/fetchAPI-multipart/fileFactory.js +1 -0
  111. package/dist/uploads/fetchAPI-multipart/fileFactory.js.map +1 -1
  112. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +6 -0
  113. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  114. package/dist/uploads/fetchAPI-multipart/processMultipart.js +0 -1
  115. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  116. package/dist/uploads/fetchAPI-multipart/processNested.d.ts +1 -1
  117. package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
  118. package/dist/uploads/fetchAPI-multipart/processNested.js +0 -1
  119. package/dist/uploads/fetchAPI-multipart/processNested.js.map +1 -1
  120. package/dist/uploads/fetchAPI-multipart/utilities.d.ts +1 -1
  121. package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
  122. package/dist/uploads/fetchAPI-multipart/utilities.js +0 -1
  123. package/dist/uploads/fetchAPI-multipart/utilities.js.map +1 -1
  124. package/dist/uploads/fetchAPI-stream-file/index.d.ts +1 -1
  125. package/dist/uploads/fetchAPI-stream-file/index.d.ts.map +1 -1
  126. package/dist/uploads/fetchAPI-stream-file/index.js +0 -1
  127. package/dist/uploads/fetchAPI-stream-file/index.js.map +1 -1
  128. package/dist/uploads/tempFile.d.ts +1 -1
  129. package/dist/uploads/tempFile.d.ts.map +1 -1
  130. package/dist/uploads/tempFile.js +0 -1
  131. package/dist/uploads/tempFile.js.map +1 -1
  132. package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
  133. package/dist/utilities/addLocalesToRequest.js +0 -1
  134. package/dist/utilities/addLocalesToRequest.js.map +1 -1
  135. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  136. package/dist/utilities/configToJSONSchema.js +2 -1
  137. package/dist/utilities/configToJSONSchema.js.map +1 -1
  138. package/dist/utilities/deepCopyObject.js +1 -2
  139. package/dist/utilities/deepCopyObject.js.map +1 -1
  140. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  141. package/dist/utilities/fieldSchemaToJSON.js +0 -1
  142. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  143. package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
  144. package/dist/utilities/flattenTopLevelFields.js +0 -1
  145. package/dist/utilities/flattenTopLevelFields.js.map +1 -1
  146. package/dist/utilities/formatErrors.d.ts.map +1 -1
  147. package/dist/utilities/formatErrors.js +0 -1
  148. package/dist/utilities/formatErrors.js.map +1 -1
  149. package/dist/utilities/getCollectionIDFieldTypes.d.ts.map +1 -1
  150. package/dist/utilities/getCollectionIDFieldTypes.js +0 -1
  151. package/dist/utilities/getCollectionIDFieldTypes.js.map +1 -1
  152. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  153. package/dist/utilities/getDataByPath.js +0 -1
  154. package/dist/utilities/getDataByPath.js.map +1 -1
  155. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  156. package/dist/utilities/getEntityPolicies.js +3 -2
  157. package/dist/utilities/getEntityPolicies.js.map +1 -1
  158. package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
  159. package/dist/utilities/getFieldPermissions.js +2 -3
  160. package/dist/utilities/getFieldPermissions.js.map +1 -1
  161. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  162. package/dist/utilities/getObjectDotNotation.js +0 -1
  163. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  164. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  165. package/dist/utilities/getSiblingData.js +0 -1
  166. package/dist/utilities/getSiblingData.js.map +1 -1
  167. package/dist/utilities/getUniqueListBy.d.ts.map +1 -1
  168. package/dist/utilities/getUniqueListBy.js +0 -1
  169. package/dist/utilities/getUniqueListBy.js.map +1 -1
  170. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  171. package/dist/utilities/handleEndpoints.js +2 -2
  172. package/dist/utilities/handleEndpoints.js.map +1 -1
  173. package/dist/utilities/logError.d.ts.map +1 -1
  174. package/dist/utilities/logError.js +0 -1
  175. package/dist/utilities/logError.js.map +1 -1
  176. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  177. package/dist/utilities/reduceFieldsToValues.js +0 -1
  178. package/dist/utilities/reduceFieldsToValues.js.map +1 -1
  179. package/dist/utilities/sanitizeJoinParams.d.ts +1 -1
  180. package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
  181. package/dist/utilities/sanitizeJoinParams.js +2 -2
  182. package/dist/utilities/sanitizeJoinParams.js.map +1 -1
  183. package/dist/utilities/sanitizePermissions.d.ts.map +1 -1
  184. package/dist/utilities/sanitizePermissions.js +2 -2
  185. package/dist/utilities/sanitizePermissions.js.map +1 -1
  186. package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
  187. package/dist/utilities/sanitizePopulateParam.js +1 -1
  188. package/dist/utilities/sanitizePopulateParam.js.map +1 -1
  189. package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
  190. package/dist/utilities/sanitizeSelectParam.js +4 -2
  191. package/dist/utilities/sanitizeSelectParam.js.map +1 -1
  192. package/dist/utilities/telemetry/conf/envPaths.d.ts +1 -1
  193. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
  194. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
  195. package/dist/utilities/timestamp.d.ts +1 -1
  196. package/dist/utilities/timestamp.d.ts.map +1 -1
  197. package/dist/utilities/timestamp.js +0 -1
  198. package/dist/utilities/timestamp.js.map +1 -1
  199. package/dist/utilities/traverseFields.d.ts.map +1 -1
  200. package/dist/utilities/traverseFields.js +6 -1
  201. package/dist/utilities/traverseFields.js.map +1 -1
  202. package/dist/utilities/unflatten.d.ts.map +1 -1
  203. package/dist/utilities/unflatten.js +1 -2
  204. package/dist/utilities/unflatten.js.map +1 -1
  205. package/dist/utilities/wait.d.ts +1 -1
  206. package/dist/utilities/wait.d.ts.map +1 -1
  207. package/dist/utilities/wait.js +0 -1
  208. package/dist/utilities/wait.js.map +1 -1
  209. package/dist/versions/baseFields.d.ts +2 -7
  210. package/dist/versions/baseFields.d.ts.map +1 -1
  211. package/dist/versions/baseFields.js.map +1 -1
  212. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  213. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +1 -0
  214. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  215. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  216. package/dist/versions/getLatestGlobalVersion.js +3 -1
  217. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  218. package/dist/versions/saveVersion.js +1 -1
  219. package/dist/versions/saveVersion.js.map +1 -1
  220. package/package.json +3 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/handleEndpoints.ts"],"sourcesContent":["// @ts-strict-ignore\nimport { 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 { GlobalConfig } from '../globals/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { createPayloadRequest } from './createPayloadRequest.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 request,\n}: {\n basePath?: string\n config: Promise<SanitizedConfig> | SanitizedConfig\n /** Override path from the request */\n path?: 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 interally 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 const search = await request.text()\n\n const url = `${request.url}?${new URLSearchParams(search).toString()}`\n const response = await handleEndpoints({\n basePath,\n config: incomingConfig,\n path,\n request: new Request(url, {\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n method: 'GET',\n signal: request.signal,\n }),\n })\n\n return response\n }\n\n try {\n req = await createPayloadRequest({ canSetHeaders: true, config: incomingConfig, request })\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 = `${basePath}${path ?? new URL(req.url!).pathname}`\n\n if (!pathname.startsWith(config.routes.api)) {\n return notFoundResponse(req, pathname)\n }\n\n // /api/posts/route -> /posts/route\n let adjustedPathname = pathname.replace(config.routes.api, '')\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 return routeError({\n collection,\n config: incomingConfig,\n err,\n req: req!,\n })\n }\n}\n"],"names":["status","httpStatus","match","createPayloadRequest","headersWithCors","mergeHeaders","routeError","notFoundResponse","req","pathname","Response","json","message","URL","url","headers","Headers","NOT_FOUND","handleEndpoints","basePath","config","incomingConfig","path","request","handler","collection","method","toLowerCase","get","search","text","URLSearchParams","toString","response","Request","cache","credentials","signal","canSetHeaders","payload","startsWith","routes","api","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"],"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 { 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 request,\n}: {\n basePath?: string\n config: Promise<SanitizedConfig> | SanitizedConfig\n /** Override path from the request */\n path?: 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 interally 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 const search = await request.text()\n\n const url = `${request.url}?${new URLSearchParams(search).toString()}`\n const response = await handleEndpoints({\n basePath,\n config: incomingConfig,\n path,\n request: new Request(url, {\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n method: 'GET',\n signal: request.signal,\n }),\n })\n\n return response\n }\n\n try {\n req = await createPayloadRequest({ canSetHeaders: true, config: incomingConfig, request })\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 = `${basePath}${path ?? new URL(req.url!).pathname}`\n\n if (!pathname.startsWith(config.routes.api)) {\n return notFoundResponse(req, pathname)\n }\n\n // /api/posts/route -> /posts/route\n let adjustedPathname = pathname.replace(config.routes.api, '')\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","headersWithCors","mergeHeaders","routeError","notFoundResponse","req","pathname","Response","json","message","URL","url","headers","Headers","NOT_FOUND","handleEndpoints","basePath","config","incomingConfig","path","request","handler","collection","method","toLowerCase","get","search","text","URLSearchParams","toString","response","Request","cache","credentials","signal","canSetHeaders","payload","startsWith","routes","api","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":"logError.d.ts","sourceRoot":"","sources":["../../src/utilities/logError.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,eAAO,MAAM,QAAQ,qBAAsB;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,IAwB/E,CAAA"}
1
+ {"version":3,"file":"logError.d.ts","sourceRoot":"","sources":["../../src/utilities/logError.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,eAAO,MAAM,QAAQ,qBAAsB;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,IAyB/E,CAAA"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  export const logError = ({ err, payload })=>{
3
2
  let level = 'error';
4
3
  if (err && typeof err === 'object' && 'name' in err && typeof err.name === 'string' && typeof payload.config.loggingLevels[err.name] !== 'undefined') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/logError.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type pino from 'pino'\n\nimport type { Payload } from '../types/index.js'\n\nexport const logError = ({ err, payload }: { err: unknown; payload: Payload }): void => {\n let level: false | pino.Level = 'error'\n\n if (\n err &&\n typeof err === 'object' &&\n 'name' in err &&\n typeof err.name === 'string' &&\n typeof payload.config.loggingLevels[err.name] !== 'undefined'\n ) {\n level = payload.config.loggingLevels[err.name]\n }\n\n if (level) {\n const logObject: { err?: unknown; msg?: unknown } = {}\n\n if (level === 'info') {\n logObject.msg = typeof err === 'object' && 'message' in err! ? err.message : 'Error'\n } else {\n logObject.err = err\n }\n\n payload.logger[level](logObject)\n }\n}\n"],"names":["logError","err","payload","level","name","config","loggingLevels","logObject","msg","message","logger"],"mappings":"AAAA,oBAAoB;AAKpB,OAAO,MAAMA,WAAW,CAAC,EAAEC,GAAG,EAAEC,OAAO,EAAsC;IAC3E,IAAIC,QAA4B;IAEhC,IACEF,OACA,OAAOA,QAAQ,YACf,UAAUA,OACV,OAAOA,IAAIG,IAAI,KAAK,YACpB,OAAOF,QAAQG,MAAM,CAACC,aAAa,CAACL,IAAIG,IAAI,CAAC,KAAK,aAClD;QACAD,QAAQD,QAAQG,MAAM,CAACC,aAAa,CAACL,IAAIG,IAAI,CAAC;IAChD;IAEA,IAAID,OAAO;QACT,MAAMI,YAA8C,CAAC;QAErD,IAAIJ,UAAU,QAAQ;YACpBI,UAAUC,GAAG,GAAG,OAAOP,QAAQ,YAAY,aAAaA,MAAOA,IAAIQ,OAAO,GAAG;QAC/E,OAAO;YACLF,UAAUN,GAAG,GAAGA;QAClB;QAEAC,QAAQQ,MAAM,CAACP,MAAM,CAACI;IACxB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/logError.ts"],"sourcesContent":["import type pino from 'pino'\n\nimport type { Payload } from '../types/index.js'\n\nexport const logError = ({ err, payload }: { err: unknown; payload: Payload }): void => {\n let level: false | pino.Level = 'error'\n\n if (\n err &&\n typeof err === 'object' &&\n 'name' in err &&\n typeof err.name === 'string' &&\n typeof payload.config.loggingLevels[err.name as keyof typeof payload.config.loggingLevels] !==\n 'undefined'\n ) {\n level = payload.config.loggingLevels[err.name as keyof typeof payload.config.loggingLevels]\n }\n\n if (level) {\n const logObject: { err?: unknown; msg?: unknown } = {}\n\n if (level === 'info') {\n logObject.msg = typeof err === 'object' && 'message' in err! ? err.message : 'Error'\n } else {\n logObject.err = err\n }\n\n payload.logger[level](logObject)\n }\n}\n"],"names":["logError","err","payload","level","name","config","loggingLevels","logObject","msg","message","logger"],"mappings":"AAIA,OAAO,MAAMA,WAAW,CAAC,EAAEC,GAAG,EAAEC,OAAO,EAAsC;IAC3E,IAAIC,QAA4B;IAEhC,IACEF,OACA,OAAOA,QAAQ,YACf,UAAUA,OACV,OAAOA,IAAIG,IAAI,KAAK,YACpB,OAAOF,QAAQG,MAAM,CAACC,aAAa,CAACL,IAAIG,IAAI,CAA8C,KACxF,aACF;QACAD,QAAQD,QAAQG,MAAM,CAACC,aAAa,CAACL,IAAIG,IAAI,CAA8C;IAC7F;IAEA,IAAID,OAAO;QACT,MAAMI,YAA8C,CAAC;QAErD,IAAIJ,UAAU,QAAQ;YACpBI,UAAUC,GAAG,GAAG,OAAOP,QAAQ,YAAY,aAAaA,MAAOA,IAAIQ,OAAO,GAAG;QAC/E,OAAO;YACLF,UAAUN,GAAG,GAAGA;QAClB;QAEAC,QAAQQ,MAAM,CAACP,MAAM,CAACI;IACxB;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldsToValues.d.ts","sourceRoot":"","sources":["../../src/utilities/reduceFieldsToValues.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,WACvB,SAAS,cACL,OAAO,0BACK,OAAO,KAC9B,IAkBF,CAAA"}
1
+ {"version":3,"file":"reduceFieldsToValues.d.ts","sourceRoot":"","sources":["../../src/utilities/reduceFieldsToValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,WACvB,SAAS,cACL,OAAO,0BACK,OAAO,KAC9B,IAkBF,CAAA"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  import { unflatten as flatleyUnflatten } from './unflatten.js';
3
2
  /**
4
3
  * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/reduceFieldsToValues.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { Data, FormState } from '../admin/types.js'\n\nimport { unflatten as flatleyUnflatten } from './unflatten.js'\n/**\n * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object\n *\n * @param unflatten This also unflattens the data if `unflatten` is true. The unflattened data should match the original data structure\n * @param ignoreDisableFormData - if true, will include fields that have `disableFormData` set to true, for example, blocks or arrays fields.\n *\n */\nexport const reduceFieldsToValues = (\n fields: FormState,\n unflatten?: boolean,\n ignoreDisableFormData?: boolean,\n): Data => {\n let data = {}\n\n if (!fields) {\n return data\n }\n\n Object.keys(fields).forEach((key) => {\n if (ignoreDisableFormData === true || !fields[key]?.disableFormData) {\n data[key] = fields[key]?.value\n }\n })\n\n if (unflatten) {\n data = flatleyUnflatten(data)\n }\n\n return data\n}\n"],"names":["unflatten","flatleyUnflatten","reduceFieldsToValues","fields","ignoreDisableFormData","data","Object","keys","forEach","key","disableFormData","value"],"mappings":"AAAA,oBAAoB;AAGpB,SAASA,aAAaC,gBAAgB,QAAQ,iBAAgB;AAC9D;;;;;;CAMC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,QACAH,WACAI;IAEA,IAAIC,OAAO,CAAC;IAEZ,IAAI,CAACF,QAAQ;QACX,OAAOE;IACT;IAEAC,OAAOC,IAAI,CAACJ,QAAQK,OAAO,CAAC,CAACC;QAC3B,IAAIL,0BAA0B,QAAQ,CAACD,MAAM,CAACM,IAAI,EAAEC,iBAAiB;YACnEL,IAAI,CAACI,IAAI,GAAGN,MAAM,CAACM,IAAI,EAAEE;QAC3B;IACF;IAEA,IAAIX,WAAW;QACbK,OAAOJ,iBAAiBI;IAC1B;IAEA,OAAOA;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/reduceFieldsToValues.ts"],"sourcesContent":["import type { Data, FormState } from '../admin/types.js'\n\nimport { unflatten as flatleyUnflatten } from './unflatten.js'\n/**\n * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object\n *\n * @param unflatten This also unflattens the data if `unflatten` is true. The unflattened data should match the original data structure\n * @param ignoreDisableFormData - if true, will include fields that have `disableFormData` set to true, for example, blocks or arrays fields.\n *\n */\nexport const reduceFieldsToValues = (\n fields: FormState,\n unflatten?: boolean,\n ignoreDisableFormData?: boolean,\n): Data => {\n let data: Record<string, any> = {}\n\n if (!fields) {\n return data\n }\n\n Object.keys(fields).forEach((key) => {\n if (ignoreDisableFormData === true || !fields[key]?.disableFormData) {\n data[key] = fields[key]?.value\n }\n })\n\n if (unflatten) {\n data = flatleyUnflatten(data)\n }\n\n return data\n}\n"],"names":["unflatten","flatleyUnflatten","reduceFieldsToValues","fields","ignoreDisableFormData","data","Object","keys","forEach","key","disableFormData","value"],"mappings":"AAEA,SAASA,aAAaC,gBAAgB,QAAQ,iBAAgB;AAC9D;;;;;;CAMC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,QACAH,WACAI;IAEA,IAAIC,OAA4B,CAAC;IAEjC,IAAI,CAACF,QAAQ;QACX,OAAOE;IACT;IAEAC,OAAOC,IAAI,CAACJ,QAAQK,OAAO,CAAC,CAACC;QAC3B,IAAIL,0BAA0B,QAAQ,CAACD,MAAM,CAACM,IAAI,EAAEC,iBAAiB;YACnEL,IAAI,CAACI,IAAI,GAAGN,MAAM,CAACM,IAAI,EAAEE;QAC3B;IACF;IAEA,IAAIX,WAAW;QACbK,OAAOJ,iBAAiBI;IAC1B;IAEA,OAAOA;AACT,EAAC"}
@@ -10,5 +10,5 @@ export type JoinParams = {
10
10
  * Convert request JoinQuery object from strings to numbers
11
11
  * @param joins
12
12
  */
13
- export declare const sanitizeJoinParams: (joins?: JoinParams) => JoinQuery;
13
+ export declare const sanitizeJoinParams: (_joins?: JoinParams) => JoinQuery;
14
14
  //# sourceMappingURL=sanitizeJoinParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeJoinParams.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeJoinParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAIlD,MAAM,MAAM,UAAU,GAClB;IACE,CAAC,UAAU,EAAE,MAAM,GACf;QACE,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,GACD,KAAK,CAAA;CACV,GACD,KAAK,CAAA;AAET;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WAAW,UAAU,KAAQ,SAkB3D,CAAA"}
1
+ {"version":3,"file":"sanitizeJoinParams.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeJoinParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAIlD,MAAM,MAAM,UAAU,GAClB;IACE,CAAC,UAAU,EAAE,MAAM,GACf;QACE,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,GACD,KAAK,CAAA;CACV,GACD,KAAK,CAAA;AAET;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YAAY,UAAU,KAAQ,SAmB5D,CAAA"}
@@ -1,10 +1,10 @@
1
- // @ts-strict-ignore
2
1
  import { isNumber } from './isNumber.js';
3
2
  /**
4
3
  * Convert request JoinQuery object from strings to numbers
5
4
  * @param joins
6
- */ export const sanitizeJoinParams = (joins = {})=>{
5
+ */ export const sanitizeJoinParams = (_joins = {})=>{
7
6
  const joinQuery = {};
7
+ const joins = _joins;
8
8
  Object.keys(joins).forEach((schemaPath)=>{
9
9
  if (joins[schemaPath] === 'false' || joins[schemaPath] === false) {
10
10
  joinQuery[schemaPath] = false;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizeJoinParams.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { JoinQuery } from '../types/index.js'\n\nimport { isNumber } from './isNumber.js'\n\nexport type JoinParams =\n | {\n [schemaPath: string]:\n | {\n limit?: unknown\n sort?: string\n where?: unknown\n }\n | false\n }\n | false\n\n/**\n * Convert request JoinQuery object from strings to numbers\n * @param joins\n */\nexport const sanitizeJoinParams = (joins: JoinParams = {}): JoinQuery => {\n const joinQuery = {}\n\n Object.keys(joins).forEach((schemaPath) => {\n if (joins[schemaPath] === 'false' || joins[schemaPath] === false) {\n joinQuery[schemaPath] = false\n } else {\n joinQuery[schemaPath] = {\n count: joins[schemaPath].count === 'true',\n limit: isNumber(joins[schemaPath]?.limit) ? Number(joins[schemaPath].limit) : undefined,\n page: isNumber(joins[schemaPath]?.page) ? Number(joins[schemaPath].page) : undefined,\n sort: joins[schemaPath]?.sort ? joins[schemaPath].sort : undefined,\n where: joins[schemaPath]?.where ? joins[schemaPath].where : undefined,\n }\n }\n })\n\n return joinQuery\n}\n"],"names":["isNumber","sanitizeJoinParams","joins","joinQuery","Object","keys","forEach","schemaPath","count","limit","Number","undefined","page","sort","where"],"mappings":"AAAA,oBAAoB;AAGpB,SAASA,QAAQ,QAAQ,gBAAe;AAcxC;;;CAGC,GACD,OAAO,MAAMC,qBAAqB,CAACC,QAAoB,CAAC,CAAC;IACvD,MAAMC,YAAY,CAAC;IAEnBC,OAAOC,IAAI,CAACH,OAAOI,OAAO,CAAC,CAACC;QAC1B,IAAIL,KAAK,CAACK,WAAW,KAAK,WAAWL,KAAK,CAACK,WAAW,KAAK,OAAO;YAChEJ,SAAS,CAACI,WAAW,GAAG;QAC1B,OAAO;YACLJ,SAAS,CAACI,WAAW,GAAG;gBACtBC,OAAON,KAAK,CAACK,WAAW,CAACC,KAAK,KAAK;gBACnCC,OAAOT,SAASE,KAAK,CAACK,WAAW,EAAEE,SAASC,OAAOR,KAAK,CAACK,WAAW,CAACE,KAAK,IAAIE;gBAC9EC,MAAMZ,SAASE,KAAK,CAACK,WAAW,EAAEK,QAAQF,OAAOR,KAAK,CAACK,WAAW,CAACK,IAAI,IAAID;gBAC3EE,MAAMX,KAAK,CAACK,WAAW,EAAEM,OAAOX,KAAK,CAACK,WAAW,CAACM,IAAI,GAAGF;gBACzDG,OAAOZ,KAAK,CAACK,WAAW,EAAEO,QAAQZ,KAAK,CAACK,WAAW,CAACO,KAAK,GAAGH;YAC9D;QACF;IACF;IAEA,OAAOR;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/sanitizeJoinParams.ts"],"sourcesContent":["import type { JoinQuery } from '../types/index.js'\n\nimport { isNumber } from './isNumber.js'\n\nexport type JoinParams =\n | {\n [schemaPath: string]:\n | {\n limit?: unknown\n sort?: string\n where?: unknown\n }\n | false\n }\n | false\n\n/**\n * Convert request JoinQuery object from strings to numbers\n * @param joins\n */\nexport const sanitizeJoinParams = (_joins: JoinParams = {}): JoinQuery => {\n const joinQuery: Record<string, any> = {}\n const joins = _joins as Record<string, any>\n\n Object.keys(joins).forEach((schemaPath) => {\n if (joins[schemaPath] === 'false' || joins[schemaPath] === false) {\n joinQuery[schemaPath] = false\n } else {\n joinQuery[schemaPath] = {\n count: joins[schemaPath].count === 'true',\n limit: isNumber(joins[schemaPath]?.limit) ? Number(joins[schemaPath].limit) : undefined,\n page: isNumber(joins[schemaPath]?.page) ? Number(joins[schemaPath].page) : undefined,\n sort: joins[schemaPath]?.sort ? joins[schemaPath].sort : undefined,\n where: joins[schemaPath]?.where ? joins[schemaPath].where : undefined,\n }\n }\n })\n\n return joinQuery\n}\n"],"names":["isNumber","sanitizeJoinParams","_joins","joinQuery","joins","Object","keys","forEach","schemaPath","count","limit","Number","undefined","page","sort","where"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,gBAAe;AAcxC;;;CAGC,GACD,OAAO,MAAMC,qBAAqB,CAACC,SAAqB,CAAC,CAAC;IACxD,MAAMC,YAAiC,CAAC;IACxC,MAAMC,QAAQF;IAEdG,OAAOC,IAAI,CAACF,OAAOG,OAAO,CAAC,CAACC;QAC1B,IAAIJ,KAAK,CAACI,WAAW,KAAK,WAAWJ,KAAK,CAACI,WAAW,KAAK,OAAO;YAChEL,SAAS,CAACK,WAAW,GAAG;QAC1B,OAAO;YACLL,SAAS,CAACK,WAAW,GAAG;gBACtBC,OAAOL,KAAK,CAACI,WAAW,CAACC,KAAK,KAAK;gBACnCC,OAAOV,SAASI,KAAK,CAACI,WAAW,EAAEE,SAASC,OAAOP,KAAK,CAACI,WAAW,CAACE,KAAK,IAAIE;gBAC9EC,MAAMb,SAASI,KAAK,CAACI,WAAW,EAAEK,QAAQF,OAAOP,KAAK,CAACI,WAAW,CAACK,IAAI,IAAID;gBAC3EE,MAAMV,KAAK,CAACI,WAAW,EAAEM,OAAOV,KAAK,CAACI,WAAW,CAACM,IAAI,GAAGF;gBACzDG,OAAOX,KAAK,CAACI,WAAW,EAAEO,QAAQX,KAAK,CAACI,WAAW,CAACO,KAAK,GAAGH;YAC9D;QACF;IACF;IAEA,OAAOT;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizePermissions.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAKV,WAAW,EAIX,oBAAoB,EACrB,MAAM,kBAAkB,CAAA;AAmKzB,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAUpF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAU5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAChD,oBAAoB,CAiBtB"}
1
+ {"version":3,"file":"sanitizePermissions.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAKV,WAAW,EAIX,oBAAoB,EACrB,MAAM,kBAAkB,CAAA;AAoKzB,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAUpF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAU5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAChD,oBAAoB,CAiBtB"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  function checkAndSanitizeFieldsPermssions(data) {
3
2
  let allFieldPermissionsTrue = true;
4
3
  for(const key in data){
@@ -19,7 +18,8 @@ function checkAndSanitizeFieldsPermssions(data) {
19
18
  /**
20
19
  * Check if all permissions in a FieldPermissions, CollectionPermission or GlobalPermission object are true.
21
20
  * If nested fields or blocks are present, the function will recursively check those as well.
22
- */ function checkAndSanitizePermissions(data) {
21
+ */ function checkAndSanitizePermissions(_data) {
22
+ const data = _data;
23
23
  /**
24
24
  * Check blocks permissions
25
25
  */ let blocksPermissions = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizePermissions.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { MarkOptional } from 'ts-essentials'\n\nimport type {\n CollectionPermission,\n FieldPermissions,\n FieldsPermissions,\n GlobalPermission,\n Permissions,\n SanitizedBlocksPermissions,\n SanitizedFieldPermissions,\n SanitizedFieldsPermissions,\n SanitizedPermissions,\n} from '../auth/types.js'\n\nfunction checkAndSanitizeFieldsPermssions(data: FieldsPermissions): boolean {\n let allFieldPermissionsTrue = true\n for (const key in data) {\n if (typeof data[key] === 'object') {\n if (!checkAndSanitizePermissions(data[key])) {\n allFieldPermissionsTrue = false\n } else {\n ;(data[key] as unknown as SanitizedFieldPermissions) = true\n }\n } else if (data[key] !== true) {\n allFieldPermissionsTrue = false\n }\n }\n\n // If all values are true or it's an empty object, return true\n return allFieldPermissionsTrue\n}\n\n/**\n * Check if all permissions in a FieldPermissions, CollectionPermission or GlobalPermission object are true.\n * If nested fields or blocks are present, the function will recursively check those as well.\n */\nfunction checkAndSanitizePermissions(\n data: CollectionPermission | FieldPermissions | GlobalPermission,\n): boolean {\n /**\n * Check blocks permissions\n */\n let blocksPermissions = true\n if ('blocks' in data && data.blocks) {\n for (const blockSlug in data.blocks) {\n if (typeof data.blocks[blockSlug] === 'object') {\n for (const key in data.blocks[blockSlug]) {\n /**\n * Check fields in nested blocks\n */\n if (key === 'fields') {\n if (data.blocks[blockSlug].fields) {\n if (!checkAndSanitizeFieldsPermssions(data.blocks[blockSlug].fields)) {\n blocksPermissions = false\n } else {\n ;(data.blocks[blockSlug].fields as unknown as SanitizedFieldsPermissions) = true\n }\n }\n } else {\n if (typeof data.blocks[blockSlug][key] === 'object') {\n /**\n * Check Permissions in nested blocks\n */\n if (isPermissionObject(data.blocks[blockSlug][key])) {\n if (\n data.blocks[blockSlug][key]['permission'] === true &&\n !('where' in data.blocks[blockSlug][key])\n ) {\n // If the permission is true and there is no where clause, set the key to true\n data.blocks[blockSlug][key] = true\n continue\n } else if (\n data.blocks[blockSlug][key]['permission'] === true &&\n 'where' in data.blocks[blockSlug][key]\n ) {\n // otherwise do nothing so we can keep the where clause\n blocksPermissions = false\n } else {\n blocksPermissions = false\n data.blocks[blockSlug][key] = false\n delete data.blocks[blockSlug][key]\n continue\n }\n } else {\n throw new Error('Unexpected object in block permissions')\n }\n }\n }\n }\n } else if (data.blocks[blockSlug] !== true) {\n // If any value is not true, return false\n blocksPermissions = false\n delete data.blocks[blockSlug]\n }\n }\n if (blocksPermissions) {\n ;(data.blocks as unknown as SanitizedBlocksPermissions) = true\n }\n }\n\n /**\n * Check nested Fields permissions\n */\n let fieldsPermissions = true\n if (data.fields) {\n if (!checkAndSanitizeFieldsPermssions(data.fields)) {\n fieldsPermissions = false\n } else {\n ;(data.fields as unknown as SanitizedFieldsPermissions) = true\n }\n }\n\n /**\n * Check other Permissions objects (e.g. read, write)\n */\n let otherPermissions = true\n for (const key in data) {\n if (key === 'fields' || key === 'blocks') {\n continue\n }\n if (typeof data[key] === 'object') {\n if (isPermissionObject(data[key])) {\n if (data[key]['permission'] === true && !('where' in data[key])) {\n // If the permission is true and there is no where clause, set the key to true\n data[key] = true\n continue\n } else if (data[key]['permission'] === true && 'where' in data[key]) {\n // otherwise do nothing so we can keep the where clause\n otherPermissions = false\n } else {\n otherPermissions = false\n data[key] = false\n delete data[key]\n continue\n }\n } else {\n throw new Error('Unexpected object in fields permissions')\n }\n } else if (data[key] !== true) {\n // If any value is not true, return false\n otherPermissions = false\n }\n }\n\n // If all values are true or it's an empty object, return true\n return fieldsPermissions && blocksPermissions && otherPermissions\n}\n\n/**\n * Check if an object is a permission object.\n */\nfunction isPermissionObject(data: unknown): boolean {\n return (\n typeof data === 'object' && 'permission' in data! && typeof data['permission'] === 'boolean'\n )\n}\n\n/**\n * Recursively remove empty objects from an object.\n */\nfunction cleanEmptyObjects(obj: any): void {\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n // Recursive call\n cleanEmptyObjects(obj[key])\n if (Object.keys(obj[key]).length === 0) {\n // Delete the key if the object is empty\n delete obj[key]\n }\n } else if (obj[key] === null || obj[key] === undefined) {\n delete obj[key]\n }\n })\n}\n\nexport function recursivelySanitizeCollections(obj: Permissions['collections']): void {\n if (typeof obj !== 'object') {\n return\n }\n\n const collectionPermissions = Object.values(obj)\n\n for (const collectionPermission of collectionPermissions) {\n checkAndSanitizePermissions(collectionPermission)\n }\n}\n\nexport function recursivelySanitizeGlobals(obj: Permissions['globals']): void {\n if (typeof obj !== 'object') {\n return\n }\n\n const globalPermissions = Object.values(obj)\n\n for (const globalPermission of globalPermissions) {\n checkAndSanitizePermissions(globalPermission)\n }\n}\n\n/**\n * Recursively remove empty objects and false values from an object.\n */\nexport function sanitizePermissions(\n data: MarkOptional<Permissions, 'canAccessAdmin'>,\n): SanitizedPermissions {\n if (data.canAccessAdmin === false) {\n delete data.canAccessAdmin\n }\n\n if (data.collections) {\n recursivelySanitizeCollections(data.collections)\n }\n\n if (data.globals) {\n recursivelySanitizeGlobals(data.globals)\n }\n\n // Run clean up of empty objects at the end\n cleanEmptyObjects(data)\n\n return data as unknown as SanitizedPermissions\n}\n"],"names":["checkAndSanitizeFieldsPermssions","data","allFieldPermissionsTrue","key","checkAndSanitizePermissions","blocksPermissions","blocks","blockSlug","fields","isPermissionObject","Error","fieldsPermissions","otherPermissions","cleanEmptyObjects","obj","Object","keys","forEach","length","undefined","recursivelySanitizeCollections","collectionPermissions","values","collectionPermission","recursivelySanitizeGlobals","globalPermissions","globalPermission","sanitizePermissions","canAccessAdmin","collections","globals"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/sanitizePermissions.ts"],"sourcesContent":["import type { MarkOptional } from 'ts-essentials'\n\nimport type {\n CollectionPermission,\n FieldPermissions,\n FieldsPermissions,\n GlobalPermission,\n Permissions,\n SanitizedBlocksPermissions,\n SanitizedFieldPermissions,\n SanitizedFieldsPermissions,\n SanitizedPermissions,\n} from '../auth/types.js'\n\nfunction checkAndSanitizeFieldsPermssions(data: FieldsPermissions): boolean {\n let allFieldPermissionsTrue = true\n for (const key in data) {\n if (typeof data[key] === 'object') {\n if (!checkAndSanitizePermissions(data[key])) {\n allFieldPermissionsTrue = false\n } else {\n ;(data[key] as unknown as SanitizedFieldPermissions) = true\n }\n } else if (data[key] !== true) {\n allFieldPermissionsTrue = false\n }\n }\n\n // If all values are true or it's an empty object, return true\n return allFieldPermissionsTrue\n}\n\n/**\n * Check if all permissions in a FieldPermissions, CollectionPermission or GlobalPermission object are true.\n * If nested fields or blocks are present, the function will recursively check those as well.\n */\nfunction checkAndSanitizePermissions(\n _data: CollectionPermission | FieldPermissions | GlobalPermission,\n): boolean {\n const data = _data as Record<string, any>\n /**\n * Check blocks permissions\n */\n let blocksPermissions = true\n if ('blocks' in data && data.blocks) {\n for (const blockSlug in data.blocks) {\n if (typeof data.blocks[blockSlug] === 'object') {\n for (const key in data.blocks[blockSlug]) {\n /**\n * Check fields in nested blocks\n */\n if (key === 'fields') {\n if (data.blocks[blockSlug].fields) {\n if (!checkAndSanitizeFieldsPermssions(data.blocks[blockSlug].fields)) {\n blocksPermissions = false\n } else {\n ;(data.blocks[blockSlug].fields as unknown as SanitizedFieldsPermissions) = true\n }\n }\n } else {\n if (typeof data.blocks[blockSlug][key] === 'object') {\n /**\n * Check Permissions in nested blocks\n */\n if (isPermissionObject(data.blocks[blockSlug][key])) {\n if (\n data.blocks[blockSlug][key]['permission'] === true &&\n !('where' in data.blocks[blockSlug][key])\n ) {\n // If the permission is true and there is no where clause, set the key to true\n data.blocks[blockSlug][key] = true\n continue\n } else if (\n data.blocks[blockSlug][key]['permission'] === true &&\n 'where' in data.blocks[blockSlug][key]\n ) {\n // otherwise do nothing so we can keep the where clause\n blocksPermissions = false\n } else {\n blocksPermissions = false\n data.blocks[blockSlug][key] = false\n delete data.blocks[blockSlug][key]\n continue\n }\n } else {\n throw new Error('Unexpected object in block permissions')\n }\n }\n }\n }\n } else if (data.blocks[blockSlug] !== true) {\n // If any value is not true, return false\n blocksPermissions = false\n delete data.blocks[blockSlug]\n }\n }\n if (blocksPermissions) {\n ;(data.blocks as unknown as SanitizedBlocksPermissions) = true\n }\n }\n\n /**\n * Check nested Fields permissions\n */\n let fieldsPermissions = true\n if (data.fields) {\n if (!checkAndSanitizeFieldsPermssions(data.fields)) {\n fieldsPermissions = false\n } else {\n ;(data.fields as unknown as SanitizedFieldsPermissions) = true\n }\n }\n\n /**\n * Check other Permissions objects (e.g. read, write)\n */\n let otherPermissions = true\n for (const key in data) {\n if (key === 'fields' || key === 'blocks') {\n continue\n }\n if (typeof data[key] === 'object') {\n if (isPermissionObject(data[key])) {\n if (data[key]['permission'] === true && !('where' in data[key])) {\n // If the permission is true and there is no where clause, set the key to true\n data[key] = true\n continue\n } else if (data[key]['permission'] === true && 'where' in data[key]) {\n // otherwise do nothing so we can keep the where clause\n otherPermissions = false\n } else {\n otherPermissions = false\n data[key] = false\n delete data[key]\n continue\n }\n } else {\n throw new Error('Unexpected object in fields permissions')\n }\n } else if (data[key] !== true) {\n // If any value is not true, return false\n otherPermissions = false\n }\n }\n\n // If all values are true or it's an empty object, return true\n return fieldsPermissions && blocksPermissions && otherPermissions\n}\n\n/**\n * Check if an object is a permission object.\n */\nfunction isPermissionObject(data: unknown): boolean {\n return (\n typeof data === 'object' && 'permission' in data! && typeof data['permission'] === 'boolean'\n )\n}\n\n/**\n * Recursively remove empty objects from an object.\n */\nfunction cleanEmptyObjects(obj: any): void {\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n // Recursive call\n cleanEmptyObjects(obj[key])\n if (Object.keys(obj[key]).length === 0) {\n // Delete the key if the object is empty\n delete obj[key]\n }\n } else if (obj[key] === null || obj[key] === undefined) {\n delete obj[key]\n }\n })\n}\n\nexport function recursivelySanitizeCollections(obj: Permissions['collections']): void {\n if (typeof obj !== 'object') {\n return\n }\n\n const collectionPermissions = Object.values(obj)\n\n for (const collectionPermission of collectionPermissions) {\n checkAndSanitizePermissions(collectionPermission)\n }\n}\n\nexport function recursivelySanitizeGlobals(obj: Permissions['globals']): void {\n if (typeof obj !== 'object') {\n return\n }\n\n const globalPermissions = Object.values(obj)\n\n for (const globalPermission of globalPermissions) {\n checkAndSanitizePermissions(globalPermission)\n }\n}\n\n/**\n * Recursively remove empty objects and false values from an object.\n */\nexport function sanitizePermissions(\n data: MarkOptional<Permissions, 'canAccessAdmin'>,\n): SanitizedPermissions {\n if (data.canAccessAdmin === false) {\n delete data.canAccessAdmin\n }\n\n if (data.collections) {\n recursivelySanitizeCollections(data.collections)\n }\n\n if (data.globals) {\n recursivelySanitizeGlobals(data.globals)\n }\n\n // Run clean up of empty objects at the end\n cleanEmptyObjects(data)\n\n return data as unknown as SanitizedPermissions\n}\n"],"names":["checkAndSanitizeFieldsPermssions","data","allFieldPermissionsTrue","key","checkAndSanitizePermissions","_data","blocksPermissions","blocks","blockSlug","fields","isPermissionObject","Error","fieldsPermissions","otherPermissions","cleanEmptyObjects","obj","Object","keys","forEach","length","undefined","recursivelySanitizeCollections","collectionPermissions","values","collectionPermission","recursivelySanitizeGlobals","globalPermissions","globalPermission","sanitizePermissions","canAccessAdmin","collections","globals"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizePopulateParam.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePopulateParam.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,eAAO,MAAM,qBAAqB,wBAAyB,OAAO,KAAG,YAAY,GAAG,SAUnF,CAAA"}
1
+ {"version":3,"file":"sanitizePopulateParam.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePopulateParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,eAAO,MAAM,qBAAqB,wBAAyB,OAAO,KAAG,YAAY,GAAG,SAYnF,CAAA"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  import { sanitizeSelectParam } from './sanitizeSelectParam.js';
3
2
  /**
4
3
  * Sanitizes REST populate query to PopulateType
@@ -7,6 +6,7 @@ import { sanitizeSelectParam } from './sanitizeSelectParam.js';
7
6
  return;
8
7
  }
9
8
  for(const k in unsanitizedPopulate){
9
+ ;
10
10
  unsanitizedPopulate[k] = sanitizeSelectParam(unsanitizedPopulate[k]);
11
11
  }
12
12
  return unsanitizedPopulate;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizePopulateParam.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PopulateType } from '../types/index.js'\n\nimport { sanitizeSelectParam } from './sanitizeSelectParam.js'\n\n/**\n * Sanitizes REST populate query to PopulateType\n */\nexport const sanitizePopulateParam = (unsanitizedPopulate: unknown): PopulateType | undefined => {\n if (!unsanitizedPopulate || typeof unsanitizedPopulate !== 'object') {\n return\n }\n\n for (const k in unsanitizedPopulate) {\n unsanitizedPopulate[k] = sanitizeSelectParam(unsanitizedPopulate[k])\n }\n\n return unsanitizedPopulate as PopulateType\n}\n"],"names":["sanitizeSelectParam","sanitizePopulateParam","unsanitizedPopulate","k"],"mappings":"AAAA,oBAAoB;AAGpB,SAASA,mBAAmB,QAAQ,2BAA0B;AAE9D;;CAEC,GACD,OAAO,MAAMC,wBAAwB,CAACC;IACpC,IAAI,CAACA,uBAAuB,OAAOA,wBAAwB,UAAU;QACnE;IACF;IAEA,IAAK,MAAMC,KAAKD,oBAAqB;QACnCA,mBAAmB,CAACC,EAAE,GAAGH,oBAAoBE,mBAAmB,CAACC,EAAE;IACrE;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/sanitizePopulateParam.ts"],"sourcesContent":["import type { PopulateType } from '../types/index.js'\n\nimport { sanitizeSelectParam } from './sanitizeSelectParam.js'\n\n/**\n * Sanitizes REST populate query to PopulateType\n */\nexport const sanitizePopulateParam = (unsanitizedPopulate: unknown): PopulateType | undefined => {\n if (!unsanitizedPopulate || typeof unsanitizedPopulate !== 'object') {\n return\n }\n\n for (const k in unsanitizedPopulate) {\n ;(unsanitizedPopulate as Record<string, any>)[k] = sanitizeSelectParam(\n unsanitizedPopulate[k as keyof typeof unsanitizedPopulate],\n )\n }\n\n return unsanitizedPopulate as PopulateType\n}\n"],"names":["sanitizeSelectParam","sanitizePopulateParam","unsanitizedPopulate","k"],"mappings":"AAEA,SAASA,mBAAmB,QAAQ,2BAA0B;AAE9D;;CAEC,GACD,OAAO,MAAMC,wBAAwB,CAACC;IACpC,IAAI,CAACA,uBAAuB,OAAOA,wBAAwB,UAAU;QACnE;IACF;IAEA,IAAK,MAAMC,KAAKD,oBAAqB;;QACjCA,mBAA2C,CAACC,EAAE,GAAGH,oBACjDE,mBAAmB,CAACC,EAAsC;IAE9D;IAEA,OAAOD;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeSelectParam.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeSelectParam.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,mBAAmB,sBAAuB,OAAO,KAAG,UAAU,GAAG,SAc7E,CAAA"}
1
+ {"version":3,"file":"sanitizeSelectParam.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeSelectParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,mBAAmB,sBAAuB,OAAO,KAAG,UAAU,GAAG,SAe7E,CAAA"}
@@ -1,12 +1,14 @@
1
- // @ts-strict-ignore
2
1
  /**
3
2
  * Sanitizes REST select query to SelectType
4
3
  */ export const sanitizeSelectParam = (unsanitizedSelect)=>{
5
4
  if (unsanitizedSelect && typeof unsanitizedSelect === 'object') {
6
- for(const k in unsanitizedSelect){
5
+ for(const _k in unsanitizedSelect){
6
+ const k = _k;
7
7
  if (unsanitizedSelect[k] === 'true') {
8
+ ;
8
9
  unsanitizedSelect[k] = true;
9
10
  } else if (unsanitizedSelect[k] === 'false') {
11
+ ;
10
12
  unsanitizedSelect[k] = false;
11
13
  } else if (typeof unsanitizedSelect[k] === 'object') {
12
14
  sanitizeSelectParam(unsanitizedSelect[k]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizeSelectParam.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { SelectType } from '../types/index.js'\n\n/**\n * Sanitizes REST select query to SelectType\n */\nexport const sanitizeSelectParam = (unsanitizedSelect: unknown): SelectType | undefined => {\n if (unsanitizedSelect && typeof unsanitizedSelect === 'object') {\n for (const k in unsanitizedSelect) {\n if (unsanitizedSelect[k] === 'true') {\n unsanitizedSelect[k] = true\n } else if (unsanitizedSelect[k] === 'false') {\n unsanitizedSelect[k] = false\n } else if (typeof unsanitizedSelect[k] === 'object') {\n sanitizeSelectParam(unsanitizedSelect[k])\n }\n }\n }\n\n return unsanitizedSelect as SelectType\n}\n"],"names":["sanitizeSelectParam","unsanitizedSelect","k"],"mappings":"AAAA,oBAAoB;AAGpB;;CAEC,GACD,OAAO,MAAMA,sBAAsB,CAACC;IAClC,IAAIA,qBAAqB,OAAOA,sBAAsB,UAAU;QAC9D,IAAK,MAAMC,KAAKD,kBAAmB;YACjC,IAAIA,iBAAiB,CAACC,EAAE,KAAK,QAAQ;gBACnCD,iBAAiB,CAACC,EAAE,GAAG;YACzB,OAAO,IAAID,iBAAiB,CAACC,EAAE,KAAK,SAAS;gBAC3CD,iBAAiB,CAACC,EAAE,GAAG;YACzB,OAAO,IAAI,OAAOD,iBAAiB,CAACC,EAAE,KAAK,UAAU;gBACnDF,oBAAoBC,iBAAiB,CAACC,EAAE;YAC1C;QACF;IACF;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/sanitizeSelectParam.ts"],"sourcesContent":["import type { SelectType } from '../types/index.js'\n\n/**\n * Sanitizes REST select query to SelectType\n */\nexport const sanitizeSelectParam = (unsanitizedSelect: unknown): SelectType | undefined => {\n if (unsanitizedSelect && typeof unsanitizedSelect === 'object') {\n for (const _k in unsanitizedSelect) {\n const k = _k as keyof typeof unsanitizedSelect\n if (unsanitizedSelect[k] === 'true') {\n ;(unsanitizedSelect as Record<string, any>)[k] = true\n } else if (unsanitizedSelect[k] === 'false') {\n ;(unsanitizedSelect as Record<string, any>)[k] = false\n } else if (typeof unsanitizedSelect[k] === 'object') {\n sanitizeSelectParam(unsanitizedSelect[k])\n }\n }\n }\n\n return unsanitizedSelect as SelectType\n}\n"],"names":["sanitizeSelectParam","unsanitizedSelect","_k","k"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA,sBAAsB,CAACC;IAClC,IAAIA,qBAAqB,OAAOA,sBAAsB,UAAU;QAC9D,IAAK,MAAMC,MAAMD,kBAAmB;YAClC,MAAME,IAAID;YACV,IAAID,iBAAiB,CAACE,EAAE,KAAK,QAAQ;;gBACjCF,iBAAyC,CAACE,EAAE,GAAG;YACnD,OAAO,IAAIF,iBAAiB,CAACE,EAAE,KAAK,SAAS;;gBACzCF,iBAAyC,CAACE,EAAE,GAAG;YACnD,OAAO,IAAI,OAAOF,iBAAiB,CAACE,EAAE,KAAK,UAAU;gBACnDH,oBAAoBC,iBAAiB,CAACE,EAAE;YAC1C;QACF;IACF;IAEA,OAAOF;AACT,EAAC"}
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
13
13
  */
14
- export declare function envPaths(name: any, { suffix }?: {
14
+ export declare function envPaths(name: string, { suffix }?: {
15
15
  suffix?: string | undefined;
16
16
  }): {
17
17
  cache: string;
@@ -1 +1 @@
1
- {"version":3,"file":"envPaths.d.ts","sourceRoot":"","sources":["../../../../src/utilities/telemetry/conf/envPaths.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAkDH,wBAAgB,QAAQ,CAAC,IAAI,KAAA,EAAE,EAAE,MAAiB,EAAE;;CAAK;;;;;;EAmBxD"}
1
+ {"version":3,"file":"envPaths.d.ts","sourceRoot":"","sources":["../../../../src/utilities/telemetry/conf/envPaths.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAkDH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAiB,EAAE;;CAAK;;;;;;EAmBhE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utilities/telemetry/conf/envPaths.ts"],"sourcesContent":["// @ts-strict-ignore\n/**\n * Taken from https://github.com/sindresorhus/env-paths/blob/main/index.js\n *\n * MIT License\n *\n * Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport os from 'node:os'\nimport path from 'node:path'\nimport process from 'node:process'\n\nconst homedir = os.homedir()\nconst tmpdir = os.tmpdir()\nconst { env } = process\n\nconst macos = (name) => {\n const library = path.join(homedir, 'Library')\n\n return {\n cache: path.join(library, 'Caches', name),\n config: path.join(library, 'Preferences', name),\n data: path.join(library, 'Application Support', name),\n log: path.join(library, 'Logs', name),\n temp: path.join(tmpdir, name),\n }\n}\n\nconst windows = (name) => {\n const appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming')\n const localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local')\n\n return {\n // Data/config/cache/log are invented by me as Windows isn't opinionated about this\n cache: path.join(localAppData, name, 'Cache'),\n config: path.join(appData, name, 'Config'),\n data: path.join(localAppData, name, 'Data'),\n log: path.join(localAppData, name, 'Log'),\n temp: path.join(tmpdir, name),\n }\n}\n\n// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\nconst linux = (name) => {\n const username = path.basename(homedir)\n\n return {\n cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name),\n config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name),\n data: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name),\n // https://wiki.debian.org/XDGBaseDirectorySpecification#state\n log: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name),\n temp: path.join(tmpdir, username, name),\n }\n}\n\nexport function envPaths(name, { suffix = 'nodejs' } = {}) {\n if (typeof name !== 'string') {\n throw new TypeError(`Expected a string, got ${typeof name}`)\n }\n\n if (suffix) {\n // Add suffix to prevent possible conflict with native apps\n name += `-${suffix}`\n }\n\n if (process.platform === 'darwin') {\n return macos(name)\n }\n\n if (process.platform === 'win32') {\n return windows(name)\n }\n\n return linux(name)\n}\n"],"names":["os","path","process","homedir","tmpdir","env","macos","name","library","join","cache","config","data","log","temp","windows","appData","APPDATA","localAppData","LOCALAPPDATA","linux","username","basename","XDG_CACHE_HOME","XDG_CONFIG_HOME","XDG_DATA_HOME","XDG_STATE_HOME","envPaths","suffix","TypeError","platform"],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;;;;;;CAYC,GAED,OAAOA,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAC5B,OAAOC,aAAa,eAAc;AAElC,MAAMC,UAAUH,GAAGG,OAAO;AAC1B,MAAMC,SAASJ,GAAGI,MAAM;AACxB,MAAM,EAAEC,GAAG,EAAE,GAAGH;AAEhB,MAAMI,QAAQ,CAACC;IACb,MAAMC,UAAUP,KAAKQ,IAAI,CAACN,SAAS;IAEnC,OAAO;QACLO,OAAOT,KAAKQ,IAAI,CAACD,SAAS,UAAUD;QACpCI,QAAQV,KAAKQ,IAAI,CAACD,SAAS,eAAeD;QAC1CK,MAAMX,KAAKQ,IAAI,CAACD,SAAS,uBAAuBD;QAChDM,KAAKZ,KAAKQ,IAAI,CAACD,SAAS,QAAQD;QAChCO,MAAMb,KAAKQ,IAAI,CAACL,QAAQG;IAC1B;AACF;AAEA,MAAMQ,UAAU,CAACR;IACf,MAAMS,UAAUX,IAAIY,OAAO,IAAIhB,KAAKQ,IAAI,CAACN,SAAS,WAAW;IAC7D,MAAMe,eAAeb,IAAIc,YAAY,IAAIlB,KAAKQ,IAAI,CAACN,SAAS,WAAW;IAEvE,OAAO;QACL,mFAAmF;QACnFO,OAAOT,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACrCI,QAAQV,KAAKQ,IAAI,CAACO,SAAST,MAAM;QACjCK,MAAMX,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACpCM,KAAKZ,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACnCO,MAAMb,KAAKQ,IAAI,CAACL,QAAQG;IAC1B;AACF;AAEA,+EAA+E;AAC/E,MAAMa,QAAQ,CAACb;IACb,MAAMc,WAAWpB,KAAKqB,QAAQ,CAACnB;IAE/B,OAAO;QACLO,OAAOT,KAAKQ,IAAI,CAACJ,IAAIkB,cAAc,IAAItB,KAAKQ,IAAI,CAACN,SAAS,WAAWI;QACrEI,QAAQV,KAAKQ,IAAI,CAACJ,IAAImB,eAAe,IAAIvB,KAAKQ,IAAI,CAACN,SAAS,YAAYI;QACxEK,MAAMX,KAAKQ,IAAI,CAACJ,IAAIoB,aAAa,IAAIxB,KAAKQ,IAAI,CAACN,SAAS,UAAU,UAAUI;QAC5E,8DAA8D;QAC9DM,KAAKZ,KAAKQ,IAAI,CAACJ,IAAIqB,cAAc,IAAIzB,KAAKQ,IAAI,CAACN,SAAS,UAAU,UAAUI;QAC5EO,MAAMb,KAAKQ,IAAI,CAACL,QAAQiB,UAAUd;IACpC;AACF;AAEA,OAAO,SAASoB,SAASpB,IAAI,EAAE,EAAEqB,SAAS,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,OAAOrB,SAAS,UAAU;QAC5B,MAAM,IAAIsB,UAAU,CAAC,uBAAuB,EAAE,OAAOtB,MAAM;IAC7D;IAEA,IAAIqB,QAAQ;QACV,2DAA2D;QAC3DrB,QAAQ,CAAC,CAAC,EAAEqB,QAAQ;IACtB;IAEA,IAAI1B,QAAQ4B,QAAQ,KAAK,UAAU;QACjC,OAAOxB,MAAMC;IACf;IAEA,IAAIL,QAAQ4B,QAAQ,KAAK,SAAS;QAChC,OAAOf,QAAQR;IACjB;IAEA,OAAOa,MAAMb;AACf"}
1
+ {"version":3,"sources":["../../../../src/utilities/telemetry/conf/envPaths.ts"],"sourcesContent":["// @ts-strict-ignore\n/**\n * Taken from https://github.com/sindresorhus/env-paths/blob/main/index.js\n *\n * MIT License\n *\n * Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport os from 'node:os'\nimport path from 'node:path'\nimport process from 'node:process'\n\nconst homedir = os.homedir()\nconst tmpdir = os.tmpdir()\nconst { env } = process\n\nconst macos = (name: string) => {\n const library = path.join(homedir, 'Library')\n\n return {\n cache: path.join(library, 'Caches', name),\n config: path.join(library, 'Preferences', name),\n data: path.join(library, 'Application Support', name),\n log: path.join(library, 'Logs', name),\n temp: path.join(tmpdir, name),\n }\n}\n\nconst windows = (name: string) => {\n const appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming')\n const localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local')\n\n return {\n // Data/config/cache/log are invented by me as Windows isn't opinionated about this\n cache: path.join(localAppData, name, 'Cache'),\n config: path.join(appData, name, 'Config'),\n data: path.join(localAppData, name, 'Data'),\n log: path.join(localAppData, name, 'Log'),\n temp: path.join(tmpdir, name),\n }\n}\n\n// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\nconst linux = (name: string) => {\n const username = path.basename(homedir)\n\n return {\n cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name),\n config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name),\n data: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name),\n // https://wiki.debian.org/XDGBaseDirectorySpecification#state\n log: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name),\n temp: path.join(tmpdir, username, name),\n }\n}\n\nexport function envPaths(name: string, { suffix = 'nodejs' } = {}) {\n if (typeof name !== 'string') {\n throw new TypeError(`Expected a string, got ${typeof name}`)\n }\n\n if (suffix) {\n // Add suffix to prevent possible conflict with native apps\n name += `-${suffix}`\n }\n\n if (process.platform === 'darwin') {\n return macos(name)\n }\n\n if (process.platform === 'win32') {\n return windows(name)\n }\n\n return linux(name)\n}\n"],"names":["os","path","process","homedir","tmpdir","env","macos","name","library","join","cache","config","data","log","temp","windows","appData","APPDATA","localAppData","LOCALAPPDATA","linux","username","basename","XDG_CACHE_HOME","XDG_CONFIG_HOME","XDG_DATA_HOME","XDG_STATE_HOME","envPaths","suffix","TypeError","platform"],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;;;;;;CAYC,GAED,OAAOA,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAC5B,OAAOC,aAAa,eAAc;AAElC,MAAMC,UAAUH,GAAGG,OAAO;AAC1B,MAAMC,SAASJ,GAAGI,MAAM;AACxB,MAAM,EAAEC,GAAG,EAAE,GAAGH;AAEhB,MAAMI,QAAQ,CAACC;IACb,MAAMC,UAAUP,KAAKQ,IAAI,CAACN,SAAS;IAEnC,OAAO;QACLO,OAAOT,KAAKQ,IAAI,CAACD,SAAS,UAAUD;QACpCI,QAAQV,KAAKQ,IAAI,CAACD,SAAS,eAAeD;QAC1CK,MAAMX,KAAKQ,IAAI,CAACD,SAAS,uBAAuBD;QAChDM,KAAKZ,KAAKQ,IAAI,CAACD,SAAS,QAAQD;QAChCO,MAAMb,KAAKQ,IAAI,CAACL,QAAQG;IAC1B;AACF;AAEA,MAAMQ,UAAU,CAACR;IACf,MAAMS,UAAUX,IAAIY,OAAO,IAAIhB,KAAKQ,IAAI,CAACN,SAAS,WAAW;IAC7D,MAAMe,eAAeb,IAAIc,YAAY,IAAIlB,KAAKQ,IAAI,CAACN,SAAS,WAAW;IAEvE,OAAO;QACL,mFAAmF;QACnFO,OAAOT,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACrCI,QAAQV,KAAKQ,IAAI,CAACO,SAAST,MAAM;QACjCK,MAAMX,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACpCM,KAAKZ,KAAKQ,IAAI,CAACS,cAAcX,MAAM;QACnCO,MAAMb,KAAKQ,IAAI,CAACL,QAAQG;IAC1B;AACF;AAEA,+EAA+E;AAC/E,MAAMa,QAAQ,CAACb;IACb,MAAMc,WAAWpB,KAAKqB,QAAQ,CAACnB;IAE/B,OAAO;QACLO,OAAOT,KAAKQ,IAAI,CAACJ,IAAIkB,cAAc,IAAItB,KAAKQ,IAAI,CAACN,SAAS,WAAWI;QACrEI,QAAQV,KAAKQ,IAAI,CAACJ,IAAImB,eAAe,IAAIvB,KAAKQ,IAAI,CAACN,SAAS,YAAYI;QACxEK,MAAMX,KAAKQ,IAAI,CAACJ,IAAIoB,aAAa,IAAIxB,KAAKQ,IAAI,CAACN,SAAS,UAAU,UAAUI;QAC5E,8DAA8D;QAC9DM,KAAKZ,KAAKQ,IAAI,CAACJ,IAAIqB,cAAc,IAAIzB,KAAKQ,IAAI,CAACN,SAAS,UAAU,UAAUI;QAC5EO,MAAMb,KAAKQ,IAAI,CAACL,QAAQiB,UAAUd;IACpC;AACF;AAEA,OAAO,SAASoB,SAASpB,IAAY,EAAE,EAAEqB,SAAS,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,IAAI,OAAOrB,SAAS,UAAU;QAC5B,MAAM,IAAIsB,UAAU,CAAC,uBAAuB,EAAE,OAAOtB,MAAM;IAC7D;IAEA,IAAIqB,QAAQ;QACV,2DAA2D;QAC3DrB,QAAQ,CAAC,CAAC,EAAEqB,QAAQ;IACtB;IAEA,IAAI1B,QAAQ4B,QAAQ,KAAK,UAAU;QACjC,OAAOxB,MAAMC;IACf;IAEA,IAAIL,QAAQ4B,QAAQ,KAAK,SAAS;QAChC,OAAOf,QAAQR;IACjB;IAEA,OAAOa,MAAMb;AACf"}
@@ -1,2 +1,2 @@
1
- export declare const timestamp: (label: any) => void;
1
+ export declare const timestamp: (label: string) => void;
2
2
  //# sourceMappingURL=timestamp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/utilities/timestamp.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,sBAMrB,CAAA"}
1
+ {"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/utilities/timestamp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,UAAW,MAAM,SAMtC,CAAA"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  export const timestamp = (label)=>{
3
2
  if (!process.env.PAYLOAD_TIME) {
4
3
  process.env.PAYLOAD_TIME = String(new Date().getTime());
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/timestamp.ts"],"sourcesContent":["// @ts-strict-ignore\nexport const timestamp = (label) => {\n if (!process.env.PAYLOAD_TIME) {\n process.env.PAYLOAD_TIME = String(new Date().getTime())\n }\n const now = new Date()\n console.log(`[${now.getTime() - Number(process.env.PAYLOAD_TIME)}ms] ${label}`)\n}\n"],"names":["timestamp","label","process","env","PAYLOAD_TIME","String","Date","getTime","now","console","log","Number"],"mappings":"AAAA,oBAAoB;AACpB,OAAO,MAAMA,YAAY,CAACC;IACxB,IAAI,CAACC,QAAQC,GAAG,CAACC,YAAY,EAAE;QAC7BF,QAAQC,GAAG,CAACC,YAAY,GAAGC,OAAO,IAAIC,OAAOC,OAAO;IACtD;IACA,MAAMC,MAAM,IAAIF;IAChBG,QAAQC,GAAG,CAAC,CAAC,CAAC,EAAEF,IAAID,OAAO,KAAKI,OAAOT,QAAQC,GAAG,CAACC,YAAY,EAAE,IAAI,EAAEH,OAAO;AAChF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/timestamp.ts"],"sourcesContent":["export const timestamp = (label: string) => {\n if (!process.env.PAYLOAD_TIME) {\n process.env.PAYLOAD_TIME = String(new Date().getTime())\n }\n const now = new Date()\n console.log(`[${now.getTime() - Number(process.env.PAYLOAD_TIME)}ms] ${label}`)\n}\n"],"names":["timestamp","label","process","env","PAYLOAD_TIME","String","Date","getTime","now","console","log","Number"],"mappings":"AAAA,OAAO,MAAMA,YAAY,CAACC;IACxB,IAAI,CAACC,QAAQC,GAAG,CAACC,YAAY,EAAE;QAC7BF,QAAQC,GAAG,CAACC,YAAY,GAAGC,OAAO,IAAIC,OAAOC,OAAO;IACtD;IACA,MAAMC,MAAM,IAAIF;IAChBG,QAAQC,GAAG,CAAC,CAAC,CAAC,EAAEF,IAAID,OAAO,KAAKI,OAAOT,QAAQC,GAAG,CAACC,YAAY,EAAE,IAAI,EAAEH,OAAO;AAChF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAkC,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAgGlG,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,KAAK,OAAO,GAAG,IAAI,CAAA;AAEpB,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,sBAAsB,CAAA;IAChC,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAA;IACjC,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,wIAWxB,kBAAkB,KAAG,IA0RvB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/utilities/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAkC,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAgGlG,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,KAAK,OAAO,GAAG,IAAI,CAAA;AAEpB,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,sBAAsB,CAAA;IAChC,aAAa,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAA;IACjC,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,wIAWxB,kBAAkB,KAAG,IA4RvB,CAAA"}
@@ -1,4 +1,3 @@
1
- // @ts-strict-ignore
2
1
  import { fieldAffectsData, fieldHasSubFields, fieldShouldBeLocalized } from '../fields/config/types.js';
3
2
  const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, field, fillEmpty, leavesFirst, parentIsLocalized, parentRef })=>{
4
3
  if (fillEmpty) {
@@ -113,10 +112,12 @@ const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, fie
113
112
  if (!ref[tab.name] || typeof ref[tab.name] !== 'object') {
114
113
  if (fillEmpty) {
115
114
  if (tab.localized) {
115
+ ;
116
116
  ref[tab.name] = {
117
117
  en: {}
118
118
  };
119
119
  } else {
120
+ ;
120
121
  ref[tab.name] = {};
121
122
  }
122
123
  } else {
@@ -220,10 +221,12 @@ const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, fie
220
221
  field,
221
222
  parentIsLocalized: parentIsLocalized
222
223
  })) {
224
+ ;
223
225
  ref[field.name] = {
224
226
  en: {}
225
227
  };
226
228
  } else {
229
+ ;
227
230
  ref[field.name] = {};
228
231
  }
229
232
  } else if (field.type === 'array' || field.type === 'blocks') {
@@ -231,10 +234,12 @@ const traverseArrayOrBlocksField = ({ callback, callbackStack, config, data, fie
231
234
  field,
232
235
  parentIsLocalized: parentIsLocalized
233
236
  })) {
237
+ ;
234
238
  ref[field.name] = {
235
239
  en: []
236
240
  };
237
241
  } else {
242
+ ;
238
243
  ref[field.name] = [];
239
244
  }
240
245
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/traverseFields.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { Config, SanitizedConfig } from '../config/types.js'\nimport type { ArrayField, Block, BlocksField, Field, TabAsField } from '../fields/config/types.js'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n} from '../fields/config/types.js'\n\nconst traverseArrayOrBlocksField = ({\n callback,\n callbackStack,\n config,\n data,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized,\n parentRef,\n}: {\n callback: TraverseFieldsCallback\n callbackStack: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n data: Record<string, unknown>[]\n field: ArrayField | BlocksField\n fillEmpty: boolean\n leavesFirst: boolean\n parentIsLocalized: boolean\n parentRef?: unknown\n}) => {\n if (fillEmpty) {\n if (field.type === 'array') {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n })\n }\n if (field.type === 'blocks') {\n for (const _block of field.blockReferences ?? field.blocks) {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config?.blocks?.find((b) => b.slug === _block) : _block\n if (block) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: block.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n })\n }\n }\n }\n return\n }\n for (const ref of data) {\n let fields!: Field[]\n if (field.type === 'blocks' && typeof ref?.blockType === 'string') {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block = field.blockReferences\n ? ((config?.blocks?.find((b) => b.slug === ref.blockType) ??\n field.blockReferences.find(\n (b) => typeof b !== 'string' && b.slug === ref.blockType,\n )) as Block)\n : field.blocks.find((b) => b.slug === ref.blockType)\n\n fields = block?.fields as Field[]\n } else if (field.type === 'array') {\n fields = field.fields\n }\n\n if (fields) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n ref,\n })\n }\n }\n}\n\nexport type TraverseFieldsCallback = (args: {\n /**\n * The current field\n */\n field: Field | TabAsField\n /**\n * Function that when called will skip the current field and continue to the next\n */\n next?: () => void\n parentIsLocalized: boolean\n /**\n * The parent reference object\n */\n parentRef?: Record<string, unknown> | unknown\n /**\n * The current reference object\n */\n ref?: Record<string, unknown> | unknown\n}) => boolean | void\n\ntype TraverseFieldsArgs = {\n callback: TraverseFieldsCallback\n callbackStack?: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n fields: (Field | TabAsField)[]\n fillEmpty?: boolean\n isTopLevel?: boolean\n /**\n * @default false\n *\n * if this is `true`, the callback functions of the leaf fields will be called before the parent fields.\n * The return value of the callback function will be ignored.\n */\n leavesFirst?: boolean\n parentIsLocalized?: boolean\n parentRef?: Record<string, unknown> | unknown\n ref?: Record<string, unknown> | unknown\n}\n\n/**\n * Iterate a recurse an array of fields, calling a callback for each field\n *\n * @param fields\n * @param callback callback called for each field, discontinue looping if callback returns truthy\n * @param fillEmpty fill empty properties to use this without data\n * @param ref the data or any artifacts assigned in the callback during field recursion\n * @param parentRef the data or any artifacts assigned in the callback during field recursion one level up\n */\nexport const traverseFields = ({\n callback,\n callbackStack: _callbackStack = [],\n config,\n fields,\n fillEmpty = true,\n isTopLevel = true,\n leavesFirst = false,\n parentIsLocalized,\n parentRef = {},\n ref = {},\n}: TraverseFieldsArgs): void => {\n fields.some((field) => {\n let callbackStack: (() => ReturnType<TraverseFieldsCallback>)[] = []\n if (!isTopLevel) {\n callbackStack = _callbackStack\n }\n let skip = false\n const next = () => {\n skip = true\n }\n\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (\n !leavesFirst &&\n callback &&\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentRef, ref })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentRef, ref }),\n )\n }\n\n if (skip) {\n return false\n }\n\n // avoid mutation of ref for all fields\n let currentRef = ref\n let currentParentRef = parentRef\n\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n let tabRef = ref\n\n if (skip) {\n return false\n }\n\n if ('name' in tab && tab.name) {\n if (!ref[tab.name] || typeof ref[tab.name] !== 'object') {\n if (fillEmpty) {\n if (tab.localized) {\n ref[tab.name] = { en: {} }\n } else {\n ref[tab.name] = {}\n }\n } else {\n continue\n }\n }\n\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n\n tabRef = tabRef[tab.name]\n\n if (tab.localized) {\n for (const key in tabRef as Record<string, unknown>) {\n if (tabRef[key] && typeof tabRef[key] === 'object') {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n ref: tabRef[key],\n })\n }\n }\n }\n } else {\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n }\n\n if (!tab.localized) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: false,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n }\n\n if (skip) {\n return false\n }\n }\n\n return\n }\n\n if (field.type === 'tab' || fieldHasSubFields(field) || field.type === 'blocks') {\n if ('name' in field && field.name) {\n currentParentRef = currentRef\n if (!ref[field.name]) {\n if (fillEmpty) {\n if (field.type === 'group' || field.type === 'tab') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ref[field.name] = {\n en: {},\n }\n } else {\n ref[field.name] = {}\n }\n } else if (field.type === 'array' || field.type === 'blocks') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ref[field.name] = {\n en: [],\n }\n } else {\n ref[field.name] = []\n }\n }\n } else {\n return\n }\n }\n currentRef = ref[field.name]\n }\n\n if (\n (field.type === 'tab' || field.type === 'group') &&\n fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! }) &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldAffectsData(field)) {\n for (const key in currentRef as Record<string, unknown>) {\n if (currentRef[key]) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n ref: currentRef[key],\n })\n }\n }\n } else {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n\n return\n }\n\n if (\n (field.type === 'blocks' || field.type === 'array') &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n if (Array.isArray(currentRef)) {\n return\n }\n\n for (const key in currentRef as Record<string, unknown>) {\n const localeData = currentRef[key]\n if (!Array.isArray(localeData)) {\n continue\n }\n\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: localeData,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n })\n }\n } else if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef as Record<string, unknown>[],\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n })\n }\n } else if (currentRef && typeof currentRef === 'object' && 'fields' in field) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n }\n\n if (isTopLevel) {\n callbackStack.reverse().forEach((cb) => {\n cb()\n })\n }\n })\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","traverseArrayOrBlocksField","callback","callbackStack","config","data","field","fillEmpty","leavesFirst","parentIsLocalized","parentRef","type","traverseFields","fields","isTopLevel","localized","_block","blockReferences","blocks","block","find","b","slug","ref","blockType","_callbackStack","some","skip","next","push","currentRef","currentParentRef","tab","tabs","tabRef","name","en","key","Array","isArray","localeData","reverse","forEach","cb"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/traverseFields.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../config/types.js'\nimport type { ArrayField, Block, BlocksField, Field, TabAsField } from '../fields/config/types.js'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n} from '../fields/config/types.js'\n\nconst traverseArrayOrBlocksField = ({\n callback,\n callbackStack,\n config,\n data,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized,\n parentRef,\n}: {\n callback: TraverseFieldsCallback\n callbackStack: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n data: Record<string, unknown>[]\n field: ArrayField | BlocksField\n fillEmpty: boolean\n leavesFirst: boolean\n parentIsLocalized: boolean\n parentRef?: unknown\n}) => {\n if (fillEmpty) {\n if (field.type === 'array') {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n })\n }\n if (field.type === 'blocks') {\n for (const _block of field.blockReferences ?? field.blocks) {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config?.blocks?.find((b) => b.slug === _block) : _block\n if (block) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: block.fields,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n })\n }\n }\n }\n return\n }\n for (const ref of data) {\n let fields!: Field[]\n if (field.type === 'blocks' && typeof ref?.blockType === 'string') {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block = field.blockReferences\n ? ((config?.blocks?.find((b) => b.slug === ref.blockType) ??\n field.blockReferences.find(\n (b) => typeof b !== 'string' && b.slug === ref.blockType,\n )) as Block)\n : field.blocks.find((b) => b.slug === ref.blockType)\n\n fields = block?.fields as Field[]\n } else if (field.type === 'array') {\n fields = field.fields\n }\n\n if (fields) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentRef,\n ref,\n })\n }\n }\n}\n\nexport type TraverseFieldsCallback = (args: {\n /**\n * The current field\n */\n field: Field | TabAsField\n /**\n * Function that when called will skip the current field and continue to the next\n */\n next?: () => void\n parentIsLocalized: boolean\n /**\n * The parent reference object\n */\n parentRef?: Record<string, unknown> | unknown\n /**\n * The current reference object\n */\n ref?: Record<string, unknown> | unknown\n}) => boolean | void\n\ntype TraverseFieldsArgs = {\n callback: TraverseFieldsCallback\n callbackStack?: (() => ReturnType<TraverseFieldsCallback>)[]\n config?: Config | SanitizedConfig\n fields: (Field | TabAsField)[]\n fillEmpty?: boolean\n isTopLevel?: boolean\n /**\n * @default false\n *\n * if this is `true`, the callback functions of the leaf fields will be called before the parent fields.\n * The return value of the callback function will be ignored.\n */\n leavesFirst?: boolean\n parentIsLocalized?: boolean\n parentRef?: Record<string, unknown> | unknown\n ref?: Record<string, unknown> | unknown\n}\n\n/**\n * Iterate a recurse an array of fields, calling a callback for each field\n *\n * @param fields\n * @param callback callback called for each field, discontinue looping if callback returns truthy\n * @param fillEmpty fill empty properties to use this without data\n * @param ref the data or any artifacts assigned in the callback during field recursion\n * @param parentRef the data or any artifacts assigned in the callback during field recursion one level up\n */\nexport const traverseFields = ({\n callback,\n callbackStack: _callbackStack = [],\n config,\n fields,\n fillEmpty = true,\n isTopLevel = true,\n leavesFirst = false,\n parentIsLocalized,\n parentRef = {},\n ref = {},\n}: TraverseFieldsArgs): void => {\n fields.some((field) => {\n let callbackStack: (() => ReturnType<TraverseFieldsCallback>)[] = []\n if (!isTopLevel) {\n callbackStack = _callbackStack\n }\n let skip = false\n const next = () => {\n skip = true\n }\n\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (\n !leavesFirst &&\n callback &&\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentRef, ref })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({ field, next, parentIsLocalized: parentIsLocalized!, parentRef, ref }),\n )\n }\n\n if (skip) {\n return false\n }\n\n // avoid mutation of ref for all fields\n let currentRef = ref\n let currentParentRef = parentRef\n\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n let tabRef = ref\n\n if (skip) {\n return false\n }\n\n if ('name' in tab && tab.name) {\n if (\n !ref[tab.name as keyof typeof ref] ||\n typeof ref[tab.name as keyof typeof ref] !== 'object'\n ) {\n if (fillEmpty) {\n if (tab.localized) {\n ;(ref as Record<string, any>)[tab.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[tab.name] = {}\n }\n } else {\n continue\n }\n }\n\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n\n tabRef = tabRef[tab.name as keyof typeof tabRef]\n\n if (tab.localized) {\n for (const key in tabRef as Record<string, unknown>) {\n if (\n tabRef[key as keyof typeof tabRef] &&\n typeof tabRef[key as keyof typeof tabRef] === 'object'\n ) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n ref: tabRef[key as keyof typeof tabRef],\n })\n }\n }\n }\n } else {\n if (\n callback &&\n !leavesFirst &&\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n ) {\n return true\n } else if (leavesFirst) {\n callbackStack.push(() =>\n callback({\n field: { ...tab, type: 'tab' },\n next,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n ref: tabRef,\n }),\n )\n }\n }\n\n if (!tab.localized) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: tab.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: false,\n parentRef: currentParentRef,\n ref: tabRef,\n })\n }\n\n if (skip) {\n return false\n }\n }\n\n return\n }\n\n if (field.type === 'tab' || fieldHasSubFields(field) || field.type === 'blocks') {\n if ('name' in field && field.name) {\n currentParentRef = currentRef\n if (!ref[field.name as keyof typeof ref]) {\n if (fillEmpty) {\n if (field.type === 'group' || field.type === 'tab') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: {} }\n } else {\n ;(ref as Record<string, any>)[field.name] = {}\n }\n } else if (field.type === 'array' || field.type === 'blocks') {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n ;(ref as Record<string, any>)[field.name] = { en: [] }\n } else {\n ;(ref as Record<string, any>)[field.name] = []\n }\n }\n } else {\n return\n }\n }\n currentRef = ref[field.name as keyof typeof ref]\n }\n\n if (\n (field.type === 'tab' || field.type === 'group') &&\n fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! }) &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldAffectsData(field)) {\n for (const key in currentRef as Record<string, unknown>) {\n if (currentRef[key as keyof typeof currentRef]) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n ref: currentRef[key as keyof typeof currentRef],\n })\n }\n }\n } else {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n\n return\n }\n\n if (\n (field.type === 'blocks' || field.type === 'array') &&\n currentRef &&\n typeof currentRef === 'object'\n ) {\n if (fieldShouldBeLocalized({ field, parentIsLocalized: parentIsLocalized! })) {\n if (Array.isArray(currentRef)) {\n return\n }\n\n for (const key in currentRef as Record<string, unknown>) {\n const localeData = currentRef[key as keyof typeof currentRef]\n if (!Array.isArray(localeData)) {\n continue\n }\n\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: localeData,\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: true,\n parentRef: currentParentRef,\n })\n }\n } else if (Array.isArray(currentRef)) {\n traverseArrayOrBlocksField({\n callback,\n callbackStack,\n config,\n data: currentRef as Record<string, unknown>[],\n field,\n fillEmpty,\n leavesFirst,\n parentIsLocalized: parentIsLocalized!,\n parentRef: currentParentRef,\n })\n }\n } else if (currentRef && typeof currentRef === 'object' && 'fields' in field) {\n traverseFields({\n callback,\n callbackStack,\n config,\n fields: field.fields,\n fillEmpty,\n isTopLevel: false,\n leavesFirst,\n parentIsLocalized,\n parentRef: currentParentRef,\n ref: currentRef,\n })\n }\n }\n\n if (isTopLevel) {\n callbackStack.reverse().forEach((cb) => {\n cb()\n })\n }\n })\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","traverseArrayOrBlocksField","callback","callbackStack","config","data","field","fillEmpty","leavesFirst","parentIsLocalized","parentRef","type","traverseFields","fields","isTopLevel","localized","_block","blockReferences","blocks","block","find","b","slug","ref","blockType","_callbackStack","some","skip","next","push","currentRef","currentParentRef","tab","tabs","tabRef","name","en","key","Array","isArray","localeData","reverse","forEach","cb"],"mappings":"AAGA,SACEA,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,QACjB,4BAA2B;AAElC,MAAMC,6BAA6B,CAAC,EAClCC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,WAAW,EACXC,iBAAiB,EACjBC,SAAS,EAWV;IACC,IAAIH,WAAW;QACb,IAAID,MAAMK,IAAI,KAAK,SAAS;YAC1BC,eAAe;gBACbV;gBACAC;gBACAC;gBACAS,QAAQP,MAAMO,MAAM;gBACpBC,YAAY;gBACZN;gBACAC,mBAAmBA,qBAAqBH,MAAMS,SAAS;gBACvDL;YACF;QACF;QACA,IAAIJ,MAAMK,IAAI,KAAK,UAAU;YAC3B,KAAK,MAAMK,UAAUV,MAAMW,eAAe,IAAIX,MAAMY,MAAM,CAAE;gBAC1D,uFAAuF;gBACvF,MAAMC,QACJ,OAAOH,WAAW,WAAWZ,QAAQc,QAAQE,KAAK,CAACC,IAAMA,EAAEC,IAAI,KAAKN,UAAUA;gBAChF,IAAIG,OAAO;oBACTP,eAAe;wBACbV;wBACAC;wBACAC;wBACAS,QAAQM,MAAMN,MAAM;wBACpBC,YAAY;wBACZN;wBACAC,mBAAmBA,qBAAqBH,MAAMS,SAAS;wBACvDL;oBACF;gBACF;YACF;QACF;QACA;IACF;IACA,KAAK,MAAMa,OAAOlB,KAAM;QACtB,IAAIQ;QACJ,IAAIP,MAAMK,IAAI,KAAK,YAAY,OAAOY,KAAKC,cAAc,UAAU;YACjE,uFAAuF;YACvF,MAAML,QAAQb,MAAMW,eAAe,GAC7Bb,QAAQc,QAAQE,KAAK,CAACC,IAAMA,EAAEC,IAAI,KAAKC,IAAIC,SAAS,KACpDlB,MAAMW,eAAe,CAACG,IAAI,CACxB,CAACC,IAAM,OAAOA,MAAM,YAAYA,EAAEC,IAAI,KAAKC,IAAIC,SAAS,IAE5DlB,MAAMY,MAAM,CAACE,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKC,IAAIC,SAAS;YAErDX,SAASM,OAAON;QAClB,OAAO,IAAIP,MAAMK,IAAI,KAAK,SAAS;YACjCE,SAASP,MAAMO,MAAM;QACvB;QAEA,IAAIA,QAAQ;YACVD,eAAe;gBACbV;gBACAC;gBACAC;gBACAS;gBACAN;gBACAO,YAAY;gBACZN;gBACAC,mBAAmBA,qBAAqBH,MAAMS,SAAS;gBACvDL;gBACAa;YACF;QACF;IACF;AACF;AAyCA;;;;;;;;CAQC,GACD,OAAO,MAAMX,iBAAiB,CAAC,EAC7BV,QAAQ,EACRC,eAAesB,iBAAiB,EAAE,EAClCrB,MAAM,EACNS,MAAM,EACNN,YAAY,IAAI,EAChBO,aAAa,IAAI,EACjBN,cAAc,KAAK,EACnBC,iBAAiB,EACjBC,YAAY,CAAC,CAAC,EACda,MAAM,CAAC,CAAC,EACW;IACnBV,OAAOa,IAAI,CAAC,CAACpB;QACX,IAAIH,gBAA8D,EAAE;QACpE,IAAI,CAACW,YAAY;YACfX,gBAAgBsB;QAClB;QACA,IAAIE,OAAO;QACX,MAAMC,OAAO;YACXD,OAAO;QACT;QAEA,IAAI,CAACJ,OAAO,OAAOA,QAAQ,UAAU;YACnC;QACF;QAEA,IACE,CAACf,eACDN,YACAA,SAAS;YAAEI;YAAOsB;YAAMnB,mBAAmBA;YAAoBC;YAAWa;QAAI,IAC9E;YACA,OAAO;QACT,OAAO,IAAIf,aAAa;YACtBL,cAAc0B,IAAI,CAAC,IACjB3B,SAAS;oBAAEI;oBAAOsB;oBAAMnB,mBAAmBA;oBAAoBC;oBAAWa;gBAAI;QAElF;QAEA,IAAII,MAAM;YACR,OAAO;QACT;QAEA,uCAAuC;QACvC,IAAIG,aAAaP;QACjB,IAAIQ,mBAAmBrB;QAEvB,IAAIJ,MAAMK,IAAI,KAAK,UAAU,UAAUL,OAAO;YAC5C,KAAK,MAAM0B,OAAO1B,MAAM2B,IAAI,CAAE;gBAC5B,IAAIC,SAASX;gBAEb,IAAII,MAAM;oBACR,OAAO;gBACT;gBAEA,IAAI,UAAUK,OAAOA,IAAIG,IAAI,EAAE;oBAC7B,IACE,CAACZ,GAAG,CAACS,IAAIG,IAAI,CAAqB,IAClC,OAAOZ,GAAG,CAACS,IAAIG,IAAI,CAAqB,KAAK,UAC7C;wBACA,IAAI5B,WAAW;4BACb,IAAIyB,IAAIjB,SAAS,EAAE;;gCACfQ,GAA2B,CAACS,IAAIG,IAAI,CAAC,GAAG;oCAAEC,IAAI,CAAC;gCAAE;4BACrD,OAAO;;gCACHb,GAA2B,CAACS,IAAIG,IAAI,CAAC,GAAG,CAAC;4BAC7C;wBACF,OAAO;4BACL;wBACF;oBACF;oBAEA,IACEjC,YACA,CAACM,eACDN,SAAS;wBACPI,OAAO;4BAAE,GAAG0B,GAAG;4BAAErB,MAAM;wBAAM;wBAC7BiB;wBACAnB,mBAAmBA;wBACnBC,WAAWqB;wBACXR,KAAKW;oBACP,IACA;wBACA,OAAO;oBACT,OAAO,IAAI1B,aAAa;wBACtBL,cAAc0B,IAAI,CAAC,IACjB3B,SAAS;gCACPI,OAAO;oCAAE,GAAG0B,GAAG;oCAAErB,MAAM;gCAAM;gCAC7BiB;gCACAnB,mBAAmBA;gCACnBC,WAAWqB;gCACXR,KAAKW;4BACP;oBAEJ;oBAEAA,SAASA,MAAM,CAACF,IAAIG,IAAI,CAAwB;oBAEhD,IAAIH,IAAIjB,SAAS,EAAE;wBACjB,IAAK,MAAMsB,OAAOH,OAAmC;4BACnD,IACEA,MAAM,CAACG,IAA2B,IAClC,OAAOH,MAAM,CAACG,IAA2B,KAAK,UAC9C;gCACAzB,eAAe;oCACbV;oCACAC;oCACAC;oCACAS,QAAQmB,IAAInB,MAAM;oCAClBN;oCACAO,YAAY;oCACZN;oCACAC,mBAAmB;oCACnBC,WAAWqB;oCACXR,KAAKW,MAAM,CAACG,IAA2B;gCACzC;4BACF;wBACF;oBACF;gBACF,OAAO;oBACL,IACEnC,YACA,CAACM,eACDN,SAAS;wBACPI,OAAO;4BAAE,GAAG0B,GAAG;4BAAErB,MAAM;wBAAM;wBAC7BiB;wBACAnB,mBAAmBA;wBACnBC,WAAWqB;wBACXR,KAAKW;oBACP,IACA;wBACA,OAAO;oBACT,OAAO,IAAI1B,aAAa;wBACtBL,cAAc0B,IAAI,CAAC,IACjB3B,SAAS;gCACPI,OAAO;oCAAE,GAAG0B,GAAG;oCAAErB,MAAM;gCAAM;gCAC7BiB;gCACAnB,mBAAmBA;gCACnBC,WAAWqB;gCACXR,KAAKW;4BACP;oBAEJ;gBACF;gBAEA,IAAI,CAACF,IAAIjB,SAAS,EAAE;oBAClBH,eAAe;wBACbV;wBACAC;wBACAC;wBACAS,QAAQmB,IAAInB,MAAM;wBAClBN;wBACAO,YAAY;wBACZN;wBACAC,mBAAmB;wBACnBC,WAAWqB;wBACXR,KAAKW;oBACP;gBACF;gBAEA,IAAIP,MAAM;oBACR,OAAO;gBACT;YACF;YAEA;QACF;QAEA,IAAIrB,MAAMK,IAAI,KAAK,SAASZ,kBAAkBO,UAAUA,MAAMK,IAAI,KAAK,UAAU;YAC/E,IAAI,UAAUL,SAASA,MAAM6B,IAAI,EAAE;gBACjCJ,mBAAmBD;gBACnB,IAAI,CAACP,GAAG,CAACjB,MAAM6B,IAAI,CAAqB,EAAE;oBACxC,IAAI5B,WAAW;wBACb,IAAID,MAAMK,IAAI,KAAK,WAAWL,MAAMK,IAAI,KAAK,OAAO;4BAClD,IAAIX,uBAAuB;gCAAEM;gCAAOG,mBAAmBA;4BAAmB,IAAI;;gCAC1Ec,GAA2B,CAACjB,MAAM6B,IAAI,CAAC,GAAG;oCAAEC,IAAI,CAAC;gCAAE;4BACvD,OAAO;;gCACHb,GAA2B,CAACjB,MAAM6B,IAAI,CAAC,GAAG,CAAC;4BAC/C;wBACF,OAAO,IAAI7B,MAAMK,IAAI,KAAK,WAAWL,MAAMK,IAAI,KAAK,UAAU;4BAC5D,IAAIX,uBAAuB;gCAAEM;gCAAOG,mBAAmBA;4BAAmB,IAAI;;gCAC1Ec,GAA2B,CAACjB,MAAM6B,IAAI,CAAC,GAAG;oCAAEC,IAAI,EAAE;gCAAC;4BACvD,OAAO;;gCACHb,GAA2B,CAACjB,MAAM6B,IAAI,CAAC,GAAG,EAAE;4BAChD;wBACF;oBACF,OAAO;wBACL;oBACF;gBACF;gBACAL,aAAaP,GAAG,CAACjB,MAAM6B,IAAI,CAAqB;YAClD;YAEA,IACE,AAAC7B,CAAAA,MAAMK,IAAI,KAAK,SAASL,MAAMK,IAAI,KAAK,OAAM,KAC9CX,uBAAuB;gBAAEM;gBAAOG,mBAAmBA;YAAmB,MACtEqB,cACA,OAAOA,eAAe,UACtB;gBACA,IAAIhC,iBAAiBQ,QAAQ;oBAC3B,IAAK,MAAM+B,OAAOP,WAAuC;wBACvD,IAAIA,UAAU,CAACO,IAA+B,EAAE;4BAC9CzB,eAAe;gCACbV;gCACAC;gCACAC;gCACAS,QAAQP,MAAMO,MAAM;gCACpBN;gCACAO,YAAY;gCACZN;gCACAC,mBAAmB;gCACnBC,WAAWqB;gCACXR,KAAKO,UAAU,CAACO,IAA+B;4BACjD;wBACF;oBACF;gBACF,OAAO;oBACLzB,eAAe;wBACbV;wBACAC;wBACAC;wBACAS,QAAQP,MAAMO,MAAM;wBACpBN;wBACAO,YAAY;wBACZN;wBACAC;wBACAC,WAAWqB;wBACXR,KAAKO;oBACP;gBACF;gBAEA;YACF;YAEA,IACE,AAACxB,CAAAA,MAAMK,IAAI,KAAK,YAAYL,MAAMK,IAAI,KAAK,OAAM,KACjDmB,cACA,OAAOA,eAAe,UACtB;gBACA,IAAI9B,uBAAuB;oBAAEM;oBAAOG,mBAAmBA;gBAAmB,IAAI;oBAC5E,IAAI6B,MAAMC,OAAO,CAACT,aAAa;wBAC7B;oBACF;oBAEA,IAAK,MAAMO,OAAOP,WAAuC;wBACvD,MAAMU,aAAaV,UAAU,CAACO,IAA+B;wBAC7D,IAAI,CAACC,MAAMC,OAAO,CAACC,aAAa;4BAC9B;wBACF;wBAEAvC,2BAA2B;4BACzBC;4BACAC;4BACAC;4BACAC,MAAMmC;4BACNlC;4BACAC;4BACAC;4BACAC,mBAAmB;4BACnBC,WAAWqB;wBACb;oBACF;gBACF,OAAO,IAAIO,MAAMC,OAAO,CAACT,aAAa;oBACpC7B,2BAA2B;wBACzBC;wBACAC;wBACAC;wBACAC,MAAMyB;wBACNxB;wBACAC;wBACAC;wBACAC,mBAAmBA;wBACnBC,WAAWqB;oBACb;gBACF;YACF,OAAO,IAAID,cAAc,OAAOA,eAAe,YAAY,YAAYxB,OAAO;gBAC5EM,eAAe;oBACbV;oBACAC;oBACAC;oBACAS,QAAQP,MAAMO,MAAM;oBACpBN;oBACAO,YAAY;oBACZN;oBACAC;oBACAC,WAAWqB;oBACXR,KAAKO;gBACP;YACF;QACF;QAEA,IAAIhB,YAAY;YACdX,cAAcsC,OAAO,GAAGC,OAAO,CAAC,CAACC;gBAC/BA;YACF;QACF;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unflatten.d.ts","sourceRoot":"","sources":["../../src/utilities/unflatten.ts"],"names":[],"mappings":"AA2BA,UAAU,IAAI;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,uBAAmB,IAAI,QA0D5C,CAAA"}
1
+ {"version":3,"file":"unflatten.d.ts","sourceRoot":"","sources":["../../src/utilities/unflatten.ts"],"names":[],"mappings":"AA2BA,UAAU,IAAI;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,WAAY,GAAG,SAAS,IAAI,QA0DjD,CAAA"}
@@ -1,5 +1,4 @@
1
- // @ts-strict-ignore
2
- /*
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */ /*
3
2
  * Copyright (c) 2014, Hugh Kennedy
4
3
  * All rights reserved.
5
4
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/unflatten.ts"],"sourcesContent":["// @ts-strict-ignore\n/*\n * Copyright (c) 2014, Hugh Kennedy\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Copyright (c) 2020, Feross Aboukhadijeh <https://feross.org>\n * Reference: https://www.npmjs.com/package/is-buffer\n * All rights reserved.\n */\nfunction isBuffer(obj) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n obj.constructor.isBuffer(obj)\n )\n}\n\ninterface Opts {\n delimiter?: string\n object?: any\n overwrite?: boolean\n recursive?: boolean\n}\n\nexport const unflatten = (target, opts?: Opts) => {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const recursive = opts.recursive || false\n const result = {}\n\n const isbuffer = isBuffer(target)\n\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is an integer.\n const getkey = (key) => {\n const parsedKey = Number(key)\n return isNaN(parsedKey) || key.indexOf('.') !== -1 || opts.object ? key : parsedKey\n }\n\n const sortedKeys = Object.keys(target).sort((keyA, keyB) => keyA.length - keyB.length)\n\n sortedKeys.forEach((key) => {\n const split = key.split(delimiter)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = type === '[object Object]' || type === '[object Array]'\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = typeof key2 === 'number' && !opts.object ? [] : {}\n }\n\n recipient = recipient[key1]\n\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = recursive ? unflatten(target[key], opts) : target[key]\n })\n\n return result\n}\n"],"names":["isBuffer","obj","constructor","unflatten","target","opts","delimiter","overwrite","recursive","result","isbuffer","Object","prototype","toString","call","getkey","key","parsedKey","Number","isNaN","indexOf","object","sortedKeys","keys","sort","keyA","keyB","length","forEach","split","key1","shift","key2","recipient","undefined","type","isobject"],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;;;;CAUC,GAED;;;;CAIC,GACD,SAASA,SAASC,GAAG;IACnB,OACEA,OAAO,QACPA,IAAIC,WAAW,IAAI,QACnB,OAAOD,IAAIC,WAAW,CAACF,QAAQ,KAAK,cACpCC,IAAIC,WAAW,CAACF,QAAQ,CAACC;AAE7B;AASA,OAAO,MAAME,YAAY,CAACC,QAAQC;IAChCA,OAAOA,QAAQ,CAAC;IAEhB,MAAMC,YAAYD,KAAKC,SAAS,IAAI;IACpC,MAAMC,YAAYF,KAAKE,SAAS,IAAI;IACpC,MAAMC,YAAYH,KAAKG,SAAS,IAAI;IACpC,MAAMC,SAAS,CAAC;IAEhB,MAAMC,WAAWV,SAASI;IAE1B,IAAIM,YAAYC,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACV,YAAY,mBAAmB;QAC5E,OAAOA;IACT;IAEA,4CAA4C;IAC5C,MAAMW,SAAS,CAACC;QACd,MAAMC,YAAYC,OAAOF;QACzB,OAAOG,MAAMF,cAAcD,IAAII,OAAO,CAAC,SAAS,CAAC,KAAKf,KAAKgB,MAAM,GAAGL,MAAMC;IAC5E;IAEA,MAAMK,aAAaX,OAAOY,IAAI,CAACnB,QAAQoB,IAAI,CAAC,CAACC,MAAMC,OAASD,KAAKE,MAAM,GAAGD,KAAKC,MAAM;IAErFL,WAAWM,OAAO,CAAC,CAACZ;QAClB,MAAMa,QAAQb,IAAIa,KAAK,CAACvB;QACxB,IAAIwB,OAAOf,OAAOc,MAAME,KAAK;QAC7B,IAAIC,OAAOjB,OAAOc,KAAK,CAAC,EAAE;QAC1B,IAAII,YAAYxB;QAEhB,MAAOuB,SAASE,UAAW;YACzB,IAAIJ,SAAS,aAAa;gBACxB;YACF;YAEA,MAAMK,OAAOxB,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACmB,SAAS,CAACH,KAAK;YAC3D,MAAMM,WAAWD,SAAS,qBAAqBA,SAAS;YAExD,uEAAuE;YACvE,IAAI,CAAC5B,aAAa,CAAC6B,YAAY,OAAOH,SAAS,CAACH,KAAK,KAAK,aAAa;gBACrE;YACF;YAEA,IAAI,AAACvB,aAAa,CAAC6B,YAAc,CAAC7B,aAAa0B,SAAS,CAACH,KAAK,IAAI,MAAO;gBACvEG,SAAS,CAACH,KAAK,GAAG,OAAOE,SAAS,YAAY,CAAC3B,KAAKgB,MAAM,GAAG,EAAE,GAAG,CAAC;YACrE;YAEAY,YAAYA,SAAS,CAACH,KAAK;YAE3B,IAAID,MAAMF,MAAM,GAAG,GAAG;gBACpBG,OAAOf,OAAOc,MAAME,KAAK;gBACzBC,OAAOjB,OAAOc,KAAK,CAAC,EAAE;YACxB;QACF;QAEA,sCAAsC;QACtCI,SAAS,CAACH,KAAK,GAAGtB,YAAYL,UAAUC,MAAM,CAACY,IAAI,EAAEX,QAAQD,MAAM,CAACY,IAAI;IAC1E;IAEA,OAAOP;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/unflatten.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Copyright (c) 2014, Hugh Kennedy\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Copyright (c) 2020, Feross Aboukhadijeh <https://feross.org>\n * Reference: https://www.npmjs.com/package/is-buffer\n * All rights reserved.\n */\nfunction isBuffer(obj: any) {\n return (\n obj != null &&\n obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' &&\n obj.constructor.isBuffer(obj)\n )\n}\n\ninterface Opts {\n delimiter?: string\n object?: any\n overwrite?: boolean\n recursive?: boolean\n}\n\nexport const unflatten = (target: any, opts?: Opts) => {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const recursive = opts.recursive || false\n const result = {}\n\n const isbuffer = isBuffer(target)\n\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is an integer.\n const getkey = (key: any) => {\n const parsedKey = Number(key)\n return isNaN(parsedKey) || key.indexOf('.') !== -1 || opts.object ? key : parsedKey\n }\n\n const sortedKeys = Object.keys(target).sort((keyA, keyB) => keyA.length - keyB.length)\n\n sortedKeys.forEach((key) => {\n const split = key.split(delimiter)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result as Record<string, any>\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = type === '[object Object]' || type === '[object Array]'\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = typeof key2 === 'number' && !opts.object ? [] : {}\n }\n\n recipient = recipient[key1]\n\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = recursive ? unflatten(target[key], opts) : target[key]\n })\n\n return result\n}\n"],"names":["isBuffer","obj","constructor","unflatten","target","opts","delimiter","overwrite","recursive","result","isbuffer","Object","prototype","toString","call","getkey","key","parsedKey","Number","isNaN","indexOf","object","sortedKeys","keys","sort","keyA","keyB","length","forEach","split","key1","shift","key2","recipient","undefined","type","isobject"],"mappings":"AAAA,qDAAqD,GACrD;;;;;;;;;;CAUC,GAED;;;;CAIC,GACD,SAASA,SAASC,GAAQ;IACxB,OACEA,OAAO,QACPA,IAAIC,WAAW,IAAI,QACnB,OAAOD,IAAIC,WAAW,CAACF,QAAQ,KAAK,cACpCC,IAAIC,WAAW,CAACF,QAAQ,CAACC;AAE7B;AASA,OAAO,MAAME,YAAY,CAACC,QAAaC;IACrCA,OAAOA,QAAQ,CAAC;IAEhB,MAAMC,YAAYD,KAAKC,SAAS,IAAI;IACpC,MAAMC,YAAYF,KAAKE,SAAS,IAAI;IACpC,MAAMC,YAAYH,KAAKG,SAAS,IAAI;IACpC,MAAMC,SAAS,CAAC;IAEhB,MAAMC,WAAWV,SAASI;IAE1B,IAAIM,YAAYC,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACV,YAAY,mBAAmB;QAC5E,OAAOA;IACT;IAEA,4CAA4C;IAC5C,MAAMW,SAAS,CAACC;QACd,MAAMC,YAAYC,OAAOF;QACzB,OAAOG,MAAMF,cAAcD,IAAII,OAAO,CAAC,SAAS,CAAC,KAAKf,KAAKgB,MAAM,GAAGL,MAAMC;IAC5E;IAEA,MAAMK,aAAaX,OAAOY,IAAI,CAACnB,QAAQoB,IAAI,CAAC,CAACC,MAAMC,OAASD,KAAKE,MAAM,GAAGD,KAAKC,MAAM;IAErFL,WAAWM,OAAO,CAAC,CAACZ;QAClB,MAAMa,QAAQb,IAAIa,KAAK,CAACvB;QACxB,IAAIwB,OAAOf,OAAOc,MAAME,KAAK;QAC7B,IAAIC,OAAOjB,OAAOc,KAAK,CAAC,EAAE;QAC1B,IAAII,YAAYxB;QAEhB,MAAOuB,SAASE,UAAW;YACzB,IAAIJ,SAAS,aAAa;gBACxB;YACF;YAEA,MAAMK,OAAOxB,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACmB,SAAS,CAACH,KAAK;YAC3D,MAAMM,WAAWD,SAAS,qBAAqBA,SAAS;YAExD,uEAAuE;YACvE,IAAI,CAAC5B,aAAa,CAAC6B,YAAY,OAAOH,SAAS,CAACH,KAAK,KAAK,aAAa;gBACrE;YACF;YAEA,IAAI,AAACvB,aAAa,CAAC6B,YAAc,CAAC7B,aAAa0B,SAAS,CAACH,KAAK,IAAI,MAAO;gBACvEG,SAAS,CAACH,KAAK,GAAG,OAAOE,SAAS,YAAY,CAAC3B,KAAKgB,MAAM,GAAG,EAAE,GAAG,CAAC;YACrE;YAEAY,YAAYA,SAAS,CAACH,KAAK;YAE3B,IAAID,MAAMF,MAAM,GAAG,GAAG;gBACpBG,OAAOf,OAAOc,MAAME,KAAK;gBACzBC,OAAOjB,OAAOc,KAAK,CAAC,EAAE;YACxB;QACF;QAEA,sCAAsC;QACtCI,SAAS,CAACH,KAAK,GAAGtB,YAAYL,UAAUC,MAAM,CAACY,IAAI,EAAEX,QAAQD,MAAM,CAACY,IAAI;IAC1E;IAEA,OAAOP;AACT,EAAC"}
@@ -1,2 +1,2 @@
1
- export declare function wait(ms: any): Promise<unknown>;
1
+ export declare function wait(ms: number): Promise<unknown>;
2
2
  //# sourceMappingURL=wait.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utilities/wait.ts"],"names":[],"mappings":"AACA,wBAAsB,IAAI,CAAC,EAAE,KAAA,oBAI5B"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utilities/wait.ts"],"names":[],"mappings":"AAAA,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,oBAIpC"}