payload 4.0.0-internal.e16cf59 → 4.0.0-internal.e55ccef

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 (678) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +11 -0
  3. package/dist/__testing__/predefinedMigration.d.ts +4 -3
  4. package/dist/__testing__/predefinedMigration.d.ts.map +1 -1
  5. package/dist/admin/RichText.d.ts +4 -17
  6. package/dist/admin/RichText.d.ts.map +1 -1
  7. package/dist/admin/RichText.js.map +1 -1
  8. package/dist/admin/adapters/cookies.d.ts +21 -0
  9. package/dist/admin/adapters/cookies.d.ts.map +1 -0
  10. package/dist/admin/adapters/cookies.js +3 -0
  11. package/dist/admin/adapters/cookies.js.map +1 -0
  12. package/dist/admin/adapters/devReload.d.ts +9 -0
  13. package/dist/admin/adapters/devReload.d.ts.map +1 -0
  14. package/dist/admin/adapters/devReload.js +6 -0
  15. package/dist/admin/adapters/devReload.js.map +1 -0
  16. package/dist/admin/adapters/index.d.ts +7 -0
  17. package/dist/admin/adapters/index.d.ts.map +1 -0
  18. package/dist/admin/adapters/index.js +3 -0
  19. package/dist/admin/adapters/index.js.map +1 -0
  20. package/dist/admin/adapters/render.d.ts +16 -0
  21. package/dist/admin/adapters/render.d.ts.map +1 -0
  22. package/dist/admin/adapters/render.js +7 -0
  23. package/dist/admin/adapters/render.js.map +1 -0
  24. package/dist/admin/adapters/router.d.ts +64 -0
  25. package/dist/admin/adapters/router.d.ts.map +1 -0
  26. package/dist/admin/adapters/router.js +3 -0
  27. package/dist/admin/adapters/router.js.map +1 -0
  28. package/dist/admin/adapters/server.d.ts +23 -0
  29. package/dist/admin/adapters/server.d.ts.map +1 -0
  30. package/dist/admin/adapters/server.js +6 -0
  31. package/dist/admin/adapters/server.js.map +1 -0
  32. package/dist/admin/adapters/views.d.ts +36 -0
  33. package/dist/admin/adapters/views.d.ts.map +1 -0
  34. package/dist/admin/adapters/views.js +7 -0
  35. package/dist/admin/adapters/views.js.map +1 -0
  36. package/dist/admin/elements/Table.d.ts +1 -0
  37. package/dist/admin/elements/Table.d.ts.map +1 -1
  38. package/dist/admin/elements/Table.js.map +1 -1
  39. package/dist/admin/fields/Row.d.ts +2 -2
  40. package/dist/admin/fields/Row.d.ts.map +1 -1
  41. package/dist/admin/fields/Row.js.map +1 -1
  42. package/dist/admin/forms/Description.d.ts +2 -2
  43. package/dist/admin/forms/Description.d.ts.map +1 -1
  44. package/dist/admin/forms/Description.js.map +1 -1
  45. package/dist/admin/forms/Field.d.ts +10 -5
  46. package/dist/admin/forms/Field.d.ts.map +1 -1
  47. package/dist/admin/forms/Field.js.map +1 -1
  48. package/dist/admin/functions/index.d.ts +10 -1
  49. package/dist/admin/functions/index.d.ts.map +1 -1
  50. package/dist/admin/functions/index.js.map +1 -1
  51. package/dist/admin/types.d.ts +3 -2
  52. package/dist/admin/types.d.ts.map +1 -1
  53. package/dist/admin/types.js.map +1 -1
  54. package/dist/admin/views/dashboard.d.ts +7 -0
  55. package/dist/admin/views/dashboard.d.ts.map +1 -1
  56. package/dist/admin/views/dashboard.js.map +1 -1
  57. package/dist/admin/views/document.d.ts +5 -3
  58. package/dist/admin/views/document.d.ts.map +1 -1
  59. package/dist/admin/views/document.js.map +1 -1
  60. package/dist/admin/views/hierarchyList.d.ts +1 -0
  61. package/dist/admin/views/hierarchyList.d.ts.map +1 -1
  62. package/dist/admin/views/hierarchyList.js.map +1 -1
  63. package/dist/admin/views/list.d.ts +10 -1
  64. package/dist/admin/views/list.d.ts.map +1 -1
  65. package/dist/admin/views/list.js.map +1 -1
  66. package/dist/auth/baseFields/apiKey.d.ts +10 -2
  67. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  68. package/dist/auth/baseFields/apiKey.js +35 -24
  69. package/dist/auth/baseFields/apiKey.js.map +1 -1
  70. package/dist/auth/cookies.d.ts +2 -2
  71. package/dist/auth/cookies.d.ts.map +1 -1
  72. package/dist/auth/defaultAccess.d.ts +1 -1
  73. package/dist/auth/defaultAccess.d.ts.map +1 -1
  74. package/dist/auth/defaultAccess.js +1 -1
  75. package/dist/auth/defaultAccess.js.map +1 -1
  76. package/dist/auth/defaultUser.d.ts.map +1 -1
  77. package/dist/auth/defaultUser.js +2 -1
  78. package/dist/auth/defaultUser.js.map +1 -1
  79. package/dist/auth/extractJWT.d.ts +1 -1
  80. package/dist/auth/getAuthFields.js +2 -2
  81. package/dist/auth/getAuthFields.js.map +1 -1
  82. package/dist/auth/getFieldsToSign.d.ts +1 -1
  83. package/dist/auth/getLoginOptions.d.ts +1 -1
  84. package/dist/auth/operations/auth.d.ts +2 -2
  85. package/dist/auth/operations/auth.d.ts.map +1 -1
  86. package/dist/auth/operations/auth.js.map +1 -1
  87. package/dist/auth/operations/login.d.ts +2 -1
  88. package/dist/auth/operations/login.d.ts.map +1 -1
  89. package/dist/auth/operations/login.js.map +1 -1
  90. package/dist/auth/operations/me.d.ts +2 -2
  91. package/dist/auth/operations/me.d.ts.map +1 -1
  92. package/dist/auth/operations/me.js.map +1 -1
  93. package/dist/auth/operations/refresh.d.ts.map +1 -1
  94. package/dist/auth/operations/refresh.js +9 -3
  95. package/dist/auth/operations/refresh.js.map +1 -1
  96. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  97. package/dist/auth/operations/resetPassword.js.map +1 -1
  98. package/dist/auth/sendVerificationEmail.d.ts +2 -2
  99. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  100. package/dist/auth/sendVerificationEmail.js +1 -1
  101. package/dist/auth/sendVerificationEmail.js.map +1 -1
  102. package/dist/auth/sessions.d.ts +4 -5
  103. package/dist/auth/sessions.d.ts.map +1 -1
  104. package/dist/auth/sessions.js +5 -3
  105. package/dist/auth/sessions.js.map +1 -1
  106. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  107. package/dist/auth/strategies/apiKey.js +6 -17
  108. package/dist/auth/strategies/apiKey.js.map +1 -1
  109. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +2 -2
  110. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  111. package/dist/auth/strategies/local/incrementLoginAttempts.js +1 -1
  112. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  113. package/dist/auth/types.d.ts +25 -21
  114. package/dist/auth/types.d.ts.map +1 -1
  115. package/dist/auth/types.js.map +1 -1
  116. package/dist/bin/build.d.ts +49 -0
  117. package/dist/bin/build.d.ts.map +1 -0
  118. package/dist/bin/build.js +226 -0
  119. package/dist/bin/build.js.map +1 -0
  120. package/dist/bin/build.spec.js +594 -0
  121. package/dist/bin/build.spec.js.map +1 -0
  122. package/dist/bin/frameworkConventions.d.ts +8 -0
  123. package/dist/bin/frameworkConventions.d.ts.map +1 -0
  124. package/dist/bin/frameworkConventions.js +8 -0
  125. package/dist/bin/frameworkConventions.js.map +1 -0
  126. package/dist/bin/generateImportMap/index.d.ts.map +1 -1
  127. package/dist/bin/generateImportMap/index.js +8 -5
  128. package/dist/bin/generateImportMap/index.js.map +1 -1
  129. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  130. package/dist/bin/generateImportMap/iterateCollections.js +11 -0
  131. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  132. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  133. package/dist/bin/generateImportMap/iterateConfig.js +12 -0
  134. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  135. package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
  136. package/dist/bin/generateImportMap/iterateFields.js +4 -1
  137. package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
  138. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +5 -1
  139. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
  140. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +33 -18
  141. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
  142. package/dist/bin/generateTypes.d.ts +3 -2
  143. package/dist/bin/generateTypes.d.ts.map +1 -1
  144. package/dist/bin/generateTypes.js +11 -1
  145. package/dist/bin/generateTypes.js.map +1 -1
  146. package/dist/bin/index.d.ts.map +1 -1
  147. package/dist/bin/index.js +9 -0
  148. package/dist/bin/index.js.map +1 -1
  149. package/dist/bin/loadEnv.d.ts +3 -1
  150. package/dist/bin/loadEnv.d.ts.map +1 -1
  151. package/dist/bin/loadEnv.js +40 -10
  152. package/dist/bin/loadEnv.js.map +1 -1
  153. package/dist/collections/config/client.d.ts +3 -3
  154. package/dist/collections/config/client.d.ts.map +1 -1
  155. package/dist/collections/config/client.js +1 -0
  156. package/dist/collections/config/client.js.map +1 -1
  157. package/dist/collections/config/defaults.d.ts +0 -4
  158. package/dist/collections/config/defaults.d.ts.map +1 -1
  159. package/dist/collections/config/defaults.js +2 -17
  160. package/dist/collections/config/defaults.js.map +1 -1
  161. package/dist/collections/config/defaults.spec.js +47 -0
  162. package/dist/collections/config/defaults.spec.js.map +1 -0
  163. package/dist/collections/config/sanitize.d.ts +10 -1
  164. package/dist/collections/config/sanitize.d.ts.map +1 -1
  165. package/dist/collections/config/sanitize.js +1 -11
  166. package/dist/collections/config/sanitize.js.map +1 -1
  167. package/dist/collections/config/types.d.ts +13 -9
  168. package/dist/collections/config/types.d.ts.map +1 -1
  169. package/dist/collections/config/types.js.map +1 -1
  170. package/dist/collections/dataloader.d.ts +1 -1
  171. package/dist/collections/endpoints/create.d.ts.map +1 -1
  172. package/dist/collections/endpoints/create.js +0 -2
  173. package/dist/collections/endpoints/create.js.map +1 -1
  174. package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
  175. package/dist/collections/endpoints/updateByID.js +1 -2
  176. package/dist/collections/endpoints/updateByID.js.map +1 -1
  177. package/dist/collections/operations/count.d.ts.map +1 -1
  178. package/dist/collections/operations/count.js +1 -0
  179. package/dist/collections/operations/count.js.map +1 -1
  180. package/dist/collections/operations/create.d.ts +0 -1
  181. package/dist/collections/operations/create.d.ts.map +1 -1
  182. package/dist/collections/operations/create.js +15 -6
  183. package/dist/collections/operations/create.js.map +1 -1
  184. package/dist/collections/operations/delete.d.ts.map +1 -1
  185. package/dist/collections/operations/delete.js +3 -0
  186. package/dist/collections/operations/delete.js.map +1 -1
  187. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  188. package/dist/collections/operations/findDistinct.js +1 -0
  189. package/dist/collections/operations/findDistinct.js.map +1 -1
  190. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  191. package/dist/collections/operations/local/count.d.ts +3 -3
  192. package/dist/collections/operations/local/count.d.ts.map +1 -1
  193. package/dist/collections/operations/local/count.js.map +1 -1
  194. package/dist/collections/operations/local/countVersions.d.ts +3 -3
  195. package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
  196. package/dist/collections/operations/local/countVersions.js.map +1 -1
  197. package/dist/collections/operations/local/create.d.ts +3 -3
  198. package/dist/collections/operations/local/create.d.ts.map +1 -1
  199. package/dist/collections/operations/local/create.js.map +1 -1
  200. package/dist/collections/operations/local/delete.d.ts +3 -3
  201. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  202. package/dist/collections/operations/local/delete.js.map +1 -1
  203. package/dist/collections/operations/local/duplicate.d.ts +3 -3
  204. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  205. package/dist/collections/operations/local/duplicate.js.map +1 -1
  206. package/dist/collections/operations/local/find.d.ts +3 -3
  207. package/dist/collections/operations/local/find.d.ts.map +1 -1
  208. package/dist/collections/operations/local/find.js.map +1 -1
  209. package/dist/collections/operations/local/findByID.d.ts +3 -3
  210. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  211. package/dist/collections/operations/local/findByID.js.map +1 -1
  212. package/dist/collections/operations/local/findDistinct.d.ts +2 -2
  213. package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
  214. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  215. package/dist/collections/operations/local/findVersionByID.d.ts +3 -3
  216. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  217. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  218. package/dist/collections/operations/local/findVersions.d.ts +3 -3
  219. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  220. package/dist/collections/operations/local/findVersions.js.map +1 -1
  221. package/dist/collections/operations/local/restoreVersion.d.ts +3 -3
  222. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  223. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  224. package/dist/collections/operations/local/update.d.ts +7 -11
  225. package/dist/collections/operations/local/update.d.ts.map +1 -1
  226. package/dist/collections/operations/local/update.js +1 -2
  227. package/dist/collections/operations/local/update.js.map +1 -1
  228. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  229. package/dist/collections/operations/update.d.ts +0 -1
  230. package/dist/collections/operations/update.d.ts.map +1 -1
  231. package/dist/collections/operations/update.js +8 -4
  232. package/dist/collections/operations/update.js.map +1 -1
  233. package/dist/collections/operations/updateByID.d.ts +0 -1
  234. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  235. package/dist/collections/operations/updateByID.js +1 -5
  236. package/dist/collections/operations/updateByID.js.map +1 -1
  237. package/dist/collections/operations/utilities/buildAfterOperation.d.ts +1 -1
  238. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
  239. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
  240. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
  241. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
  242. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
  243. package/dist/collections/operations/utilities/types.d.ts +20 -29
  244. package/dist/collections/operations/utilities/types.d.ts.map +1 -1
  245. package/dist/collections/operations/utilities/types.js.map +1 -1
  246. package/dist/collections/operations/utilities/update.d.ts +1 -2
  247. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  248. package/dist/collections/operations/utilities/update.js +64 -65
  249. package/dist/collections/operations/utilities/update.js.map +1 -1
  250. package/dist/config/build.d.ts.map +1 -1
  251. package/dist/config/build.js +8 -0
  252. package/dist/config/build.js.map +1 -1
  253. package/dist/config/client.d.ts +3 -3
  254. package/dist/config/client.d.ts.map +1 -1
  255. package/dist/config/client.js +2 -1
  256. package/dist/config/client.js.map +1 -1
  257. package/dist/config/defaults.d.ts +0 -4
  258. package/dist/config/defaults.d.ts.map +1 -1
  259. package/dist/config/defaults.js +0 -78
  260. package/dist/config/defaults.js.map +1 -1
  261. package/dist/config/definePlugin.d.ts +10 -10
  262. package/dist/config/definePlugin.d.ts.map +1 -1
  263. package/dist/config/definePlugin.js +7 -11
  264. package/dist/config/definePlugin.js.map +1 -1
  265. package/dist/config/orderable/fractional-indexing.d.ts +23 -23
  266. package/dist/config/orderable/fractional-indexing.d.ts.map +1 -1
  267. package/dist/config/orderable/index.d.ts.map +1 -1
  268. package/dist/config/orderable/index.js +23 -0
  269. package/dist/config/orderable/index.js.map +1 -1
  270. package/dist/config/sanitize.d.ts.map +1 -1
  271. package/dist/config/sanitize.js +139 -27
  272. package/dist/config/sanitize.js.map +1 -1
  273. package/dist/config/types.d.ts +126 -38
  274. package/dist/config/types.d.ts.map +1 -1
  275. package/dist/config/types.js +2 -0
  276. package/dist/config/types.js.map +1 -1
  277. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  278. package/dist/database/getLocalizedPaths.js +1 -1
  279. package/dist/database/getLocalizedPaths.js.map +1 -1
  280. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  281. package/dist/database/migrations/migrationsCollection.js +2 -1
  282. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  283. package/dist/database/types.d.ts +1 -5
  284. package/dist/database/types.d.ts.map +1 -1
  285. package/dist/database/types.js.map +1 -1
  286. package/dist/errors/APIError.d.ts.map +1 -1
  287. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  288. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  289. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  290. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  291. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  292. package/dist/errors/FileRetrievalError.d.ts.map +1 -1
  293. package/dist/errors/FileUploadError.d.ts.map +1 -1
  294. package/dist/errors/Forbidden.d.ts.map +1 -1
  295. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  296. package/dist/errors/InvalidFieldJoin.d.ts.map +1 -1
  297. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  298. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  299. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  300. package/dist/errors/Locked.d.ts.map +1 -1
  301. package/dist/errors/LockedAuth.d.ts.map +1 -1
  302. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  303. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  304. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  305. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  306. package/dist/errors/MissingFile.d.ts.map +1 -1
  307. package/dist/errors/NotFound.d.ts.map +1 -1
  308. package/dist/errors/QueryError.d.ts.map +1 -1
  309. package/dist/errors/ReservedFieldName.d.ts.map +1 -1
  310. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  311. package/dist/errors/UnauthorizedError.d.ts.map +1 -1
  312. package/dist/errors/UnverifiedEmail.d.ts.map +1 -1
  313. package/dist/errors/ValidationError.d.ts +1 -0
  314. package/dist/errors/ValidationError.d.ts.map +1 -1
  315. package/dist/errors/ValidationError.js.map +1 -1
  316. package/dist/exports/internal.d.ts +2 -0
  317. package/dist/exports/internal.d.ts.map +1 -1
  318. package/dist/exports/internal.js +2 -0
  319. package/dist/exports/internal.js.map +1 -1
  320. package/dist/exports/migrations.d.ts +5 -13
  321. package/dist/exports/migrations.d.ts.map +1 -1
  322. package/dist/exports/migrations.js +5 -13
  323. package/dist/exports/migrations.js.map +1 -1
  324. package/dist/exports/shared.d.ts +24 -2
  325. package/dist/exports/shared.d.ts.map +1 -1
  326. package/dist/exports/shared.js +23 -1
  327. package/dist/exports/shared.js.map +1 -1
  328. package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
  329. package/dist/fields/baseFields/slug/countVersions.js +6 -8
  330. package/dist/fields/baseFields/slug/countVersions.js.map +1 -1
  331. package/dist/fields/baseFields/slug/generateSlug.d.ts +14 -7
  332. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  333. package/dist/fields/baseFields/slug/generateSlug.js +53 -73
  334. package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
  335. package/dist/fields/baseFields/slug/types.d.ts +14 -0
  336. package/dist/fields/baseFields/slug/types.d.ts.map +1 -0
  337. package/dist/fields/baseFields/slug/types.js +6 -0
  338. package/dist/fields/baseFields/slug/types.js.map +1 -0
  339. package/dist/fields/config/client.d.ts +6 -6
  340. package/dist/fields/config/client.d.ts.map +1 -1
  341. package/dist/fields/config/client.js +14 -14
  342. package/dist/fields/config/client.js.map +1 -1
  343. package/dist/fields/config/sanitize.d.ts.map +1 -1
  344. package/dist/fields/config/sanitize.js +41 -14
  345. package/dist/fields/config/sanitize.js.map +1 -1
  346. package/dist/fields/config/types.d.ts +80 -76
  347. package/dist/fields/config/types.d.ts.map +1 -1
  348. package/dist/fields/config/types.js +1 -1
  349. package/dist/fields/config/types.js.map +1 -1
  350. package/dist/fields/hooks/afterChange/promise.js +1 -1
  351. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  352. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  353. package/dist/fields/hooks/afterRead/promise.js +13 -3
  354. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  355. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  356. package/dist/fields/hooks/beforeChange/promise.js +3 -3
  357. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  358. package/dist/fields/hooks/beforeDuplicate/promise.js +2 -2
  359. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  360. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  361. package/dist/fields/hooks/beforeValidate/promise.js +16 -5
  362. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  363. package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts +10 -0
  364. package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts.map +1 -0
  365. package/dist/fields/hooks/beforeValidate/stripNullRows.js +18 -0
  366. package/dist/fields/hooks/beforeValidate/stripNullRows.js.map +1 -0
  367. package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
  368. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  369. package/dist/fields/sortableFieldTypes.d.ts.map +1 -1
  370. package/dist/fields/sortableFieldTypes.js +1 -0
  371. package/dist/fields/sortableFieldTypes.js.map +1 -1
  372. package/dist/fields/validations.d.ts +4 -1
  373. package/dist/fields/validations.d.ts.map +1 -1
  374. package/dist/fields/validations.js +12 -4
  375. package/dist/fields/validations.js.map +1 -1
  376. package/dist/globals/config/client.d.ts +4 -4
  377. package/dist/globals/config/sanitize.d.ts +6 -1
  378. package/dist/globals/config/sanitize.d.ts.map +1 -1
  379. package/dist/globals/config/sanitize.js +2 -6
  380. package/dist/globals/config/sanitize.js.map +1 -1
  381. package/dist/globals/config/sanitize.spec.js +43 -0
  382. package/dist/globals/config/sanitize.spec.js.map +1 -0
  383. package/dist/globals/endpoints/update.d.ts.map +1 -1
  384. package/dist/globals/endpoints/update.js +0 -2
  385. package/dist/globals/endpoints/update.js.map +1 -1
  386. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  387. package/dist/globals/operations/local/countVersions.d.ts +3 -3
  388. package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
  389. package/dist/globals/operations/local/countVersions.js.map +1 -1
  390. package/dist/globals/operations/local/findOne.d.ts +3 -3
  391. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  392. package/dist/globals/operations/local/findOne.js.map +1 -1
  393. package/dist/globals/operations/local/findVersionByID.d.ts +3 -3
  394. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  395. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  396. package/dist/globals/operations/local/findVersions.d.ts +3 -3
  397. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  398. package/dist/globals/operations/local/findVersions.js.map +1 -1
  399. package/dist/globals/operations/local/restoreVersion.d.ts +3 -3
  400. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  401. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  402. package/dist/globals/operations/local/update.d.ts +7 -9
  403. package/dist/globals/operations/local/update.d.ts.map +1 -1
  404. package/dist/globals/operations/local/update.js +1 -2
  405. package/dist/globals/operations/local/update.js.map +1 -1
  406. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  407. package/dist/globals/operations/update.d.ts +0 -1
  408. package/dist/globals/operations/update.d.ts.map +1 -1
  409. package/dist/globals/operations/update.js +52 -58
  410. package/dist/globals/operations/update.js.map +1 -1
  411. package/dist/hierarchy/resolveHierarchyCollections.js +1 -1
  412. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
  413. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -1
  414. package/dist/hierarchy/sanitizeHierarchyCollection.js +3 -1
  415. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -1
  416. package/dist/hierarchy/types.d.ts +8 -1
  417. package/dist/hierarchy/types.d.ts.map +1 -1
  418. package/dist/hierarchy/types.js.map +1 -1
  419. package/dist/index.bundled.d.ts +864 -468
  420. package/dist/index.d.ts +82 -35
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js +55 -37
  423. package/dist/index.js.map +1 -1
  424. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  425. package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
  426. package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
  427. package/dist/kv/adapters/InMemoryKVAdapter.d.ts.map +1 -1
  428. package/dist/locked-documents/config.d.ts.map +1 -1
  429. package/dist/locked-documents/config.js +2 -1
  430. package/dist/locked-documents/config.js.map +1 -1
  431. package/dist/preferences/config.d.ts.map +1 -1
  432. package/dist/preferences/config.js +2 -1
  433. package/dist/preferences/config.js.map +1 -1
  434. package/dist/preferences/keys.d.ts +8 -4
  435. package/dist/preferences/keys.d.ts.map +1 -1
  436. package/dist/preferences/keys.js +4 -1
  437. package/dist/preferences/keys.js.map +1 -1
  438. package/dist/preferences/types.d.ts +15 -0
  439. package/dist/preferences/types.d.ts.map +1 -1
  440. package/dist/preferences/types.js +3 -1
  441. package/dist/preferences/types.js.map +1 -1
  442. package/dist/query-presets/config.d.ts.map +1 -1
  443. package/dist/query-presets/config.js +77 -37
  444. package/dist/query-presets/config.js.map +1 -1
  445. package/dist/query-presets/constraints.d.ts.map +1 -1
  446. package/dist/query-presets/constraints.js +3 -2
  447. package/dist/query-presets/constraints.js.map +1 -1
  448. package/dist/query-presets/types.d.ts +1 -1
  449. package/dist/query-presets/types.d.ts.map +1 -1
  450. package/dist/queues/config/collection.d.ts.map +1 -1
  451. package/dist/queues/config/collection.js +2 -1
  452. package/dist/queues/config/collection.js.map +1 -1
  453. package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
  454. package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
  455. package/dist/queues/config/generateJobsJSONSchemas.js +33 -12
  456. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  457. package/dist/queues/config/global.d.ts.map +1 -1
  458. package/dist/queues/config/global.js +2 -1
  459. package/dist/queues/config/global.js.map +1 -1
  460. package/dist/queues/errors/index.d.ts.map +1 -1
  461. package/dist/queues/localAPI.d.ts +8 -8
  462. package/dist/queues/localAPI.d.ts.map +1 -1
  463. package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts +1 -1
  464. package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts.map +1 -1
  465. package/dist/queues/utilities/getCurrentDate.d.ts.map +1 -1
  466. package/dist/types/constants.d.ts +2 -2
  467. package/dist/types/constants.d.ts.map +1 -1
  468. package/dist/types/index.d.ts +18 -8
  469. package/dist/types/index.d.ts.map +1 -1
  470. package/dist/types/index.js.map +1 -1
  471. package/dist/uploads/cropImage.d.ts.map +1 -1
  472. package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
  473. package/dist/uploads/endpoints/getFileFromURL.js +9 -5
  474. package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
  475. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  476. package/dist/uploads/fetchAPI-multipart/processMultipart.js +4 -0
  477. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  478. package/dist/uploads/generateFileData.d.ts +2 -1
  479. package/dist/uploads/generateFileData.d.ts.map +1 -1
  480. package/dist/uploads/generateFileData.js +5 -2
  481. package/dist/uploads/generateFileData.js.map +1 -1
  482. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  483. package/dist/uploads/getBaseFields.js +7 -19
  484. package/dist/uploads/getBaseFields.js.map +1 -1
  485. package/dist/uploads/getFileByPath.d.ts +1 -1
  486. package/dist/uploads/image-resizing/getImageResizeAction.d.ts +1 -1
  487. package/dist/uploads/matchMimeType.d.ts +8 -0
  488. package/dist/uploads/matchMimeType.d.ts.map +1 -0
  489. package/dist/uploads/matchMimeType.js +19 -0
  490. package/dist/uploads/matchMimeType.js.map +1 -0
  491. package/dist/uploads/matchMimeType.spec.js +66 -0
  492. package/dist/uploads/matchMimeType.spec.js.map +1 -0
  493. package/dist/uploads/safeFetch.d.ts +1 -1
  494. package/dist/uploads/safeFetch.d.ts.map +1 -1
  495. package/dist/uploads/safeFetch.js +11 -5
  496. package/dist/uploads/safeFetch.js.map +1 -1
  497. package/dist/uploads/types.d.ts +33 -29
  498. package/dist/uploads/types.d.ts.map +1 -1
  499. package/dist/uploads/types.js.map +1 -1
  500. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  501. package/dist/utilities/addDataAndFileToRequest.js +6 -0
  502. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  503. package/dist/utilities/appendDateTimezoneSelectFields.js +2 -2
  504. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  505. package/dist/utilities/configToJSONSchema.d.ts +68 -16
  506. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  507. package/dist/utilities/configToJSONSchema.js +312 -117
  508. package/dist/utilities/configToJSONSchema.js.map +1 -1
  509. package/dist/utilities/configToJSONSchema.spec.js +656 -85
  510. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  511. package/dist/utilities/createLocalReq.d.ts +2 -2
  512. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  513. package/dist/utilities/createLocalReq.js.map +1 -1
  514. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  515. package/dist/utilities/createPayloadRequest.js +1 -0
  516. package/dist/utilities/createPayloadRequest.js.map +1 -1
  517. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  518. package/dist/utilities/deepCopyObject.js +8 -0
  519. package/dist/utilities/deepCopyObject.js.map +1 -1
  520. package/dist/utilities/dependencies/dependencyChecker.js +1 -1
  521. package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
  522. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
  523. package/dist/utilities/dependencies/getDependencies.js +5 -5
  524. package/dist/utilities/dependencies/getDependencies.js.map +1 -1
  525. package/dist/utilities/dynamicImport.js +1 -1
  526. package/dist/utilities/dynamicImport.js.map +1 -1
  527. package/dist/utilities/filterDataToSelectedLocales.d.ts.map +1 -1
  528. package/dist/utilities/filterDataToSelectedLocales.js +5 -12
  529. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  530. package/dist/utilities/filterDataToSelectedLocales.spec.js +1 -2
  531. package/dist/utilities/filterDataToSelectedLocales.spec.js.map +1 -1
  532. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  533. package/dist/utilities/flattenAllFields.js +7 -22
  534. package/dist/utilities/flattenAllFields.js.map +1 -1
  535. package/dist/utilities/formatErrors.d.ts.map +1 -1
  536. package/dist/utilities/formatErrors.js +3 -1
  537. package/dist/utilities/formatErrors.js.map +1 -1
  538. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  539. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  540. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
  541. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  542. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts +7 -1
  543. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  544. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js +24 -7
  545. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  546. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  547. package/dist/utilities/getFieldByPath.js +1 -1
  548. package/dist/utilities/getFieldByPath.js.map +1 -1
  549. package/dist/utilities/getRequestLanguage.d.ts +2 -2
  550. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  551. package/dist/utilities/getRequestLanguage.js.map +1 -1
  552. package/dist/utilities/getRequestOrigin.d.ts +2 -2
  553. package/dist/utilities/getVersionsConfig.d.ts +1 -1
  554. package/dist/utilities/getVersionsConfig.js.map +1 -1
  555. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  556. package/dist/utilities/handleEndpoints.js +7 -4
  557. package/dist/utilities/handleEndpoints.js.map +1 -1
  558. package/dist/utilities/isEntityHidden.d.ts +2 -2
  559. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  560. package/dist/utilities/isURLAllowed.js +9 -3
  561. package/dist/utilities/isURLAllowed.js.map +1 -1
  562. package/dist/utilities/isURLAllowed.spec.js +78 -0
  563. package/dist/utilities/isURLAllowed.spec.js.map +1 -0
  564. package/dist/utilities/isValidID.d.ts +1 -1
  565. package/dist/utilities/logger.d.ts +1 -1
  566. package/dist/utilities/mergeLocalizedData.d.ts +14 -4
  567. package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
  568. package/dist/utilities/mergeLocalizedData.js +54 -46
  569. package/dist/utilities/mergeLocalizedData.js.map +1 -1
  570. package/dist/utilities/mergeLocalizedData.spec.js +23 -23
  571. package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
  572. package/dist/utilities/miniChalk.d.ts.map +1 -1
  573. package/dist/utilities/parseCookies.d.ts +1 -1
  574. package/dist/utilities/parseParams/index.d.ts +2 -5
  575. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  576. package/dist/utilities/parseParams/index.js.map +1 -1
  577. package/dist/utilities/parseParams/index.spec.js +0 -9
  578. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  579. package/dist/utilities/resolveSelect.d.ts.map +1 -1
  580. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
  581. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  582. package/dist/utilities/telemetry/events/adminInit.js +2 -3
  583. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  584. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  585. package/dist/utilities/telemetry/events/serverInit.js +2 -3
  586. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  587. package/dist/utilities/telemetry/index.d.ts +15 -4
  588. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  589. package/dist/utilities/telemetry/index.js +6 -1
  590. package/dist/utilities/telemetry/index.js.map +1 -1
  591. package/dist/utilities/telemetry/index.spec.js +43 -0
  592. package/dist/utilities/telemetry/index.spec.js.map +1 -0
  593. package/dist/utilities/transformColumnPreferences.js +4 -2
  594. package/dist/utilities/transformColumnPreferences.js.map +1 -1
  595. package/dist/utilities/traverseFields.d.ts.map +1 -1
  596. package/dist/utilities/traverseFields.js +2 -4
  597. package/dist/utilities/traverseFields.js.map +1 -1
  598. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  599. package/dist/utilities/traverseForLocalizedFields.js +3 -0
  600. package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
  601. package/dist/versions/baseFields.d.ts +1 -2
  602. package/dist/versions/baseFields.d.ts.map +1 -1
  603. package/dist/versions/baseFields.js +0 -13
  604. package/dist/versions/baseFields.js.map +1 -1
  605. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  606. package/dist/versions/buildCollectionFields.js +0 -2
  607. package/dist/versions/buildCollectionFields.js.map +1 -1
  608. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  609. package/dist/versions/buildGlobalFields.js +0 -2
  610. package/dist/versions/buildGlobalFields.js.map +1 -1
  611. package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
  612. package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
  613. package/dist/versions/buildSingleLocalePublishData.js +37 -0
  614. package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
  615. package/dist/versions/defaults.d.ts.map +1 -1
  616. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  617. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  618. package/dist/versions/payloadPackageList.js +0 -1
  619. package/dist/versions/payloadPackageList.js.map +1 -1
  620. package/dist/versions/saveVersion.d.ts +0 -2
  621. package/dist/versions/saveVersion.d.ts.map +1 -1
  622. package/dist/versions/saveVersion.js +12 -17
  623. package/dist/versions/saveVersion.js.map +1 -1
  624. package/dist/versions/schedule/job.d.ts.map +1 -1
  625. package/dist/versions/schedule/job.js +6 -10
  626. package/dist/versions/schedule/job.js.map +1 -1
  627. package/dist/versions/types.d.ts +2 -15
  628. package/dist/versions/types.d.ts.map +1 -1
  629. package/dist/versions/types.js.map +1 -1
  630. package/package.json +23 -20
  631. package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
  632. package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
  633. package/dist/database/migrations/templates/localizeStatus.js +0 -54
  634. package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
  635. package/dist/fields/baseFields/slug/index.d.ts +0 -89
  636. package/dist/fields/baseFields/slug/index.d.ts.map +0 -1
  637. package/dist/fields/baseFields/slug/index.js +0 -81
  638. package/dist/fields/baseFields/slug/index.js.map +0 -1
  639. package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
  640. package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
  641. package/dist/versions/migrations/localizeStatus/index.js +0 -33
  642. package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
  643. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
  644. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
  645. package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
  646. package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
  647. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
  648. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
  649. package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
  650. package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
  651. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
  652. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
  653. package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
  654. package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
  655. package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
  656. package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
  657. package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
  658. package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
  659. package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
  660. package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
  661. package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
  662. package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
  663. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
  664. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
  665. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
  666. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
  667. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
  668. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
  669. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
  670. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
  671. package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
  672. package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
  673. package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
  674. package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
  675. package/dist/versions/saveSnapshot.d.ts +0 -18
  676. package/dist/versions/saveSnapshot.d.ts.map +0 -1
  677. package/dist/versions/saveSnapshot.js +0 -38
  678. package/dist/versions/saveSnapshot.js.map +0 -1
