payload 3.0.0-beta.95 → 3.0.0-beta.96

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/RichText.d.ts +2 -1
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/auth/executeAccess.d.ts.map +1 -1
  5. package/dist/auth/executeAccess.js +6 -2
  6. package/dist/auth/executeAccess.js.map +1 -1
  7. package/dist/auth/getAuthFields.d.ts.map +1 -1
  8. package/dist/auth/getAuthFields.js +3 -1
  9. package/dist/auth/getAuthFields.js.map +1 -1
  10. package/dist/auth/isLocked.d.ts.map +1 -1
  11. package/dist/auth/isLocked.js +3 -1
  12. package/dist/auth/isLocked.js.map +1 -1
  13. package/dist/auth/operations/auth.d.ts.map +1 -1
  14. package/dist/auth/operations/auth.js +3 -1
  15. package/dist/auth/operations/auth.js.map +1 -1
  16. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  17. package/dist/auth/operations/forgotPassword.js +6 -2
  18. package/dist/auth/operations/forgotPassword.js.map +1 -1
  19. package/dist/auth/operations/login.d.ts.map +1 -1
  20. package/dist/auth/operations/login.js +6 -2
  21. package/dist/auth/operations/login.js.map +1 -1
  22. package/dist/auth/operations/logout.d.ts.map +1 -1
  23. package/dist/auth/operations/logout.js +6 -2
  24. package/dist/auth/operations/logout.js.map +1 -1
  25. package/dist/auth/operations/me.d.ts.map +1 -1
  26. package/dist/auth/operations/me.js +6 -2
  27. package/dist/auth/operations/me.js.map +1 -1
  28. package/dist/auth/operations/refresh.d.ts.map +1 -1
  29. package/dist/auth/operations/refresh.js +6 -2
  30. package/dist/auth/operations/refresh.js.map +1 -1
  31. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  32. package/dist/auth/operations/registerFirstUser.js +6 -2
  33. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  34. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  35. package/dist/auth/operations/resetPassword.js +6 -2
  36. package/dist/auth/operations/resetPassword.js.map +1 -1
  37. package/dist/auth/operations/unlock.d.ts.map +1 -1
  38. package/dist/auth/operations/unlock.js +3 -1
  39. package/dist/auth/operations/unlock.js.map +1 -1
  40. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  41. package/dist/auth/operations/verifyEmail.js +9 -3
  42. package/dist/auth/operations/verifyEmail.js.map +1 -1
  43. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  44. package/dist/auth/strategies/local/authenticate.js +3 -1
  45. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  46. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  47. package/dist/auth/strategies/local/register.js +3 -1
  48. package/dist/auth/strategies/local/register.js.map +1 -1
  49. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  50. package/dist/auth/strategies/local/resetLoginAttempts.js +3 -1
  51. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  52. package/dist/bin/generateTypes.d.ts.map +1 -1
  53. package/dist/bin/generateTypes.js +6 -2
  54. package/dist/bin/generateTypes.js.map +1 -1
  55. package/dist/bin/index.d.ts.map +1 -1
  56. package/dist/bin/index.js +3 -1
  57. package/dist/bin/index.js.map +1 -1
  58. package/dist/collections/config/reservedFieldNames.spec.js +4 -4
  59. package/dist/collections/config/reservedFieldNames.spec.js.map +1 -1
  60. package/dist/collections/config/sanitize.d.ts.map +1 -1
  61. package/dist/collections/config/sanitize.js +15 -6
  62. package/dist/collections/config/sanitize.js.map +1 -1
  63. package/dist/collections/dataloader.d.ts.map +1 -1
  64. package/dist/collections/dataloader.js +3 -1
  65. package/dist/collections/dataloader.js.map +1 -1
  66. package/dist/collections/operations/create.d.ts.map +1 -1
  67. package/dist/collections/operations/create.js +3 -1
  68. package/dist/collections/operations/create.js.map +1 -1
  69. package/dist/collections/operations/delete.d.ts.map +1 -1
  70. package/dist/collections/operations/delete.js +3 -1
  71. package/dist/collections/operations/delete.js.map +1 -1
  72. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  73. package/dist/collections/operations/deleteByID.js +9 -3
  74. package/dist/collections/operations/deleteByID.js.map +1 -1
  75. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  76. package/dist/collections/operations/duplicate.js +9 -3
  77. package/dist/collections/operations/duplicate.js.map +1 -1
  78. package/dist/collections/operations/findByID.d.ts.map +1 -1
  79. package/dist/collections/operations/findByID.js +6 -2
  80. package/dist/collections/operations/findByID.js.map +1 -1
  81. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  82. package/dist/collections/operations/findVersionByID.js +9 -3
  83. package/dist/collections/operations/findVersionByID.js.map +1 -1
  84. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  85. package/dist/collections/operations/restoreVersion.js +6 -2
  86. package/dist/collections/operations/restoreVersion.js.map +1 -1
  87. package/dist/collections/operations/update.d.ts.map +1 -1
  88. package/dist/collections/operations/update.js +3 -1
  89. package/dist/collections/operations/update.js.map +1 -1
  90. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  91. package/dist/collections/operations/updateByID.js +9 -3
  92. package/dist/collections/operations/updateByID.js.map +1 -1
  93. package/dist/config/find.d.ts.map +1 -1
  94. package/dist/config/find.js +9 -3
  95. package/dist/config/find.js.map +1 -1
  96. package/dist/config/sanitize.d.ts.map +1 -1
  97. package/dist/config/sanitize.js +10 -5
  98. package/dist/config/sanitize.js.map +1 -1
  99. package/dist/config/types.d.ts +116 -3
  100. package/dist/config/types.d.ts.map +1 -1
  101. package/dist/config/types.js.map +1 -1
  102. package/dist/database/combineQueries.d.ts.map +1 -1
  103. package/dist/database/combineQueries.js +9 -3
  104. package/dist/database/combineQueries.js.map +1 -1
  105. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  106. package/dist/database/getLocalizedPaths.js +3 -1
  107. package/dist/database/getLocalizedPaths.js.map +1 -1
  108. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  109. package/dist/database/migrations/readMigrationFiles.js +3 -1
  110. package/dist/database/migrations/readMigrationFiles.js.map +1 -1
  111. package/dist/fields/config/sanitize.d.ts +2 -1
  112. package/dist/fields/config/sanitize.d.ts.map +1 -1
  113. package/dist/fields/config/sanitize.js +27 -7
  114. package/dist/fields/config/sanitize.js.map +1 -1
  115. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  116. package/dist/fields/hooks/afterRead/index.js +3 -1
  117. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  118. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  119. package/dist/fields/hooks/afterRead/promise.js +6 -2
  120. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  121. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  122. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +6 -2
  123. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js.map +1 -1
  124. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  125. package/dist/fields/hooks/beforeChange/promise.js +18 -6
  126. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  127. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  128. package/dist/fields/hooks/beforeValidate/promise.js +21 -7
  129. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  130. package/dist/fields/validations.d.ts.map +1 -1
  131. package/dist/fields/validations.js +57 -19
  132. package/dist/fields/validations.js.map +1 -1
  133. package/dist/globals/config/sanitize.d.ts.map +1 -1
  134. package/dist/globals/config/sanitize.js +45 -16
  135. package/dist/globals/config/sanitize.js.map +1 -1
  136. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  137. package/dist/globals/operations/docAccess.js +3 -1
  138. package/dist/globals/operations/docAccess.js.map +1 -1
  139. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  140. package/dist/globals/operations/findVersionByID.js +12 -4
  141. package/dist/globals/operations/findVersionByID.js.map +1 -1
  142. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  143. package/dist/globals/operations/restoreVersion.js +3 -1
  144. package/dist/globals/operations/restoreVersion.js.map +1 -1
  145. package/dist/globals/operations/update.d.ts.map +1 -1
  146. package/dist/globals/operations/update.js +3 -1
  147. package/dist/globals/operations/update.js.map +1 -1
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +9 -3
  150. package/dist/index.js.map +1 -1
  151. package/dist/preferences/operations/findOne.d.ts.map +1 -1
  152. package/dist/preferences/operations/findOne.js +3 -1
  153. package/dist/preferences/operations/findOne.js.map +1 -1
  154. package/dist/uploads/cropImage.d.ts.map +1 -1
  155. package/dist/uploads/cropImage.js +3 -1
  156. package/dist/uploads/cropImage.js.map +1 -1
  157. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  158. package/dist/uploads/deleteAssociatedFiles.js +3 -1
  159. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  160. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  161. package/dist/uploads/docWithFilenameExists.js +3 -1
  162. package/dist/uploads/docWithFilenameExists.js.map +1 -1
  163. package/dist/uploads/formatFilesize.d.ts.map +1 -1
  164. package/dist/uploads/formatFilesize.js +3 -1
  165. package/dist/uploads/formatFilesize.js.map +1 -1
  166. package/dist/uploads/generateFileData.d.ts.map +1 -1
  167. package/dist/uploads/generateFileData.js +12 -4
  168. package/dist/uploads/generateFileData.js.map +1 -1
  169. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  170. package/dist/uploads/getBaseFields.js +6 -2
  171. package/dist/uploads/getBaseFields.js.map +1 -1
  172. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  173. package/dist/uploads/getExternalFile.js +3 -1
  174. package/dist/uploads/getExternalFile.js.map +1 -1
  175. package/dist/uploads/imageResizer.d.ts.map +1 -1
  176. package/dist/uploads/imageResizer.js +35 -13
  177. package/dist/uploads/imageResizer.js.map +1 -1
  178. package/dist/uploads/optionallyAppendMetadata.d.ts.map +1 -1
  179. package/dist/uploads/optionallyAppendMetadata.js +3 -1
  180. package/dist/uploads/optionallyAppendMetadata.js.map +1 -1
  181. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  182. package/dist/utilities/configToJSONSchema.js +12 -4
  183. package/dist/utilities/configToJSONSchema.js.map +1 -1
  184. package/dist/utilities/createArrayFromCommaDelineated.d.ts.map +1 -1
  185. package/dist/utilities/createArrayFromCommaDelineated.js +3 -1
  186. package/dist/utilities/createArrayFromCommaDelineated.js.map +1 -1
  187. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  188. package/dist/utilities/createLocalReq.js +28 -12
  189. package/dist/utilities/createLocalReq.js.map +1 -1
  190. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  191. package/dist/utilities/deepCopyObject.js +15 -5
  192. package/dist/utilities/deepCopyObject.js.map +1 -1
  193. package/dist/utilities/dependencies/versionUtils.d.ts.map +1 -1
  194. package/dist/utilities/dependencies/versionUtils.js +24 -8
  195. package/dist/utilities/dependencies/versionUtils.js.map +1 -1
  196. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  197. package/dist/utilities/getEntityPolicies.js +9 -3
  198. package/dist/utilities/getEntityPolicies.js.map +1 -1
  199. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  200. package/dist/utilities/getObjectDotNotation.js +3 -1
  201. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  202. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  203. package/dist/utilities/getSiblingData.js +3 -1
  204. package/dist/utilities/getSiblingData.js.map +1 -1
  205. package/dist/utilities/isValidID.d.ts.map +1 -1
  206. package/dist/utilities/isValidID.js +3 -1
  207. package/dist/utilities/isValidID.js.map +1 -1
  208. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  209. package/dist/utilities/reduceFieldsToValues.js +3 -1
  210. package/dist/utilities/reduceFieldsToValues.js.map +1 -1
  211. package/dist/utilities/timestamp.d.ts.map +1 -1
  212. package/dist/utilities/timestamp.js +3 -1
  213. package/dist/utilities/timestamp.js.map +1 -1
  214. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  215. package/dist/versions/drafts/getQueryDraftsSort.js +3 -1
  216. package/dist/versions/drafts/getQueryDraftsSort.js.map +1 -1
  217. package/dist/versions/saveVersion.d.ts.map +1 -1
  218. package/dist/versions/saveVersion.js +18 -6
  219. package/dist/versions/saveVersion.js.map +1 -1
  220. package/package.json +7 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getEntityPolicies.ts"],"sourcesContent":["import type { CollectionPermission, GlobalPermission } from '../auth/types.js'\nimport type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { Access } from '../config/types.js'\nimport type { Field, FieldAccess } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { AllOperations, Document, PayloadRequest, Where } from '../types/index.js'\n\nimport { tabHasName } from '../fields/config/types.js'\n\ntype Args = {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n id?: number | string\n operations: AllOperations[]\n req: PayloadRequest\n type: 'collection' | 'global'\n}\n\ntype ReturnType<T extends Args> = T['type'] extends 'global'\n ? GlobalPermission\n : CollectionPermission\n\ntype CreateAccessPromise = (args: {\n access: Access | FieldAccess\n accessLevel: 'entity' | 'field'\n disableWhere?: boolean\n operation: AllOperations\n policiesObj: {\n [key: string]: any\n }\n}) => Promise<void>\n\nexport async function getEntityPolicies<T extends Args>(args: T): Promise<ReturnType<T>> {\n const { id, type, entity, operations, req } = args\n const { data, locale, payload, user } = req\n const isLoggedIn = !!user\n\n const policies = {\n fields: {},\n } as ReturnType<T>\n\n let docBeingAccessed\n\n async function getEntityDoc({ where }: { where?: Where } = {}): Promise<Document & TypeWithID> {\n if (entity.slug) {\n if (type === 'global') {\n return payload.findGlobal({\n slug: entity.slug,\n fallbackLocale: null,\n locale,\n overrideAccess: true,\n req,\n })\n }\n\n if (type === 'collection' && id) {\n if (typeof where === 'object') {\n const paginatedRes = await payload.find({\n collection: entity.slug,\n depth: 0,\n fallbackLocale: null,\n limit: 1,\n locale,\n overrideAccess: true,\n pagination: false,\n req,\n where: {\n ...where,\n and: [\n ...(where.and || []),\n {\n id: {\n equals: id,\n },\n },\n ],\n },\n })\n\n return paginatedRes?.docs?.[0] || undefined\n }\n\n return payload.findByID({\n id,\n collection: entity.slug,\n depth: 0,\n fallbackLocale: null,\n locale,\n overrideAccess: true,\n req,\n })\n }\n }\n\n return undefined\n }\n\n const createAccessPromise: CreateAccessPromise = async ({\n access,\n accessLevel,\n disableWhere = false,\n operation,\n policiesObj,\n }) => {\n const mutablePolicies = policiesObj\n\n if (accessLevel === 'field' && docBeingAccessed === undefined) {\n // assign docBeingAccessed first as the promise to avoid multiple calls to getEntityDoc\n docBeingAccessed = getEntityDoc().then((doc) => {\n docBeingAccessed = doc\n })\n }\n // awaiting the promise to ensure docBeingAccessed is assigned before it is used\n await docBeingAccessed\n\n // https://payloadcms.slack.com/archives/C048Z9C2BEX/p1702054928343769\n const accessResult = await access({ id, data, doc: docBeingAccessed, req })\n\n if (typeof accessResult === 'object' && !disableWhere) {\n mutablePolicies[operation] = {\n permission:\n id || type === 'global' ? !!(await getEntityDoc({ where: accessResult })) : true,\n where: accessResult,\n }\n } else if (mutablePolicies[operation]?.permission !== false) {\n mutablePolicies[operation] = {\n permission: !!accessResult,\n }\n }\n }\n\n const executeFieldPolicies = async ({\n entityPermission,\n fields,\n operation,\n policiesObj,\n }: {\n entityPermission\n fields: Field[]\n operation: AllOperations\n policiesObj\n }) => {\n const mutablePolicies = policiesObj.fields\n\n await Promise.all(\n fields.map(async (field) => {\n if ('name' in field && field.name) {\n if (!mutablePolicies[field.name]) mutablePolicies[field.name] = {}\n\n if ('access' in field && field.access && typeof field.access[operation] === 'function') {\n await createAccessPromise({\n access: field.access[operation],\n accessLevel: 'field',\n disableWhere: true,\n operation,\n policiesObj: mutablePolicies[field.name],\n })\n } else {\n mutablePolicies[field.name][operation] = {\n permission: policiesObj[operation]?.permission,\n }\n }\n\n if ('fields' in field && field.fields) {\n if (!mutablePolicies[field.name].fields) mutablePolicies[field.name].fields = {}\n\n await executeFieldPolicies({\n entityPermission,\n fields: field.fields,\n operation,\n policiesObj: mutablePolicies[field.name],\n })\n }\n\n if ('blocks' in field && field?.blocks) {\n if (!mutablePolicies[field.name]?.blocks) mutablePolicies[field.name].blocks = {}\n\n await Promise.all(\n field.blocks.map(async (block) => {\n if (!mutablePolicies[field.name].blocks?.[block.slug]) {\n mutablePolicies[field.name].blocks[block.slug] = {\n fields: {},\n [operation]: { permission: entityPermission },\n }\n } else if (!mutablePolicies[field.name].blocks[block.slug][operation]) {\n mutablePolicies[field.name].blocks[block.slug][operation] = {\n permission: entityPermission,\n }\n }\n\n await executeFieldPolicies({\n entityPermission,\n fields: block.fields,\n operation,\n policiesObj: mutablePolicies[field.name].blocks[block.slug],\n })\n }),\n )\n }\n } else if ('fields' in field && field.fields) {\n await executeFieldPolicies({\n entityPermission,\n fields: field.fields,\n operation,\n policiesObj,\n })\n } else if (field.type === 'tabs') {\n await Promise.all(\n field.tabs.map(async (tab) => {\n if (tabHasName(tab)) {\n if (!mutablePolicies[tab.name]) {\n mutablePolicies[tab.name] = {\n fields: {},\n [operation]: { permission: entityPermission },\n }\n } else if (!mutablePolicies[tab.name][operation]) {\n mutablePolicies[tab.name][operation] = { permission: entityPermission }\n }\n await executeFieldPolicies({\n entityPermission,\n fields: tab.fields,\n operation,\n policiesObj: mutablePolicies[tab.name],\n })\n } else {\n await executeFieldPolicies({\n entityPermission,\n fields: tab.fields,\n operation,\n policiesObj,\n })\n }\n }),\n )\n }\n }),\n )\n }\n\n await operations.reduce(async (priorOperation, operation) => {\n await priorOperation\n\n let entityAccessPromise: Promise<void>\n\n if (typeof entity.access[operation] === 'function') {\n entityAccessPromise = createAccessPromise({\n access: entity.access[operation],\n accessLevel: 'entity',\n operation,\n policiesObj: policies,\n })\n } else {\n policies[operation] = {\n permission: isLoggedIn,\n }\n }\n\n await entityAccessPromise\n\n await executeFieldPolicies({\n entityPermission: policies[operation].permission,\n fields: entity.fields,\n operation,\n policiesObj: policies,\n })\n }, Promise.resolve())\n\n return policies\n}\n"],"names":["tabHasName","getEntityPolicies","args","id","type","entity","operations","req","data","locale","payload","user","isLoggedIn","policies","fields","docBeingAccessed","getEntityDoc","where","slug","findGlobal","fallbackLocale","overrideAccess","paginatedRes","find","collection","depth","limit","pagination","and","equals","docs","undefined","findByID","createAccessPromise","access","accessLevel","disableWhere","operation","policiesObj","mutablePolicies","then","doc","accessResult","permission","executeFieldPolicies","entityPermission","Promise","all","map","field","name","blocks","block","tabs","tab","reduce","priorOperation","entityAccessPromise","resolve"],"mappings":"AAOA,SAASA,UAAU,QAAQ,4BAA2B;AAwBtD,OAAO,eAAeC,kBAAkCC,IAAO;IAC7D,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGL;IAC9C,MAAM,EAAEM,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGJ;IACxC,MAAMK,aAAa,CAAC,CAACD;IAErB,MAAME,WAAW;QACfC,QAAQ,CAAC;IACX;IAEA,IAAIC;IAEJ,eAAeC,aAAa,EAAEC,KAAK,EAAqB,GAAG,CAAC,CAAC;QAC3D,IAAIZ,OAAOa,IAAI,EAAE;YACf,IAAId,SAAS,UAAU;gBACrB,OAAOM,QAAQS,UAAU,CAAC;oBACxBD,MAAMb,OAAOa,IAAI;oBACjBE,gBAAgB;oBAChBX;oBACAY,gBAAgB;oBAChBd;gBACF;YACF;YAEA,IAAIH,SAAS,gBAAgBD,IAAI;gBAC/B,IAAI,OAAOc,UAAU,UAAU;oBAC7B,MAAMK,eAAe,MAAMZ,QAAQa,IAAI,CAAC;wBACtCC,YAAYnB,OAAOa,IAAI;wBACvBO,OAAO;wBACPL,gBAAgB;wBAChBM,OAAO;wBACPjB;wBACAY,gBAAgB;wBAChBM,YAAY;wBACZpB;wBACAU,OAAO;4BACL,GAAGA,KAAK;4BACRW,KAAK;mCACCX,MAAMW,GAAG,IAAI,EAAE;gCACnB;oCACEzB,IAAI;wCACF0B,QAAQ1B;oCACV;gCACF;6BACD;wBACH;oBACF;oBAEA,OAAOmB,cAAcQ,MAAM,CAAC,EAAE,IAAIC;gBACpC;gBAEA,OAAOrB,QAAQsB,QAAQ,CAAC;oBACtB7B;oBACAqB,YAAYnB,OAAOa,IAAI;oBACvBO,OAAO;oBACPL,gBAAgB;oBAChBX;oBACAY,gBAAgB;oBAChBd;gBACF;YACF;QACF;QAEA,OAAOwB;IACT;IAEA,MAAME,sBAA2C,OAAO,EACtDC,MAAM,EACNC,WAAW,EACXC,eAAe,KAAK,EACpBC,SAAS,EACTC,WAAW,EACZ;QACC,MAAMC,kBAAkBD;QAExB,IAAIH,gBAAgB,WAAWpB,qBAAqBgB,WAAW;YAC7D,uFAAuF;YACvFhB,mBAAmBC,eAAewB,IAAI,CAAC,CAACC;gBACtC1B,mBAAmB0B;YACrB;QACF;QACA,gFAAgF;QAChF,MAAM1B;QAEN,sEAAsE;QACtE,MAAM2B,eAAe,MAAMR,OAAO;YAAE/B;YAAIK;YAAMiC,KAAK1B;YAAkBR;QAAI;QAEzE,IAAI,OAAOmC,iBAAiB,YAAY,CAACN,cAAc;YACrDG,eAAe,CAACF,UAAU,GAAG;gBAC3BM,YACExC,MAAMC,SAAS,WAAW,CAAC,CAAE,MAAMY,aAAa;oBAAEC,OAAOyB;gBAAa,KAAM;gBAC9EzB,OAAOyB;YACT;QACF,OAAO,IAAIH,eAAe,CAACF,UAAU,EAAEM,eAAe,OAAO;YAC3DJ,eAAe,CAACF,UAAU,GAAG;gBAC3BM,YAAY,CAAC,CAACD;YAChB;QACF;IACF;IAEA,MAAME,uBAAuB,OAAO,EAClCC,gBAAgB,EAChB/B,MAAM,EACNuB,SAAS,EACTC,WAAW,EAMZ;QACC,MAAMC,kBAAkBD,YAAYxB,MAAM;QAE1C,MAAMgC,QAAQC,GAAG,CACfjC,OAAOkC,GAAG,CAAC,OAAOC;YAChB,IAAI,UAAUA,SAASA,MAAMC,IAAI,EAAE;gBACjC,IAAI,CAACX,eAAe,CAACU,MAAMC,IAAI,CAAC,EAAEX,eAAe,CAACU,MAAMC,IAAI,CAAC,GAAG,CAAC;gBAEjE,IAAI,YAAYD,SAASA,MAAMf,MAAM,IAAI,OAAOe,MAAMf,MAAM,CAACG,UAAU,KAAK,YAAY;oBACtF,MAAMJ,oBAAoB;wBACxBC,QAAQe,MAAMf,MAAM,CAACG,UAAU;wBAC/BF,aAAa;wBACbC,cAAc;wBACdC;wBACAC,aAAaC,eAAe,CAACU,MAAMC,IAAI,CAAC;oBAC1C;gBACF,OAAO;oBACLX,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACb,UAAU,GAAG;wBACvCM,YAAYL,WAAW,CAACD,UAAU,EAAEM;oBACtC;gBACF;gBAEA,IAAI,YAAYM,SAASA,MAAMnC,MAAM,EAAE;oBACrC,IAAI,CAACyB,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACpC,MAAM,EAAEyB,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACpC,MAAM,GAAG,CAAC;oBAE/E,MAAM8B,qBAAqB;wBACzBC;wBACA/B,QAAQmC,MAAMnC,MAAM;wBACpBuB;wBACAC,aAAaC,eAAe,CAACU,MAAMC,IAAI,CAAC;oBAC1C;gBACF;gBAEA,IAAI,YAAYD,SAASA,OAAOE,QAAQ;oBACtC,IAAI,CAACZ,eAAe,CAACU,MAAMC,IAAI,CAAC,EAAEC,QAAQZ,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,GAAG,CAAC;oBAEhF,MAAML,QAAQC,GAAG,CACfE,MAAME,MAAM,CAACH,GAAG,CAAC,OAAOI;wBACtB,IAAI,CAACb,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,EAAE,CAACC,MAAMlC,IAAI,CAAC,EAAE;4BACrDqB,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,CAACC,MAAMlC,IAAI,CAAC,GAAG;gCAC/CJ,QAAQ,CAAC;gCACT,CAACuB,UAAU,EAAE;oCAAEM,YAAYE;gCAAiB;4BAC9C;wBACF,OAAO,IAAI,CAACN,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,CAACC,MAAMlC,IAAI,CAAC,CAACmB,UAAU,EAAE;4BACrEE,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,CAACC,MAAMlC,IAAI,CAAC,CAACmB,UAAU,GAAG;gCAC1DM,YAAYE;4BACd;wBACF;wBAEA,MAAMD,qBAAqB;4BACzBC;4BACA/B,QAAQsC,MAAMtC,MAAM;4BACpBuB;4BACAC,aAAaC,eAAe,CAACU,MAAMC,IAAI,CAAC,CAACC,MAAM,CAACC,MAAMlC,IAAI,CAAC;wBAC7D;oBACF;gBAEJ;YACF,OAAO,IAAI,YAAY+B,SAASA,MAAMnC,MAAM,EAAE;gBAC5C,MAAM8B,qBAAqB;oBACzBC;oBACA/B,QAAQmC,MAAMnC,MAAM;oBACpBuB;oBACAC;gBACF;YACF,OAAO,IAAIW,MAAM7C,IAAI,KAAK,QAAQ;gBAChC,MAAM0C,QAAQC,GAAG,CACfE,MAAMI,IAAI,CAACL,GAAG,CAAC,OAAOM;oBACpB,IAAItD,WAAWsD,MAAM;wBACnB,IAAI,CAACf,eAAe,CAACe,IAAIJ,IAAI,CAAC,EAAE;4BAC9BX,eAAe,CAACe,IAAIJ,IAAI,CAAC,GAAG;gCAC1BpC,QAAQ,CAAC;gCACT,CAACuB,UAAU,EAAE;oCAAEM,YAAYE;gCAAiB;4BAC9C;wBACF,OAAO,IAAI,CAACN,eAAe,CAACe,IAAIJ,IAAI,CAAC,CAACb,UAAU,EAAE;4BAChDE,eAAe,CAACe,IAAIJ,IAAI,CAAC,CAACb,UAAU,GAAG;gCAAEM,YAAYE;4BAAiB;wBACxE;wBACA,MAAMD,qBAAqB;4BACzBC;4BACA/B,QAAQwC,IAAIxC,MAAM;4BAClBuB;4BACAC,aAAaC,eAAe,CAACe,IAAIJ,IAAI,CAAC;wBACxC;oBACF,OAAO;wBACL,MAAMN,qBAAqB;4BACzBC;4BACA/B,QAAQwC,IAAIxC,MAAM;4BAClBuB;4BACAC;wBACF;oBACF;gBACF;YAEJ;QACF;IAEJ;IAEA,MAAMhC,WAAWiD,MAAM,CAAC,OAAOC,gBAAgBnB;QAC7C,MAAMmB;QAEN,IAAIC;QAEJ,IAAI,OAAOpD,OAAO6B,MAAM,CAACG,UAAU,KAAK,YAAY;YAClDoB,sBAAsBxB,oBAAoB;gBACxCC,QAAQ7B,OAAO6B,MAAM,CAACG,UAAU;gBAChCF,aAAa;gBACbE;gBACAC,aAAazB;YACf;QACF,OAAO;YACLA,QAAQ,CAACwB,UAAU,GAAG;gBACpBM,YAAY/B;YACd;QACF;QAEA,MAAM6C;QAEN,MAAMb,qBAAqB;YACzBC,kBAAkBhC,QAAQ,CAACwB,UAAU,CAACM,UAAU;YAChD7B,QAAQT,OAAOS,MAAM;YACrBuB;YACAC,aAAazB;QACf;IACF,GAAGiC,QAAQY,OAAO;IAElB,OAAO7C;AACT"}
1
+ {"version":3,"sources":["../../src/utilities/getEntityPolicies.ts"],"sourcesContent":["import type { CollectionPermission, GlobalPermission } from '../auth/types.js'\nimport type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { Access } from '../config/types.js'\nimport type { Field, FieldAccess } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { AllOperations, Document, PayloadRequest, Where } from '../types/index.js'\n\nimport { tabHasName } from '../fields/config/types.js'\n\ntype Args = {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n id?: number | string\n operations: AllOperations[]\n req: PayloadRequest\n type: 'collection' | 'global'\n}\n\ntype ReturnType<T extends Args> = T['type'] extends 'global'\n ? GlobalPermission\n : CollectionPermission\n\ntype CreateAccessPromise = (args: {\n access: Access | FieldAccess\n accessLevel: 'entity' | 'field'\n disableWhere?: boolean\n operation: AllOperations\n policiesObj: {\n [key: string]: any\n }\n}) => Promise<void>\n\nexport async function getEntityPolicies<T extends Args>(args: T): Promise<ReturnType<T>> {\n const { id, type, entity, operations, req } = args\n const { data, locale, payload, user } = req\n const isLoggedIn = !!user\n\n const policies = {\n fields: {},\n } as ReturnType<T>\n\n let docBeingAccessed\n\n async function getEntityDoc({ where }: { where?: Where } = {}): Promise<Document & TypeWithID> {\n if (entity.slug) {\n if (type === 'global') {\n return payload.findGlobal({\n slug: entity.slug,\n fallbackLocale: null,\n locale,\n overrideAccess: true,\n req,\n })\n }\n\n if (type === 'collection' && id) {\n if (typeof where === 'object') {\n const paginatedRes = await payload.find({\n collection: entity.slug,\n depth: 0,\n fallbackLocale: null,\n limit: 1,\n locale,\n overrideAccess: true,\n pagination: false,\n req,\n where: {\n ...where,\n and: [\n ...(where.and || []),\n {\n id: {\n equals: id,\n },\n },\n ],\n },\n })\n\n return paginatedRes?.docs?.[0] || undefined\n }\n\n return payload.findByID({\n id,\n collection: entity.slug,\n depth: 0,\n fallbackLocale: null,\n locale,\n overrideAccess: true,\n req,\n })\n }\n }\n\n return undefined\n }\n\n const createAccessPromise: CreateAccessPromise = async ({\n access,\n accessLevel,\n disableWhere = false,\n operation,\n policiesObj,\n }) => {\n const mutablePolicies = policiesObj\n\n if (accessLevel === 'field' && docBeingAccessed === undefined) {\n // assign docBeingAccessed first as the promise to avoid multiple calls to getEntityDoc\n docBeingAccessed = getEntityDoc().then((doc) => {\n docBeingAccessed = doc\n })\n }\n // awaiting the promise to ensure docBeingAccessed is assigned before it is used\n await docBeingAccessed\n\n // https://payloadcms.slack.com/archives/C048Z9C2BEX/p1702054928343769\n const accessResult = await access({ id, data, doc: docBeingAccessed, req })\n\n if (typeof accessResult === 'object' && !disableWhere) {\n mutablePolicies[operation] = {\n permission:\n id || type === 'global' ? !!(await getEntityDoc({ where: accessResult })) : true,\n where: accessResult,\n }\n } else if (mutablePolicies[operation]?.permission !== false) {\n mutablePolicies[operation] = {\n permission: !!accessResult,\n }\n }\n }\n\n const executeFieldPolicies = async ({\n entityPermission,\n fields,\n operation,\n policiesObj,\n }: {\n entityPermission\n fields: Field[]\n operation: AllOperations\n policiesObj\n }) => {\n const mutablePolicies = policiesObj.fields\n\n await Promise.all(\n fields.map(async (field) => {\n if ('name' in field && field.name) {\n if (!mutablePolicies[field.name]) {\n mutablePolicies[field.name] = {}\n }\n\n if ('access' in field && field.access && typeof field.access[operation] === 'function') {\n await createAccessPromise({\n access: field.access[operation],\n accessLevel: 'field',\n disableWhere: true,\n operation,\n policiesObj: mutablePolicies[field.name],\n })\n } else {\n mutablePolicies[field.name][operation] = {\n permission: policiesObj[operation]?.permission,\n }\n }\n\n if ('fields' in field && field.fields) {\n if (!mutablePolicies[field.name].fields) {\n mutablePolicies[field.name].fields = {}\n }\n\n await executeFieldPolicies({\n entityPermission,\n fields: field.fields,\n operation,\n policiesObj: mutablePolicies[field.name],\n })\n }\n\n if ('blocks' in field && field?.blocks) {\n if (!mutablePolicies[field.name]?.blocks) {\n mutablePolicies[field.name].blocks = {}\n }\n\n await Promise.all(\n field.blocks.map(async (block) => {\n if (!mutablePolicies[field.name].blocks?.[block.slug]) {\n mutablePolicies[field.name].blocks[block.slug] = {\n fields: {},\n [operation]: { permission: entityPermission },\n }\n } else if (!mutablePolicies[field.name].blocks[block.slug][operation]) {\n mutablePolicies[field.name].blocks[block.slug][operation] = {\n permission: entityPermission,\n }\n }\n\n await executeFieldPolicies({\n entityPermission,\n fields: block.fields,\n operation,\n policiesObj: mutablePolicies[field.name].blocks[block.slug],\n })\n }),\n )\n }\n } else if ('fields' in field && field.fields) {\n await executeFieldPolicies({\n entityPermission,\n fields: field.fields,\n operation,\n policiesObj,\n })\n } else if (field.type === 'tabs') {\n await Promise.all(\n field.tabs.map(async (tab) => {\n if (tabHasName(tab)) {\n if (!mutablePolicies[tab.name]) {\n mutablePolicies[tab.name] = {\n fields: {},\n [operation]: { permission: entityPermission },\n }\n } else if (!mutablePolicies[tab.name][operation]) {\n mutablePolicies[tab.name][operation] = { permission: entityPermission }\n }\n await executeFieldPolicies({\n entityPermission,\n fields: tab.fields,\n operation,\n policiesObj: mutablePolicies[tab.name],\n })\n } else {\n await executeFieldPolicies({\n entityPermission,\n fields: tab.fields,\n operation,\n policiesObj,\n })\n }\n }),\n )\n }\n }),\n )\n }\n\n await operations.reduce(async (priorOperation, operation) => {\n await priorOperation\n\n let entityAccessPromise: Promise<void>\n\n if (typeof entity.access[operation] === 'function') {\n entityAccessPromise = createAccessPromise({\n access: entity.access[operation],\n accessLevel: 'entity',\n operation,\n policiesObj: policies,\n })\n } else {\n policies[operation] = {\n permission: isLoggedIn,\n }\n }\n\n await entityAccessPromise\n\n await executeFieldPolicies({\n entityPermission: policies[operation].permission,\n fields: entity.fields,\n operation,\n policiesObj: policies,\n })\n }, Promise.resolve())\n\n return policies\n}\n"],"names":["tabHasName","getEntityPolicies","args","id","type","entity","operations","req","data","locale","payload","user","isLoggedIn","policies","fields","docBeingAccessed","getEntityDoc","where","slug","findGlobal","fallbackLocale","overrideAccess","paginatedRes","find","collection","depth","limit","pagination","and","equals","docs","undefined","findByID","createAccessPromise","access","accessLevel","disableWhere","operation","policiesObj","mutablePolicies","then","doc","accessResult","permission","executeFieldPolicies","entityPermission","Promise","all","map","field","name","blocks","block","tabs","tab","reduce","priorOperation","entityAccessPromise","resolve"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getObjectDotNotation.d.ts","sourceRoot":"","sources":["../../src/utilities/getObjectDotNotation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,GAAI,CAAC,OAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACtB,MAAM,iBACG,CAAC,KACf,CAIF,CAAA"}
1
+ {"version":3,"file":"getObjectDotNotation.d.ts","sourceRoot":"","sources":["../../src/utilities/getObjectDotNotation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,GAAI,CAAC,OAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACtB,MAAM,iBACG,CAAC,KACf,CAMF,CAAA"}
@@ -1,5 +1,7 @@
1
1
  export const getObjectDotNotation = (obj, path, defaultValue)=>{
2
- if (!path || !obj) return defaultValue;
2
+ if (!path || !obj) {
3
+ return defaultValue;
4
+ }
3
5
  const result = path.split('.').reduce((o, i)=>o?.[i], obj);
4
6
  return result === undefined ? defaultValue : result;
5
7
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getObjectDotNotation.ts"],"sourcesContent":["export const getObjectDotNotation = <T>(\n obj: Record<string, unknown>,\n path: string,\n defaultValue?: T,\n): T => {\n if (!path || !obj) return defaultValue\n const result = path.split('.').reduce((o, i) => o?.[i], obj)\n return result === undefined ? defaultValue : (result as T)\n}\n"],"names":["getObjectDotNotation","obj","path","defaultValue","result","split","reduce","o","i","undefined"],"mappings":"AAAA,OAAO,MAAMA,uBAAuB,CAClCC,KACAC,MACAC;IAEA,IAAI,CAACD,QAAQ,CAACD,KAAK,OAAOE;IAC1B,MAAMC,SAASF,KAAKG,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,GAAGC,IAAMD,GAAG,CAACC,EAAE,EAAEP;IACxD,OAAOG,WAAWK,YAAYN,eAAgBC;AAChD,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/getObjectDotNotation.ts"],"sourcesContent":["export const getObjectDotNotation = <T>(\n obj: Record<string, unknown>,\n path: string,\n defaultValue?: T,\n): T => {\n if (!path || !obj) {\n return defaultValue\n }\n const result = path.split('.').reduce((o, i) => o?.[i], obj)\n return result === undefined ? defaultValue : (result as T)\n}\n"],"names":["getObjectDotNotation","obj","path","defaultValue","result","split","reduce","o","i","undefined"],"mappings":"AAAA,OAAO,MAAMA,uBAAuB,CAClCC,KACAC,MACAC;IAEA,IAAI,CAACD,QAAQ,CAACD,KAAK;QACjB,OAAOE;IACT;IACA,MAAMC,SAASF,KAAKG,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,GAAGC,IAAMD,GAAG,CAACC,EAAE,EAAEP;IACxD,OAAOG,WAAWK,YAAYN,eAAgBC;AAChD,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSiblingData.d.ts","sourceRoot":"","sources":["../../src/utilities/getSiblingData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAK9C,eAAO,MAAM,cAAc,WAAY,SAAS,QAAQ,MAAM,KAAG,IAmChE,CAAA"}
1
+ {"version":3,"file":"getSiblingData.d.ts","sourceRoot":"","sources":["../../src/utilities/getSiblingData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAK9C,eAAO,MAAM,cAAc,WAAY,SAAS,QAAQ,MAAM,KAAG,IAqChE,CAAA"}
@@ -1,7 +1,9 @@
1
1
  import { reduceFieldsToValues } from './reduceFieldsToValues.js';
2
2
  import { unflatten } from './unflatten.js';
3
3
  export const getSiblingData = (fields, path)=>{
4
- if (!fields) return null;
4
+ if (!fields) {
5
+ return null;
6
+ }
5
7
  if (path.indexOf('.') === -1) {
6
8
  return reduceFieldsToValues(fields, true);
7
9
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getSiblingData.ts"],"sourcesContent":["import type { Data, FormState } from 'payload'\n\nimport { reduceFieldsToValues } from './reduceFieldsToValues.js'\nimport { unflatten } from './unflatten.js'\n\nexport const getSiblingData = (fields: FormState, path: string): Data => {\n if (!fields) return null\n\n if (path.indexOf('.') === -1) {\n return reduceFieldsToValues(fields, true)\n }\n\n const siblingFields = {}\n\n // Determine if the last segment of the path is an array-based row\n const pathSegments = path.split('.')\n const lastSegment = pathSegments[pathSegments.length - 1]\n const lastSegmentIsRowIndex = !Number.isNaN(Number(lastSegment))\n\n let parentFieldPath: string\n\n if (lastSegmentIsRowIndex) {\n // If the last segment is a row index,\n // the sibling data is that row's contents\n // so create a parent field path that will\n // retrieve all contents of that row index only\n parentFieldPath = `${path}.`\n } else {\n // Otherwise, the last path segment is a field name\n // and it should be removed\n parentFieldPath = path.substring(0, path.lastIndexOf('.') + 1)\n }\n\n Object.keys(fields).forEach((fieldKey) => {\n if (!fields[fieldKey].disableFormData && fieldKey.indexOf(parentFieldPath) === 0) {\n siblingFields[fieldKey.replace(parentFieldPath, '')] = fields[fieldKey].value\n }\n })\n\n return unflatten(siblingFields)\n}\n"],"names":["reduceFieldsToValues","unflatten","getSiblingData","fields","path","indexOf","siblingFields","pathSegments","split","lastSegment","length","lastSegmentIsRowIndex","Number","isNaN","parentFieldPath","substring","lastIndexOf","Object","keys","forEach","fieldKey","disableFormData","replace","value"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,SAAS,QAAQ,iBAAgB;AAE1C,OAAO,MAAMC,iBAAiB,CAACC,QAAmBC;IAChD,IAAI,CAACD,QAAQ,OAAO;IAEpB,IAAIC,KAAKC,OAAO,CAAC,SAAS,CAAC,GAAG;QAC5B,OAAOL,qBAAqBG,QAAQ;IACtC;IAEA,MAAMG,gBAAgB,CAAC;IAEvB,kEAAkE;IAClE,MAAMC,eAAeH,KAAKI,KAAK,CAAC;IAChC,MAAMC,cAAcF,YAAY,CAACA,aAAaG,MAAM,GAAG,EAAE;IACzD,MAAMC,wBAAwB,CAACC,OAAOC,KAAK,CAACD,OAAOH;IAEnD,IAAIK;IAEJ,IAAIH,uBAAuB;QACzB,sCAAsC;QACtC,0CAA0C;QAC1C,0CAA0C;QAC1C,+CAA+C;QAC/CG,kBAAkB,CAAC,EAAEV,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,mDAAmD;QACnD,2BAA2B;QAC3BU,kBAAkBV,KAAKW,SAAS,CAAC,GAAGX,KAAKY,WAAW,CAAC,OAAO;IAC9D;IAEAC,OAAOC,IAAI,CAACf,QAAQgB,OAAO,CAAC,CAACC;QAC3B,IAAI,CAACjB,MAAM,CAACiB,SAAS,CAACC,eAAe,IAAID,SAASf,OAAO,CAACS,qBAAqB,GAAG;YAChFR,aAAa,CAACc,SAASE,OAAO,CAACR,iBAAiB,IAAI,GAAGX,MAAM,CAACiB,SAAS,CAACG,KAAK;QAC/E;IACF;IAEA,OAAOtB,UAAUK;AACnB,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/getSiblingData.ts"],"sourcesContent":["import type { Data, FormState } from 'payload'\n\nimport { reduceFieldsToValues } from './reduceFieldsToValues.js'\nimport { unflatten } from './unflatten.js'\n\nexport const getSiblingData = (fields: FormState, path: string): Data => {\n if (!fields) {\n return null\n }\n\n if (path.indexOf('.') === -1) {\n return reduceFieldsToValues(fields, true)\n }\n\n const siblingFields = {}\n\n // Determine if the last segment of the path is an array-based row\n const pathSegments = path.split('.')\n const lastSegment = pathSegments[pathSegments.length - 1]\n const lastSegmentIsRowIndex = !Number.isNaN(Number(lastSegment))\n\n let parentFieldPath: string\n\n if (lastSegmentIsRowIndex) {\n // If the last segment is a row index,\n // the sibling data is that row's contents\n // so create a parent field path that will\n // retrieve all contents of that row index only\n parentFieldPath = `${path}.`\n } else {\n // Otherwise, the last path segment is a field name\n // and it should be removed\n parentFieldPath = path.substring(0, path.lastIndexOf('.') + 1)\n }\n\n Object.keys(fields).forEach((fieldKey) => {\n if (!fields[fieldKey].disableFormData && fieldKey.indexOf(parentFieldPath) === 0) {\n siblingFields[fieldKey.replace(parentFieldPath, '')] = fields[fieldKey].value\n }\n })\n\n return unflatten(siblingFields)\n}\n"],"names":["reduceFieldsToValues","unflatten","getSiblingData","fields","path","indexOf","siblingFields","pathSegments","split","lastSegment","length","lastSegmentIsRowIndex","Number","isNaN","parentFieldPath","substring","lastIndexOf","Object","keys","forEach","fieldKey","disableFormData","replace","value"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,SAAS,QAAQ,iBAAgB;AAE1C,OAAO,MAAMC,iBAAiB,CAACC,QAAmBC;IAChD,IAAI,CAACD,QAAQ;QACX,OAAO;IACT;IAEA,IAAIC,KAAKC,OAAO,CAAC,SAAS,CAAC,GAAG;QAC5B,OAAOL,qBAAqBG,QAAQ;IACtC;IAEA,MAAMG,gBAAgB,CAAC;IAEvB,kEAAkE;IAClE,MAAMC,eAAeH,KAAKI,KAAK,CAAC;IAChC,MAAMC,cAAcF,YAAY,CAACA,aAAaG,MAAM,GAAG,EAAE;IACzD,MAAMC,wBAAwB,CAACC,OAAOC,KAAK,CAACD,OAAOH;IAEnD,IAAIK;IAEJ,IAAIH,uBAAuB;QACzB,sCAAsC;QACtC,0CAA0C;QAC1C,0CAA0C;QAC1C,+CAA+C;QAC/CG,kBAAkB,CAAC,EAAEV,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,mDAAmD;QACnD,2BAA2B;QAC3BU,kBAAkBV,KAAKW,SAAS,CAAC,GAAGX,KAAKY,WAAW,CAAC,OAAO;IAC9D;IAEAC,OAAOC,IAAI,CAACf,QAAQgB,OAAO,CAAC,CAACC;QAC3B,IAAI,CAACjB,MAAM,CAACiB,SAAS,CAACC,eAAe,IAAID,SAASf,OAAO,CAACS,qBAAqB,GAAG;YAChFR,aAAa,CAACc,SAASE,OAAO,CAACR,iBAAiB,IAAI,GAAGX,MAAM,CAACiB,SAAS,CAACG,KAAK;QAC/E;IACF;IAEA,OAAOtB,UAAUK;AACnB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"isValidID.d.ts","sourceRoot":"","sources":["../../src/utilities/isValidID.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,UACb,MAAM,GAAG,MAAM,QAChB,UAAU,GAAG,QAAQ,GAAG,MAAM,KACnC,OAcF,CAAA"}
1
+ {"version":3,"file":"isValidID.d.ts","sourceRoot":"","sources":["../../src/utilities/isValidID.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,UACb,MAAM,GAAG,MAAM,QAChB,UAAU,GAAG,QAAQ,GAAG,MAAM,KACnC,OAgBF,CAAA"}
@@ -11,7 +11,9 @@ export const isValidID = (value, type)=>{
11
11
  }
12
12
  return false;
13
13
  }
14
- if (typeof value === 'number' && !Number.isNaN(value)) return true;
14
+ if (typeof value === 'number' && !Number.isNaN(value)) {
15
+ return true;
16
+ }
15
17
  if (type === 'ObjectID') {
16
18
  return ObjectId.isValid(String(value));
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/isValidID.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport const isValidID = (\n value: number | string,\n type: 'ObjectID' | 'number' | 'text',\n): boolean => {\n if (type === 'text' && value) {\n if (['object', 'string'].includes(typeof value)) {\n const isObjectID = ObjectId.isValid(value as string)\n return typeof value === 'string' || isObjectID\n }\n return false\n }\n\n if (typeof value === 'number' && !Number.isNaN(value)) return true\n\n if (type === 'ObjectID') {\n return ObjectId.isValid(String(value))\n }\n}\n"],"names":["ObjectIdImport","ObjectId","default","isValidID","value","type","includes","isObjectID","isValid","Number","isNaN","String"],"mappings":"AAAA,OAAOA,oBAAoB,gBAAe;AAE1C,MAAMC,WAAYD,eAAeE,OAAO,IACtCF;AAEF,OAAO,MAAMG,YAAY,CACvBC,OACAC;IAEA,IAAIA,SAAS,UAAUD,OAAO;QAC5B,IAAI;YAAC;YAAU;SAAS,CAACE,QAAQ,CAAC,OAAOF,QAAQ;YAC/C,MAAMG,aAAaN,SAASO,OAAO,CAACJ;YACpC,OAAO,OAAOA,UAAU,YAAYG;QACtC;QACA,OAAO;IACT;IAEA,IAAI,OAAOH,UAAU,YAAY,CAACK,OAAOC,KAAK,CAACN,QAAQ,OAAO;IAE9D,IAAIC,SAAS,YAAY;QACvB,OAAOJ,SAASO,OAAO,CAACG,OAAOP;IACjC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/isValidID.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport const isValidID = (\n value: number | string,\n type: 'ObjectID' | 'number' | 'text',\n): boolean => {\n if (type === 'text' && value) {\n if (['object', 'string'].includes(typeof value)) {\n const isObjectID = ObjectId.isValid(value as string)\n return typeof value === 'string' || isObjectID\n }\n return false\n }\n\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return true\n }\n\n if (type === 'ObjectID') {\n return ObjectId.isValid(String(value))\n }\n}\n"],"names":["ObjectIdImport","ObjectId","default","isValidID","value","type","includes","isObjectID","isValid","Number","isNaN","String"],"mappings":"AAAA,OAAOA,oBAAoB,gBAAe;AAE1C,MAAMC,WAAYD,eAAeE,OAAO,IACtCF;AAEF,OAAO,MAAMG,YAAY,CACvBC,OACAC;IAEA,IAAIA,SAAS,UAAUD,OAAO;QAC5B,IAAI;YAAC;YAAU;SAAS,CAACE,QAAQ,CAAC,OAAOF,QAAQ;YAC/C,MAAMG,aAAaN,SAASO,OAAO,CAACJ;YACpC,OAAO,OAAOA,UAAU,YAAYG;QACtC;QACA,OAAO;IACT;IAEA,IAAI,OAAOH,UAAU,YAAY,CAACK,OAAOC,KAAK,CAACN,QAAQ;QACrD,OAAO;IACT;IAEA,IAAIC,SAAS,YAAY;QACvB,OAAOJ,SAASO,OAAO,CAACG,OAAOP;IACjC;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldsToValues.d.ts","sourceRoot":"","sources":["../../src/utilities/reduceFieldsToValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAG9C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,WACvB,SAAS,cACL,OAAO,0BACK,OAAO,KAC9B,IAgBF,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,SAAS,CAAA;AAG9C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,WACvB,SAAS,cACL,OAAO,0BACK,OAAO,KAC9B,IAkBF,CAAA"}
@@ -7,7 +7,9 @@ import { unflatten as flatleyUnflatten } from './unflatten.js';
7
7
  *
8
8
  */ export const reduceFieldsToValues = (fields, unflatten, ignoreDisableFormData)=>{
9
9
  let data = {};
10
- if (!fields) return data;
10
+ if (!fields) {
11
+ return data;
12
+ }
11
13
  Object.keys(fields).forEach((key)=>{
12
14
  if (ignoreDisableFormData === true || !fields[key]?.disableFormData) {
13
15
  data[key] = fields[key]?.value;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/reduceFieldsToValues.ts"],"sourcesContent":["import type { Data, FormState } from 'payload'\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) return data\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,OAAO,CAAC;IAEZ,IAAI,CAACF,QAAQ,OAAOE;IAEpBC,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 'payload'\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":"AAEA,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 +1 @@
1
- {"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/utilities/timestamp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,sBAIrB,CAAA"}
1
+ {"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/utilities/timestamp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,sBAMrB,CAAA"}
@@ -1,5 +1,7 @@
1
1
  export const timestamp = (label)=>{
2
- if (!process.env.PAYLOAD_TIME) process.env.PAYLOAD_TIME = String(new Date().getTime());
2
+ if (!process.env.PAYLOAD_TIME) {
3
+ process.env.PAYLOAD_TIME = String(new Date().getTime());
4
+ }
3
5
  const now = new Date();
4
6
  console.log(`[${now.getTime() - Number(process.env.PAYLOAD_TIME)}ms] ${label}`);
5
7
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/timestamp.ts"],"sourcesContent":["export const timestamp = (label) => {\n if (!process.env.PAYLOAD_TIME) process.env.PAYLOAD_TIME = String(new Date().getTime())\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,EAAEF,QAAQC,GAAG,CAACC,YAAY,GAAGC,OAAO,IAAIC,OAAOC,OAAO;IACnF,MAAMC,MAAM,IAAIF;IAChBG,QAAQC,GAAG,CAAC,CAAC,CAAC,EAAEF,IAAID,OAAO,KAAKI,OAAOT,QAAQC,GAAG,CAACC,YAAY,EAAE,IAAI,EAAEH,MAAM,CAAC;AAChF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/timestamp.ts"],"sourcesContent":["export 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,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,MAAM,CAAC;AAChF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getQueryDraftsSort.d.ts","sourceRoot":"","sources":["../../../src/versions/drafts/getQueryDraftsSort.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,MAYjD,CAAA"}
1
+ {"version":3,"file":"getQueryDraftsSort.d.ts","sourceRoot":"","sources":["../../../src/versions/drafts/getQueryDraftsSort.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,MAcjD,CAAA"}
@@ -2,7 +2,9 @@
2
2
  * Takes the incoming sort argument and prefixes it with `versions.` and preserves any `-` prefixes for descending order
3
3
  * @param sort
4
4
  */ export const getQueryDraftsSort = (sort)=>{
5
- if (!sort) return sort;
5
+ if (!sort) {
6
+ return sort;
7
+ }
6
8
  let direction = '';
7
9
  let orderBy = sort;
8
10
  if (sort[0] === '-') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/versions/drafts/getQueryDraftsSort.ts"],"sourcesContent":["/**\n * Takes the incoming sort argument and prefixes it with `versions.` and preserves any `-` prefixes for descending order\n * @param sort\n */\nexport const getQueryDraftsSort = (sort: string): string => {\n if (!sort) return sort\n\n let direction = ''\n let orderBy = sort\n\n if (sort[0] === '-') {\n direction = '-'\n orderBy = sort.substring(1)\n }\n\n return `${direction}version.${orderBy}`\n}\n"],"names":["getQueryDraftsSort","sort","direction","orderBy","substring"],"mappings":"AAAA;;;CAGC,GACD,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAI,CAACA,MAAM,OAAOA;IAElB,IAAIC,YAAY;IAChB,IAAIC,UAAUF;IAEd,IAAIA,IAAI,CAAC,EAAE,KAAK,KAAK;QACnBC,YAAY;QACZC,UAAUF,KAAKG,SAAS,CAAC;IAC3B;IAEA,OAAO,CAAC,EAAEF,UAAU,QAAQ,EAAEC,QAAQ,CAAC;AACzC,EAAC"}
1
+ {"version":3,"sources":["../../../src/versions/drafts/getQueryDraftsSort.ts"],"sourcesContent":["/**\n * Takes the incoming sort argument and prefixes it with `versions.` and preserves any `-` prefixes for descending order\n * @param sort\n */\nexport const getQueryDraftsSort = (sort: string): string => {\n if (!sort) {\n return sort\n }\n\n let direction = ''\n let orderBy = sort\n\n if (sort[0] === '-') {\n direction = '-'\n orderBy = sort.substring(1)\n }\n\n return `${direction}version.${orderBy}`\n}\n"],"names":["getQueryDraftsSort","sort","direction","orderBy","substring"],"mappings":"AAAA;;;CAGC,GACD,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAI,CAACA,MAAM;QACT,OAAOA;IACT;IAEA,IAAIC,YAAY;IAChB,IAAIC,UAAUF;IAEd,IAAIA,IAAI,CAAC,EAAE,KAAK,KAAK;QACnBC,YAAY;QACZC,UAAUF,KAAKG,SAAS,CAAC;IAC3B;IAEA,OAAO,CAAC,EAAEF,UAAU,QAAQ,EAAEC,QAAQ,CAAC;AACzC,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAMvD,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,GAAG,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,WAAW,oFASrB,IAAI,KAAG,OAAO,CAAC,UAAU,CAmI3B,CAAA"}
1
+ {"version":3,"file":"saveVersion.d.ts","sourceRoot":"","sources":["../../src/versions/saveVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAMvD,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,cAAc,EAAE,GAAG,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,WAAW,oFASrB,IAAI,KAAG,OAAO,CAAC,UAAU,CA4I3B,CAAA"}
@@ -6,8 +6,12 @@ export const saveVersion = async ({ id, autosave, collection, docWithLocales: do
6
6
  let createNewVersion = true;
7
7
  const now = new Date().toISOString();
8
8
  const versionData = deepCopyObjectSimple(doc);
9
- if (draft) versionData._status = 'draft';
10
- if (versionData._id) delete versionData._id;
9
+ if (draft) {
10
+ versionData._status = 'draft';
11
+ }
12
+ if (versionData._id) {
13
+ delete versionData._id;
14
+ }
11
15
  try {
12
16
  if (autosave) {
13
17
  let docs;
@@ -90,15 +94,23 @@ export const saveVersion = async ({ id, autosave, collection, docWithLocales: do
90
94
  }
91
95
  } catch (err) {
92
96
  let errorMessage;
93
- if (collection) errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`;
94
- if (global) errorMessage = `There was an error while saving a version for the global ${global.label}.`;
97
+ if (collection) {
98
+ errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`;
99
+ }
100
+ if (global) {
101
+ errorMessage = `There was an error while saving a version for the global ${global.label}.`;
102
+ }
95
103
  payload.logger.error(errorMessage);
96
104
  payload.logger.error(err);
97
105
  return;
98
106
  }
99
107
  let max = 100;
100
- if (collection && typeof collection.versions.maxPerDoc === 'number') max = collection.versions.maxPerDoc;
101
- if (global && typeof global.versions.max === 'number') max = global.versions.max;
108
+ if (collection && typeof collection.versions.maxPerDoc === 'number') {
109
+ max = collection.versions.maxPerDoc;
110
+ }
111
+ if (global && typeof global.versions.max === 'number') {
112
+ max = global.versions.max;
113
+ }
102
114
  if (createNewVersion && max > 0) {
103
115
  await enforceMaxVersions({
104
116
  id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport sanitizeInternalFields from '../utilities/sanitizeInternalFields.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\n\ntype Args = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: any\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n req?: PayloadRequest\n}\n\nexport const saveVersion = async ({\n id,\n autosave,\n collection,\n docWithLocales: doc,\n draft,\n global,\n payload,\n req,\n}: Args): Promise<TypeWithID> => {\n let result\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData = deepCopyObjectSimple(doc)\n if (draft) versionData._status = 'draft'\n if (versionData._id) delete versionData._id\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n if (collection) {\n ;({ docs } = await payload.db.findVersions({\n ...findVersionArgs,\n collection: collection.slug,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions({\n ...findVersionArgs,\n global: global.slug,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion?.autosave === true) {\n createNewVersion = false\n\n const data: Record<string, unknown> = {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n version: versionData,\n }\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: data as TypeWithID,\n }\n\n if (collection) {\n result = await payload.db.updateVersion({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion({\n ...updateVersionArgs,\n global: global.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n if (collection) {\n result = await payload.db.createVersion({\n autosave: Boolean(autosave),\n collectionSlug: collection.slug,\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n\n if (global) {\n result = await payload.db.createGlobalVersion({\n autosave: Boolean(autosave),\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n globalSlug: global.slug,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n }\n } catch (err) {\n let errorMessage: string\n\n if (collection)\n errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`\n if (global)\n errorMessage = `There was an error while saving a version for the global ${global.label}.`\n payload.logger.error(errorMessage)\n payload.logger.error(err)\n return\n }\n\n let max = 100\n\n if (collection && typeof collection.versions.maxPerDoc === 'number')\n max = collection.versions.maxPerDoc\n if (global && typeof global.versions.max === 'number') max = global.versions.max\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n\n let createdVersion = result.version\n createdVersion.createdAt = result.createdAt\n createdVersion.updatedAt = result.updatedAt\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = result.parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","sanitizeInternalFields","enforceMaxVersions","saveVersion","id","autosave","collection","docWithLocales","doc","draft","global","payload","req","result","createNewVersion","now","Date","toISOString","versionData","_status","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","data","createdAt","updatedAt","version","updateVersionArgs","updateVersion","updateGlobalVersion","createVersion","Boolean","collectionSlug","undefined","createGlobalVersion","globalSlug","err","errorMessage","labels","singular","label","logger","error","max","versions","maxPerDoc","createdVersion"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport sanitizeInternalFields from '../utilities/sanitizeInternalFields.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\n\ntype Args = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: any\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n req?: PayloadRequest\n}\n\nexport const saveVersion = async ({\n id,\n autosave,\n collection,\n docWithLocales: doc,\n draft,\n global,\n payload,\n req,\n}: Args): Promise<TypeWithID> => {\n let result\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData = deepCopyObjectSimple(doc)\n if (draft) {\n versionData._status = 'draft'\n }\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n if (collection) {\n ;({ docs } = await payload.db.findVersions({\n ...findVersionArgs,\n collection: collection.slug,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions({\n ...findVersionArgs,\n global: global.slug,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion?.autosave === true) {\n createNewVersion = false\n\n const data: Record<string, unknown> = {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n version: versionData,\n }\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: data as TypeWithID,\n }\n\n if (collection) {\n result = await payload.db.updateVersion({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion({\n ...updateVersionArgs,\n global: global.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n if (collection) {\n result = await payload.db.createVersion({\n autosave: Boolean(autosave),\n collectionSlug: collection.slug,\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n\n if (global) {\n result = await payload.db.createGlobalVersion({\n autosave: Boolean(autosave),\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n globalSlug: global.slug,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n }\n } catch (err) {\n let errorMessage: string\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${global.label}.`\n }\n payload.logger.error(errorMessage)\n payload.logger.error(err)\n return\n }\n\n let max = 100\n\n if (collection && typeof collection.versions.maxPerDoc === 'number') {\n max = collection.versions.maxPerDoc\n }\n if (global && typeof global.versions.max === 'number') {\n max = global.versions.max\n }\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n\n let createdVersion = result.version\n createdVersion.createdAt = result.createdAt\n createdVersion.updatedAt = result.updatedAt\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = result.parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","sanitizeInternalFields","enforceMaxVersions","saveVersion","id","autosave","collection","docWithLocales","doc","draft","global","payload","req","result","createNewVersion","now","Date","toISOString","versionData","_status","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","data","createdAt","updatedAt","version","updateVersionArgs","updateVersion","updateGlobalVersion","createVersion","Boolean","collectionSlug","undefined","createGlobalVersion","globalSlug","err","errorMessage","labels","singular","label","logger","error","max","versions","maxPerDoc","createdVersion"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.0.0-beta.95",
3
+ "version": "3.0.0-beta.96",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -71,7 +71,9 @@
71
71
  "bin.js"
72
72
  ],
73
73
  "dependencies": {
74
+ "@monaco-editor/react": "4.6.0",
74
75
  "@next/env": "^15.0.0-canary.104",
76
+ "@types/busboy": "1.5.4",
75
77
  "ajv": "8.14.0",
76
78
  "bson-objectid": "2.0.4",
77
79
  "ci-info": "^4.0.0",
@@ -83,10 +85,9 @@
83
85
  "get-tsconfig": "^4.7.2",
84
86
  "http-status": "1.6.2",
85
87
  "image-size": "^1.1.1",
86
- "json-schema-to-typescript": "11.0.3",
88
+ "json-schema-to-typescript": "15.0.1",
87
89
  "jsonwebtoken": "9.0.1",
88
90
  "minimist": "1.2.8",
89
- "monaco-editor": "0.38.0",
90
91
  "pino": "9.3.1",
91
92
  "pino-pretty": "11.2.1",
92
93
  "pluralize": "8.0.0",
@@ -95,12 +96,10 @@
95
96
  "ts-essentials": "7.0.3",
96
97
  "tsx": "4.17.0",
97
98
  "uuid": "10.0.0",
98
- "@payloadcms/translations": "3.0.0-beta.95"
99
+ "@payloadcms/translations": "3.0.0-beta.96"
99
100
  },
100
101
  "devDependencies": {
101
102
  "@hyrious/esbuild-plugin-commonjs": "^0.2.4",
102
- "@monaco-editor/react": "4.5.1",
103
- "@types/express-fileupload": "1.4.1",
104
103
  "@types/json-schema": "7.0.15",
105
104
  "@types/jsonwebtoken": "8.5.9",
106
105
  "@types/minimist": "1.2.2",
@@ -133,8 +132,8 @@
133
132
  "clean": "rimraf {dist,*.tsbuildinfo}",
134
133
  "clean:cache": "rimraf node_modules/.cache",
135
134
  "copyfiles": "copyfiles -u 1 \"src/**/*.{html,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
136
- "fix": "eslint \"src/**/*.ts\" --fix",
137
- "lint": "eslint \"src/**/*.ts\"",
135
+ "lint": "eslint .",
136
+ "lint:fix": "eslint . --fix",
138
137
  "pretest": "pnpm build"
139
138
  }
140
139
  }