@@ -1,10 +1,13 @@
1
+ import { createHash } from 'crypto';
1
2
  import { MissingEditorProp } from '../errors/MissingEditorProp.js';
2
- import { fieldAffectsData } from '../fields/config/types.js';
3
+ import { fieldAffectsData, fieldIsVirtual } from '../fields/config/types.js';
3
4
  import { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js';
4
5
  import { flattenAllFields } from './flattenAllFields.js';
5
- import { formatNames } from './formatLabels.js';
6
+ import { formatNames, toWords } from './formatLabels.js';
6
7
  import { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js';
7
8
  import { optionsAreEqual } from './optionsAreEqual.js';
9
+ // Virtual fields (computed) and join fields (derived from the inverse relationship) are read-only.
10
+ const fieldIsInputExcluded = (field)=>field.type === 'join' || fieldIsVirtual(field);
8
11
  const fieldIsRequired = (field)=>{
9
12
  const isConditional = Boolean(field?.admin && field?.admin?.condition);
10
13
  if (isConditional) {
@@ -33,7 +36,7 @@ function generateEntitySchemas(entities) {
33
36
  ...entities
34
37
  ].reduce((acc, { slug })=>{
35
38
  acc[slug] = {
36
- $ref: `#/definitions/${slug}`
39
+ $ref: `#/$defs/${slug}`
37
40
  };
38
41
  return acc;
39
42
  }, {});
@@ -49,7 +52,23 @@ function generateEntitySelectSchemas(entities) {
49
52
  ...entities
50
53
  ].reduce((acc, { slug })=>{
51
54
  acc[slug] = {
52
- $ref: `#/definitions/${slug}_select`
55
+ $ref: `#/$defs/${slug}_select`
56
+ };
57
+ return acc;
58
+ }, {});
59
+ return {
60
+ type: 'object',
61
+ additionalProperties: false,
62
+ properties,
63
+ required: Object.keys(properties)
64
+ };
65
+ }
66
+ function generateEntityInputSchemas(entities) {
67
+ const properties = [
68
+ ...entities
69
+ ].reduce((acc, { slug })=>{
70
+ acc[slug] = {
71
+ $ref: `#/$defs/${slug}_input`
53
72
  };
54
73
  return acc;
55
74
  }, {});
@@ -120,7 +139,7 @@ function getAllowedWidgetWidths({ maxWidth, minWidth }) {
120
139
  }
121
140
  return widgetWidths.slice(minIndex, maxIndex + 1);
122
141
  }
123
- function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interfaceNameDefinitions, opts = {} }) {
142
+ function generateWidgetSchemas({ collectionIDFieldTypes, config, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions }) {
124
143
  const widgets = config.admin?.dashboard?.widgets ?? [];
125
144
  const definitions = {};
126
145
  const properties = {};
@@ -132,9 +151,17 @@ function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interface
132
151
  });
133
152
  let dataSchema;
134
153
  if (widget.fields?.length) {
135
- const widgetFieldSchemas = fieldsToJSONSchema(collectionIDFieldTypes, flattenAllFields({
136
- fields: widget.fields
137
- }), interfaceNameDefinitions, config, i18n, opts);
154
+ const widgetFieldSchemas = fieldsToJSONSchema({
155
+ collectionIDFieldTypes,
156
+ config,
157
+ fields: flattenAllFields({
158
+ fields: widget.fields
159
+ }),
160
+ forceInlineBlocks,
161
+ i18n,
162
+ interfaceNameDefinitions,
163
+ typeStringDefinitions
164
+ });
138
165
  dataSchema = {
139
166
  type: 'object',
140
167
  additionalProperties: false,
@@ -161,7 +188,7 @@ function generateWidgetSchemas({ collectionIDFieldTypes, config, i18n, interface
161
188
  ]
162
189
  };
163
190
  properties[widget.slug] = {
164
- $ref: `#/definitions/${definition}`
191
+ $ref: `#/$defs/${definition}`
165
192
  };
166
193
  }
167
194
  return {
@@ -240,7 +267,7 @@ function generateAuthEntitySchemas(entities) {
240
267
  ...entities
241
268
  ].filter(({ auth })=>Boolean(auth)).map(({ slug })=>{
242
269
  return {
243
- $ref: `#/definitions/${slug}`
270
+ $ref: `#/$defs/${slug}`
244
271
  };
245
272
  }, {});
246
273
  return {
@@ -299,17 +326,35 @@ function entityOrFieldToJsDocs({ entity, i18n }) {
299
326
  }
300
327
  return description;
301
328
  }
302
- export function fieldsToJSONSchema(/**
303
- * Used for relationship fields, to determine whether to use a string or number type for the ID.
304
- * While there is a default ID field type set by the db adapter, they can differ on a collection-level
305
- * if they have custom ID fields.
306
- */ collectionIDFieldTypes, fields, /**
307
- * Allows you to define new top-level interfaces that can be re-used in the output schema.
308
- */ interfaceNameDefinitions, config, i18n, opts = {}) {
329
+ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, forceInlineBlocks, i18n, interfaceNameDefinitions, typeStringDefinitions, variant = 'output' }) {
309
330
  const requiredFieldNames = new Set();
331
+ // Registers a named-interface (group/tab/array/select) def and returns its `$ref` name. For input,
332
+ // shares the read-shaped def when byte-identical; otherwise registers an `Input`-suffixed twin so
333
+ // the write shape doesn't collide with the read one.
334
+ const registerNamedInterface = (name, schema)=>{
335
+ if (variant === 'input') {
336
+ const outputDef = interfaceNameDefinitions.get(name);
337
+ if (outputDef && JSON.stringify(outputDef) === JSON.stringify(schema)) {
338
+ return name;
339
+ }
340
+ const inputName = `${name}Input`;
341
+ interfaceNameDefinitions.set(inputName, schema);
342
+ return inputName;
343
+ }
344
+ interfaceNameDefinitions.set(name, schema);
345
+ return name;
346
+ };
310
347
  return {
311
348
  properties: Object.fromEntries(fields.reduce((fieldSchemas, field, index)=>{
349
+ if (variant === 'input' && fieldIsInputExcluded(field)) {
350
+ return fieldSchemas;
351
+ }
352
+ const hasDefaultValue = 'defaultValue' in field && field.defaultValue !== undefined;
353
+ // `isRequired` only controls nullability (a non-required field gets `| null`). It does not
354
+ // change between variants, so e.g. a defaulted field stays non-null on input.
312
355
  const isRequired = fieldAffectsData(field) && fieldIsRequired(field);
356
+ // `isOptionalOnInput` controls the `?`: on input, defaulted fields can be omitted.
357
+ const isOptionalOnInput = variant === 'input' && hasDefaultValue;
313
358
  const fieldDescription = entityOrFieldToJsDocs({
314
359
  entity: field,
315
360
  i18n
@@ -328,13 +373,21 @@ export function fieldsToJSONSchema(/**
328
373
  items: {
329
374
  type: 'object',
330
375
  additionalProperties: false,
331
- ...fieldsToJSONSchema(collectionIDFieldTypes, field.flattenedFields, interfaceNameDefinitions, config, i18n, opts)
376
+ ...fieldsToJSONSchema({
377
+ collectionIDFieldTypes,
378
+ config,
379
+ fields: field.flattenedFields,
380
+ forceInlineBlocks,
381
+ i18n,
382
+ interfaceNameDefinitions,
383
+ typeStringDefinitions,
384
+ variant
385
+ })
332
386
  }
333
387
  };
334
388
  if (field.interfaceName) {
335
- interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
336
389
  fieldSchema = {
337
- $ref: `#/definitions/${field.interfaceName}`
390
+ $ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
338
391
  };
339
392
  }
340
393
  break;
@@ -344,25 +397,26 @@ export function fieldsToJSONSchema(/**
344
397
  // Check for a case where no blocks are provided.
345
398
  // We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays
346
399
  // so the best we can get is `unknown[]`
347
- const hasBlocks = Boolean(field.blockReferences ? field.blockReferences.length : field.blocks.length);
400
+ const hasBlocks = Boolean(field.blocks.length);
348
401
  fieldSchema = {
349
402
  ...baseFieldSchema,
350
403
  type: withNullableJSONSchemaType('array', isRequired),
351
404
  items: hasBlocks ? {
352
- oneOf: (field.blockReferences ?? field.blocks).map((block)=>{
353
- if (typeof block === 'string') {
354
- const resolvedBlock = config?.blocks?.find((b)=>b.slug === block);
355
- if (!resolvedBlock) {
356
- return {};
357
- }
358
- if (!opts.forceInlineBlocks) {
359
- return {
360
- $ref: `#/definitions/${resolvedBlock.interfaceName ?? resolvedBlock.slug}`
361
- };
362
- }
363
- block = resolvedBlock;
405
+ oneOf: field.blocks.map((blockOrReference)=>{
406
+ const block = typeof blockOrReference === 'string' ? config?.blocks?.find((b)=>b.slug === blockOrReference) : blockOrReference;
407
+ if (!block) {
408
+ return {};
364
409
  }
365
- const blockFieldSchemas = fieldsToJSONSchema(collectionIDFieldTypes, block.flattenedFields, interfaceNameDefinitions, config, i18n, opts);
410
+ const blockFieldSchemas = fieldsToJSONSchema({
411
+ collectionIDFieldTypes,
412
+ config,
413
+ fields: block.flattenedFields,
414
+ forceInlineBlocks,
415
+ i18n,
416
+ interfaceNameDefinitions,
417
+ typeStringDefinitions,
418
+ variant
419
+ });
366
420
  const blockSchema = {
367
421
  type: 'object',
368
422
  additionalProperties: false,
@@ -377,13 +431,9 @@ export function fieldsToJSONSchema(/**
377
431
  ...blockFieldSchemas.required
378
432
  ]
379
433
  };
380
- if (!opts.forceInlineBlocks && block.interfaceName) {
381
- interfaceNameDefinitions.set(block.interfaceName, blockSchema);
382
- return {
383
- $ref: `#/definitions/${block.interfaceName}`
384
- };
385
- }
386
- return blockSchema;
434
+ return forceInlineBlocks ? blockSchema : {
435
+ $ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions, variant)}`
436
+ };
387
437
  })
388
438
  } : {}
389
439
  };
@@ -400,6 +450,7 @@ export function fieldsToJSONSchema(/**
400
450
  case 'code':
401
451
  case 'date':
402
452
  case 'email':
453
+ case 'slug':
403
454
  case 'textarea':
404
455
  {
405
456
  fieldSchema = {
@@ -415,12 +466,20 @@ export function fieldsToJSONSchema(/**
415
466
  ...baseFieldSchema,
416
467
  type: 'object',
417
468
  additionalProperties: false,
418
- ...fieldsToJSONSchema(collectionIDFieldTypes, field.flattenedFields, interfaceNameDefinitions, config, i18n, opts)
469
+ ...fieldsToJSONSchema({
470
+ collectionIDFieldTypes,
471
+ config,
472
+ fields: field.flattenedFields,
473
+ forceInlineBlocks,
474
+ i18n,
475
+ interfaceNameDefinitions,
476
+ typeStringDefinitions,
477
+ variant
478
+ })
419
479
  };
420
480
  if (field.interfaceName) {
421
- interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
422
481
  fieldSchema = {
423
- $ref: `#/definitions/${field.interfaceName}`
482
+ $ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
424
483
  };
425
484
  }
426
485
  }
@@ -444,7 +503,7 @@ export function fieldsToJSONSchema(/**
444
503
  type: collectionIDFieldTypes[collection]
445
504
  },
446
505
  {
447
- $ref: `#/definitions/${collection}`
506
+ $ref: `#/$defs/${collection}`
448
507
  }
449
508
  ]
450
509
  }
@@ -462,7 +521,7 @@ export function fieldsToJSONSchema(/**
462
521
  type: collectionIDFieldTypes[field.collection]
463
522
  },
464
523
  {
465
- $ref: `#/definitions/${field.collection}`
524
+ $ref: `#/$defs/${field.collection}`
466
525
  }
467
526
  ]
468
527
  };
@@ -545,9 +604,8 @@ export function fieldsToJSONSchema(/**
545
604
  enum: buildOptionEnums(field.options)
546
605
  };
547
606
  if (field.interfaceName) {
548
- interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
549
607
  fieldSchema = {
550
- $ref: `#/definitions/${field.interfaceName}`
608
+ $ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
551
609
  };
552
610
  }
553
611
  break;
@@ -555,6 +613,19 @@ export function fieldsToJSONSchema(/**
555
613
  case 'relationship':
556
614
  case 'upload':
557
615
  {
616
+ // Read: an ID or the populated doc. Input: only the ID, so drop the `$ref`.
617
+ const relationValueSchema = (relation)=>variant === 'input' ? {
618
+ type: collectionIDFieldTypes[relation]
619
+ } : {
620
+ oneOf: [
621
+ {
622
+ type: collectionIDFieldTypes[relation]
623
+ },
624
+ {
625
+ $ref: `#/$defs/${relation}`
626
+ }
627
+ ]
628
+ };
558
629
  if (Array.isArray(field.relationTo)) {
559
630
  if (field.hasMany) {
560
631
  fieldSchema = {
@@ -569,16 +640,7 @@ export function fieldsToJSONSchema(/**
569
640
  relationTo: {
570
641
  const: relation
571
642
  },
572
- value: {
573
- oneOf: [
574
- {
575
- type: collectionIDFieldTypes[relation]
576
- },
577
- {
578
- $ref: `#/definitions/${relation}`
579
- }
580
- ]
581
- }
643
+ value: relationValueSchema(relation)
582
644
  },
583
645
  required: [
584
646
  'value',
@@ -599,16 +661,7 @@ export function fieldsToJSONSchema(/**
599
661
  relationTo: {
600
662
  const: relation
601
663
  },
602
- value: {
603
- oneOf: [
604
- {
605
- type: collectionIDFieldTypes[relation]
606
- },
607
- {
608
- $ref: `#/definitions/${relation}`
609
- }
610
- ]
611
- }
664
+ value: relationValueSchema(relation)
612
665
  },
613
666
  required: [
614
667
  'value',
@@ -622,17 +675,24 @@ export function fieldsToJSONSchema(/**
622
675
  fieldSchema = {
623
676
  ...baseFieldSchema,
624
677
  type: withNullableJSONSchemaType('array', isRequired),
625
- items: {
678
+ items: variant === 'input' ? {
679
+ type: collectionIDFieldTypes[field.relationTo]
680
+ } : {
626
681
  oneOf: [
627
682
  {
628
683
  type: collectionIDFieldTypes[field.relationTo]
629
684
  },
630
685
  {
631
- $ref: `#/definitions/${field.relationTo}`
686
+ $ref: `#/$defs/${field.relationTo}`
632
687
  }
633
688
  ]
634
689
  }
635
690
  };
691
+ } else if (variant === 'input') {
692
+ fieldSchema = {
693
+ ...baseFieldSchema,
694
+ type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
695
+ };
636
696
  } else {
637
697
  fieldSchema = {
638
698
  ...baseFieldSchema,
@@ -641,7 +701,7 @@ export function fieldsToJSONSchema(/**
641
701
  type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
642
702
  },
643
703
  {
644
- $ref: `#/definitions/${field.relationTo}`
704
+ $ref: `#/$defs/${field.relationTo}`
645
705
  }
646
706
  ]
647
707
  };
@@ -657,16 +717,18 @@ export function fieldsToJSONSchema(/**
657
717
  if (typeof field.editor === 'function') {
658
718
  throw new Error('Attempted to access unsanitized rich text editor.');
659
719
  }
660
- if (field.editor.outputSchema) {
720
+ if (field.editor.jsonSchema) {
661
721
  fieldSchema = {
662
722
  ...baseFieldSchema,
663
- ...field.editor.outputSchema({
723
+ ...field.editor.jsonSchema({
664
724
  collectionIDFieldTypes,
665
725
  config,
666
726
  field,
667
727
  i18n,
668
728
  interfaceNameDefinitions,
669
- isRequired
729
+ isRequired,
730
+ typeStringDefinitions,
731
+ variant
670
732
  })
671
733
  };
672
734
  } else {
@@ -694,7 +756,7 @@ export function fieldsToJSONSchema(/**
694
756
  // only if the field's options match the global config
695
757
  if (isTimezoneField && hasMatchingGlobalTimezones) {
696
758
  fieldSchema = {
697
- $ref: `#/definitions/supportedTimezones`
759
+ $ref: `#/$defs/supportedTimezones`
698
760
  };
699
761
  } else {
700
762
  if (field.hasMany) {
@@ -719,9 +781,8 @@ export function fieldsToJSONSchema(/**
719
781
  }
720
782
  }
721
783
  if (field.interfaceName) {
722
- interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
723
784
  fieldSchema = {
724
- $ref: `#/definitions/${field.interfaceName}`
785
+ $ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
725
786
  };
726
787
  }
727
788
  break;
@@ -734,12 +795,20 @@ export function fieldsToJSONSchema(/**
734
795
  ...baseFieldSchema,
735
796
  type: 'object',
736
797
  additionalProperties: false,
737
- ...fieldsToJSONSchema(collectionIDFieldTypes, field.flattenedFields, interfaceNameDefinitions, config, i18n, opts)
798
+ ...fieldsToJSONSchema({
799
+ collectionIDFieldTypes,
800
+ config,
801
+ fields: field.flattenedFields,
802
+ forceInlineBlocks,
803
+ i18n,
804
+ interfaceNameDefinitions,
805
+ typeStringDefinitions,
806
+ variant
807
+ })
738
808
  };
739
809
  if (field.interfaceName) {
740
- interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
741
810
  fieldSchema = {
742
- $ref: `#/definitions/${field.interfaceName}`
811
+ $ref: `#/$defs/${registerNamedInterface(field.interfaceName, fieldSchema)}`
743
812
  };
744
813
  }
745
814
  break;
@@ -765,15 +834,16 @@ export function fieldsToJSONSchema(/**
765
834
  break;
766
835
  }
767
836
  }
768
- if ('typescriptSchema' in field && field?.typescriptSchema?.length) {
769
- for (const schema of field.typescriptSchema){
837
+ if ('jsonSchema' in field && field?.jsonSchema?.length) {
838
+ for (const schema of field.jsonSchema){
770
839
  fieldSchema = schema({
771
- jsonSchema: fieldSchema
840
+ jsonSchema: fieldSchema,
841
+ variant
772
842
  });
773
843
  }
774
844
  }
775
845
  if (fieldSchema && fieldAffectsData(field)) {
776
- if (isRequired && fieldSchema.required !== false) {
846
+ if (isRequired && !isOptionalOnInput && fieldSchema.required !== false) {
777
847
  requiredFieldNames.add(field.name);
778
848
  }
779
849
  fieldSchemas.set(field.name, fieldSchema);
@@ -784,17 +854,21 @@ export function fieldsToJSONSchema(/**
784
854
  };
785
855
  }
786
856
  // This function is part of the public API and is exported through payload/utilities
787
- export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, collectionIDFieldTypes, i18n, opts = {}) {
857
+ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks, variant = 'output') {
788
858
  if (!collectionIDFieldTypes) {
789
859
  collectionIDFieldTypes = getCollectionIDFieldTypes({
790
860
  config,
791
861
  defaultIDType
792
862
  });
793
863
  }
794
- const title = entity.typescript?.interface ? entity.typescript.interface : formatNames(entity.slug).singular;
864
+ const isInput = variant === 'input';
865
+ const baseTitle = entity.typescript?.interface ? entity.typescript.interface : formatNames(entity.slug).singular;
866
+ const title = isInput ? `${baseTitle}Input` : baseTitle;
795
867
  let mutableFields = [
796
868
  ...entity.flattenedFields
797
869
  ];
870
+ // `required: true` keeps `id` non-null. On input it's made optional further below (it's dropped
871
+ // from `required`) so you can omit it or pass a custom ID, but it's still never `null`.
798
872
  const idField = {
799
873
  name: 'id',
800
874
  type: defaultIDType,
@@ -802,20 +876,18 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
802
876
  };
803
877
  const customIdField = mutableFields.find((field)=>field.name === 'id');
804
878
  if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {
805
- mutableFields = mutableFields.map((field)=>{
806
- if (field === customIdField) {
807
- return {
808
- ...field,
809
- required: true
810
- };
811
- }
812
- return field;
813
- });
879
+ mutableFields = mutableFields.map((field)=>field === customIdField ? {
880
+ ...field,
881
+ required: true
882
+ } : field);
814
883
  } else {
815
884
  mutableFields.unshift(idField);
816
885
  }
817
- // mark timestamp fields required
818
- if ('timestamps' in entity && entity.timestamps !== false) {
886
+ if (isInput) {
887
+ // Timestamps are managed by Payload. `_status` remains because create/update accept it.
888
+ mutableFields = mutableFields.filter((field)=>field.name !== 'createdAt' && field.name !== 'updatedAt');
889
+ } else if ('timestamps' in entity && entity.timestamps !== false) {
890
+ // mark timestamp fields required
819
891
  mutableFields = mutableFields.map((field)=>{
820
892
  if (field.name === 'createdAt' || field.name === 'updatedAt') {
821
893
  return {
@@ -833,9 +905,23 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
833
905
  });
834
906
  }
835
907
  const isAuthCollection = 'auth' in entity && entity.auth;
836
- const fieldsSchema = fieldsToJSONSchema(collectionIDFieldTypes, mutableFields, interfaceNameDefinitions, config, i18n, opts);
837
- // Add collection property to auth collections
838
- if (isAuthCollection) {
908
+ const fieldsSchema = fieldsToJSONSchema({
909
+ collectionIDFieldTypes,
910
+ config,
911
+ fields: mutableFields,
912
+ forceInlineBlocks,
913
+ i18n,
914
+ interfaceNameDefinitions,
915
+ typeStringDefinitions,
916
+ variant
917
+ });
918
+ // On input, `id` is optional (omit it, or pass a custom ID). Removing it from `required` makes
919
+ // it optional without making it nullable.
920
+ if (isInput && Array.isArray(fieldsSchema.required)) {
921
+ fieldsSchema.required = fieldsSchema.required.filter((name)=>name !== 'id');
922
+ }
923
+ // The `User`-union discriminator (read-side, e.g. `req.user`); not part of create/update data.
924
+ if (isAuthCollection && !isInput) {
839
925
  fieldsSchema.properties = {
840
926
  ...fieldsSchema.properties,
841
927
  collection: {
@@ -865,6 +951,47 @@ export function entityToJSONSchema(config, entity, interfaceNameDefinitions, def
865
951
  }
866
952
  return jsonSchema;
867
953
  }
954
+ /**
955
+ * Like {@link entityToJSONSchema}, but returns a standalone schema for one collection or global:
956
+ * the entity plus only the `$defs` it actually uses, so it resolves on its own rather than
957
+ * as part of the whole config schema.
958
+ *
959
+ * Relationship/upload `$ref`s to other collections are left in place - the caller handles those.
960
+ * (The `input` variant reduces relationships to IDs, so only rich-text node `$defs` still ref them.)
961
+ */ export function entityToStandaloneJSONSchema({ config, defaultIDType, entity, i18n, variant = 'output' }) {
962
+ const definitions = new Map();
963
+ // entityToJSONSchema fills `definitions` with everything the fields reference (node unions, blocks).
964
+ const schema = entityToJSONSchema(config, entity, definitions, defaultIDType, new Set(), undefined, i18n, true, variant);
965
+ // Timezone fields `$ref` supportedTimezones, which lives on the root config schema, so add it here.
966
+ const supportedTimezones = config.admin?.timezones?.supportedTimezones;
967
+ if (supportedTimezones?.length && schemaHasRef([
968
+ schema,
969
+ ...definitions.values()
970
+ ], '#/$defs/supportedTimezones')) {
971
+ definitions.set('supportedTimezones', timezonesToJSONSchema(supportedTimezones));
972
+ }
973
+ return {
974
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
975
+ ...schema,
976
+ $defs: Object.fromEntries(definitions)
977
+ };
978
+ }
979
+ /**
980
+ * Recursive function that returns true if
981
+ * `node` has a `$ref` to `ref` somewhere inside it.
982
+ * */ function schemaHasRef(node, ref) {
983
+ if (Array.isArray(node)) {
984
+ return node.some((child)=>schemaHasRef(child, ref));
985
+ }
986
+ if (node && typeof node === 'object') {
987
+ const obj = node;
988
+ if (obj.$ref === ref) {
989
+ return true;
990
+ }
991
+ return Object.values(obj).some((value)=>schemaHasRef(value, ref));
992
+ }
993
+ return false;
994
+ }
868
995
  export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefinitions }) {
869
996
  const schema = {
870
997
  type: 'object',
@@ -886,7 +1013,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
886
1013
  const definition = `${field.interfaceName}_select`;
887
1014
  interfaceNameDefinitions.set(definition, fieldSchema);
888
1015
  fieldSchema = {
889
- $ref: `#/definitions/${definition}`
1016
+ $ref: `#/$defs/${definition}`
890
1017
  };
891
1018
  }
892
1019
  schema.properties[field.name] = {
@@ -906,7 +1033,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
906
1033
  additionalProperties: false,
907
1034
  properties: {}
908
1035
  };
909
- for (const block of field.blockReferences ?? field.blocks){
1036
+ for (const block of field.blocks){
910
1037
  if (typeof block === 'string') {
911
1038
  continue; // TODO
912
1039
  }
@@ -919,7 +1046,7 @@ export function fieldsToSelectJSONSchema({ config, fields, interfaceNameDefiniti
919
1046
  const definition = `${block.interfaceName}_select`;
920
1047
  interfaceNameDefinitions.set(definition, blockSchema);
921
1048
  blockSchema = {
922
- $ref: `#/definitions/${definition}`
1049
+ $ref: `#/$defs/${definition}`
923
1050
  };
924
1051
  }
925
1052
  blocksSchema.properties[block.slug] = {
@@ -1121,7 +1248,7 @@ function generateAuthOperationSchemas(collections) {
1121
1248
  const properties = collections.reduce((acc, collection)=>{
1122
1249
  if (collection.auth) {
1123
1250
  acc[collection.slug] = {
1124
- $ref: `#/definitions/auth/${collection.slug}`
1251
+ $ref: `#/$defs/auth/${collection.slug}`
1125
1252
  };
1126
1253
  }
1127
1254
  return acc;
@@ -1133,11 +1260,56 @@ function generateAuthOperationSchemas(collections) {
1133
1260
  required: Object.keys(properties)
1134
1261
  };
1135
1262
  }
1263
+ const hashBlockSchema = (schema)=>createHash('sha256').update(JSON.stringify(schema)).digest('hex').slice(0, 8).toUpperCase();
1264
+ /**
1265
+ * Registers a block's schema as a top-level definition and returns its name.
1266
+ *
1267
+ * The name is the block's `interfaceName`, or a PascalCase form of its slug. If a different block
1268
+ * already uses that name - whether it was auto-generated or an explicit `interfaceName` - this one
1269
+ * gets a content-hash suffix (`Hero_3F2A1B0C`) so the two don't overwrite each other. Registering
1270
+ * the same block shape again reuses its name.
1271
+ *
1272
+ * The `input` variant adds an `Input` suffix (`HeroInput`) - unless the read-shaped def is already
1273
+ * registered with byte-identical content (a block with nothing that differs between input and
1274
+ * output), in which case it's shared as-is rather than emitting a redundant twin.
1275
+ */ export function registerBlockInterface(block, blockSchema, interfaceNameDefinitions, variant = 'output') {
1276
+ const rawName = block.interfaceName ?? toWords(block.slug, true);
1277
+ if (variant === 'input') {
1278
+ const outputDef = interfaceNameDefinitions.get(rawName);
1279
+ if (outputDef && hashBlockSchema(outputDef) === hashBlockSchema(blockSchema)) {
1280
+ return rawName;
1281
+ }
1282
+ }
1283
+ const baseName = variant === 'input' ? `${rawName}Input` : rawName;
1284
+ const existing = interfaceNameDefinitions.get(baseName);
1285
+ // The name is free - claim it.
1286
+ if (!existing) {
1287
+ interfaceNameDefinitions.set(baseName, blockSchema);
1288
+ return baseName;
1289
+ }
1290
+ const hash = hashBlockSchema(blockSchema);
1291
+ // The same block shape is already registered under this name, so reuse it.
1292
+ if (hashBlockSchema(existing) === hash) {
1293
+ return baseName;
1294
+ }
1295
+ // A different block already owns the name. Disambiguate this one with its hash.
1296
+ blockSchema.description = `Multiple blocks resolve to the \`${baseName}\` interface with different fields, so a content hash is appended to keep the generated types stable and unambiguous. Set a unique \`interfaceName\` on the block to choose the name yourself. See https://payloadcms.com/docs/typescript/generating-types#block-interface-name-collisions`;
1297
+ const uniqueName = `${baseName}_${hash}`;
1298
+ interfaceNameDefinitions.set(uniqueName, blockSchema);
1299
+ return uniqueName;
1300
+ }
1136
1301
  /**
1137
1302
  * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.
1138
- */ export function configToJSONSchema(config, defaultIDType, i18n, opts = {}) {
1139
- // a mutable Map to store custom top-level `interfaceName` types. Fields with an `interfaceName` property will be moved to the top-level definitions here
1303
+ */ export function configToJSONSchema(config, defaultIDType, i18n, { forceInlineBlocks } = {}) {
1304
+ // a mutable Map of top-level definitions in the generated JSON Schema.
1305
+ // - `array`/`group`/named-`tab` fields are registered here when they set
1306
+ // `interfaceName` (otherwise they stay inline).
1307
+ // - `block` configs always register here via `registerBlockInterface`, keyed by
1308
+ // `block.interfaceName` if set, else a PascalCase form of the slug (with a
1309
+ // content-hash suffix when two different blocks resolve to the same name).
1140
1310
  const interfaceNameDefinitions = new Map();
1311
+ // a mutable Set for raw TS source to be appended to `payload-types.ts`.
1312
+ const typeStringDefinitions = new Set();
1141
1313
  // Used for relationship fields, to determine whether to use a string or number type for the ID.
1142
1314
  const collectionIDFieldTypes = getCollectionIDFieldTypes({
1143
1315
  config,
@@ -1155,8 +1327,12 @@ function generateAuthOperationSchemas(collections) {
1155
1327
  entity: collection
1156
1328
  }))
1157
1329
  ];
1330
+ const generateInputTypes = config.typescript?.generateInputTypes === true;
1158
1331
  const entityDefinitions = entities.reduce((acc, { type, entity })=>{
1159
- acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, collectionIDFieldTypes, i18n, opts);
1332
+ acc[entity.slug] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks);
1333
+ if (generateInputTypes) {
1334
+ acc[`${entity.slug}_input`] = entityToJSONSchema(config, entity, interfaceNameDefinitions, defaultIDType, typeStringDefinitions, collectionIDFieldTypes, i18n, forceInlineBlocks, 'input');
1335
+ }
1160
1336
  const select = fieldsToSelectJSONSchema({
1161
1337
  config,
1162
1338
  fields: entity.flattenedFields,
@@ -1178,9 +1354,10 @@ function generateAuthOperationSchemas(collections) {
1178
1354
  const widgetSchemas = generateWidgetSchemas({
1179
1355
  collectionIDFieldTypes,
1180
1356
  config,
1357
+ forceInlineBlocks,
1181
1358
  i18n,
1182
1359
  interfaceNameDefinitions,
1183
- opts
1360
+ typeStringDefinitions
1184
1361
  });
1185
1362
  const authOperationDefinitions = [
1186
1363
  ...config.collections
@@ -1190,7 +1367,7 @@ function generateAuthOperationSchemas(collections) {
1190
1367
  }, {
1191
1368
  auth: {}
1192
1369
  });
1193
- const jobsSchemas = config.jobs ? generateJobsJSONSchemas(config, config.jobs, interfaceNameDefinitions, collectionIDFieldTypes, i18n) : {};
1370
+ const jobsSchemas = config.jobs ? generateJobsJSONSchemas(config, config.jobs, interfaceNameDefinitions, collectionIDFieldTypes, typeStringDefinitions, i18n) : {};
1194
1371
  const blocksDefinition = {
1195
1372
  type: 'object',
1196
1373
  additionalProperties: false,
@@ -1199,7 +1376,15 @@ function generateAuthOperationSchemas(collections) {
1199
1376
  };
1200
1377
  if (config?.blocks?.length) {
1201
1378
  for (const block of config.blocks){
1202
- const blockFieldSchemas = fieldsToJSONSchema(collectionIDFieldTypes, block.flattenedFields, interfaceNameDefinitions, config, i18n, opts);
1379
+ const blockFieldSchemas = fieldsToJSONSchema({
1380
+ collectionIDFieldTypes,
1381
+ config,
1382
+ fields: block.flattenedFields,
1383
+ forceInlineBlocks,
1384
+ i18n,
1385
+ interfaceNameDefinitions,
1386
+ typeStringDefinitions
1387
+ });
1203
1388
  const blockSchema = {
1204
1389
  type: 'object',
1205
1390
  additionalProperties: false,
@@ -1214,23 +1399,22 @@ function generateAuthOperationSchemas(collections) {
1214
1399
  ...blockFieldSchemas.required
1215
1400
  ]
1216
1401
  };
1217
- const interfaceName = block.interfaceName ?? block.slug;
1218
- interfaceNameDefinitions.set(interfaceName, blockSchema);
1219
1402
  blocksDefinition.properties[block.slug] = {
1220
- $ref: `#/definitions/${interfaceName}`
1403
+ $ref: `#/$defs/${registerBlockInterface(block, blockSchema, interfaceNameDefinitions)}`
1221
1404
  };
1222
1405
  blocksDefinition.required.push(block.slug);
1223
1406
  }
1224
1407
  }
1225
1408
  let jsonSchema = {
1226
- additionalProperties: false,
1227
- definitions: {
1409
+ $defs: {
1228
1410
  supportedTimezones: timezoneDefinitions,
1229
1411
  ...entityDefinitions,
1230
1412
  ...widgetSchemas.definitions,
1231
1413
  ...Object.fromEntries(interfaceNameDefinitions),
1232
1414
  ...authOperationDefinitions
1233
1415
  },
1416
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1417
+ additionalProperties: false,
1234
1418
  // These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type
1235
1419
  type: 'object',
1236
1420
  properties: {
@@ -1245,6 +1429,10 @@ function generateAuthOperationSchemas(collections) {
1245
1429
  globalsSelect: generateEntitySelectSchemas(config.globals || []),
1246
1430
  locale: generateLocaleEntitySchemas(config.localization),
1247
1431
  widgets: widgetSchemas.schema,
1432
+ ...generateInputTypes ? {
1433
+ collectionsInput: generateEntityInputSchemas(config.collections || []),
1434
+ globalsInput: generateEntityInputSchemas(config.globals || [])
1435
+ } : {},
1248
1436
  ...config.typescript?.strictDraftTypes ? {
1249
1437
  strictDraftTypes: {
1250
1438
  type: 'boolean',
@@ -1261,6 +1449,10 @@ function generateAuthOperationSchemas(collections) {
1261
1449
  'collectionsSelect',
1262
1450
  'collectionsJoins',
1263
1451
  'globalsSelect',
1452
+ ...generateInputTypes ? [
1453
+ 'collectionsInput',
1454
+ 'globalsInput'
1455
+ ] : [],
1264
1456
  ...config.typescript?.strictDraftTypes ? [
1265
1457
  'strictDraftTypes'
1266
1458
  ] : [],
@@ -1275,7 +1467,7 @@ function generateAuthOperationSchemas(collections) {
1275
1467
  };
1276
1468
  if (jobsSchemas.definitions?.size) {
1277
1469
  for (const [key, value] of jobsSchemas.definitions){
1278
- jsonSchema.definitions[key] = value;
1470
+ jsonSchema.$defs[key] = value;
1279
1471
  }
1280
1472
  }
1281
1473
  if (jobsSchemas.properties) {
@@ -1299,7 +1491,10 @@ function generateAuthOperationSchemas(collections) {
1299
1491
  });
1300
1492
  }
1301
1493
  }
1302
- return jsonSchema;
1494
+ return {
1495
+ jsonSchema,
1496
+ typeStringDefinitions
1497
+ };
1303
1498
  }
1304
1499
 
1305
1500
  //# sourceMappingURL=configToJSONSchema.js.map