@rakun-kit/core 1.5.13 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/README.md +105 -20
  2. package/dist/cjs/api/operations/manager-contract.js +8 -0
  3. package/dist/cjs/api/operations/manager-contract.js.map +1 -1
  4. package/dist/cjs/api/operations/manager-manifest.js +5 -0
  5. package/dist/cjs/api/operations/manager-manifest.js.map +1 -1
  6. package/dist/cjs/api/operations/manager.js +4 -0
  7. package/dist/cjs/api/operations/manager.js.map +1 -1
  8. package/dist/cjs/api/routes/manager/auth/markTourSeen.js +4 -1
  9. package/dist/cjs/api/routes/manager/auth/markTourSeen.js.map +1 -1
  10. package/dist/cjs/api/routes/manager/localeVariants.js +20 -14
  11. package/dist/cjs/api/routes/manager/localeVariants.js.map +1 -1
  12. package/dist/cjs/api/routes/manager/media/deleteMediaStorage.js +14 -9
  13. package/dist/cjs/api/routes/manager/media/deleteMediaStorage.js.map +1 -1
  14. package/dist/cjs/api/routes/manager/media/finalizeUpload.js +4 -0
  15. package/dist/cjs/api/routes/manager/media/finalizeUpload.js.map +1 -1
  16. package/dist/cjs/api/routes/manager/media/reimportMedia.js +20 -10
  17. package/dist/cjs/api/routes/manager/media/reimportMedia.js.map +1 -1
  18. package/dist/cjs/api/routes/manager/media/replaceMedia.js +224 -0
  19. package/dist/cjs/api/routes/manager/media/replaceMedia.js.map +1 -0
  20. package/dist/cjs/api/routes/manager/media/resolveMediaRecordUrls.js +14 -12
  21. package/dist/cjs/api/routes/manager/media/resolveMediaRecordUrls.js.map +1 -1
  22. package/dist/cjs/api/routes/manager/media/uploadBinary.js +112 -39
  23. package/dist/cjs/api/routes/manager/media/uploadBinary.js.map +1 -1
  24. package/dist/cjs/api/routes/web/llms.js +53 -52
  25. package/dist/cjs/api/routes/web/llms.js.map +1 -1
  26. package/dist/cjs/api/routes/web/page.js +47 -14
  27. package/dist/cjs/api/routes/web/page.js.map +1 -1
  28. package/dist/cjs/api/routes/web/sitemap.js +12 -2
  29. package/dist/cjs/api/routes/web/sitemap.js.map +1 -1
  30. package/dist/cjs/api/routes/web/staticPaths.js +4 -2
  31. package/dist/cjs/api/routes/web/staticPaths.js.map +1 -1
  32. package/dist/cjs/api/utils/dynamicData.js +193 -130
  33. package/dist/cjs/api/utils/dynamicData.js.map +1 -1
  34. package/dist/cjs/api/utils/index.js +2 -1
  35. package/dist/cjs/api/utils/index.js.map +1 -1
  36. package/dist/cjs/api/utils/mediaUploadKey.js +11 -1
  37. package/dist/cjs/api/utils/mediaUploadKey.js.map +1 -1
  38. package/dist/cjs/api/utils/populates/populateLinks.js +27 -55
  39. package/dist/cjs/api/utils/populates/populateLinks.js.map +1 -1
  40. package/dist/cjs/api/utils/populates/populateRelations.js +78 -43
  41. package/dist/cjs/api/utils/populates/populateRelations.js.map +1 -1
  42. package/dist/cjs/api/utils/routes/routeMapHelpers.js +44 -10
  43. package/dist/cjs/api/utils/routes/routeMapHelpers.js.map +1 -1
  44. package/dist/cjs/api/utils/routes/updateRoutesMap.js +12 -7
  45. package/dist/cjs/api/utils/routes/updateRoutesMap.js.map +1 -1
  46. package/dist/cjs/client.js +1 -0
  47. package/dist/cjs/client.js.map +1 -1
  48. package/dist/cjs/contracts.js +1 -0
  49. package/dist/cjs/contracts.js.map +1 -1
  50. package/dist/cjs/index.js +2 -2
  51. package/dist/cjs/index.js.map +1 -1
  52. package/dist/cjs/internal-content-types/Backup.js +3 -3
  53. package/dist/cjs/internal-content-types/Backup.js.map +1 -1
  54. package/dist/cjs/internal-content-types/ContentComment.js +2 -2
  55. package/dist/cjs/internal-content-types/ContentComment.js.map +1 -1
  56. package/dist/cjs/internal-content-types/ContentReview.js +31 -18
  57. package/dist/cjs/internal-content-types/ContentReview.js.map +1 -1
  58. package/dist/cjs/internal-content-types/ContentReviewDecision.js +1 -1
  59. package/dist/cjs/internal-content-types/ContentReviewDecision.js.map +1 -1
  60. package/dist/cjs/internal-content-types/ContentReviewPolicy.js +2 -2
  61. package/dist/cjs/internal-content-types/ContentReviewPolicy.js.map +1 -1
  62. package/dist/cjs/internal-content-types/ContentVersion.js +4 -4
  63. package/dist/cjs/internal-content-types/ContentVersion.js.map +1 -1
  64. package/dist/cjs/internal-content-types/Language.js +1 -1
  65. package/dist/cjs/internal-content-types/Language.js.map +1 -1
  66. package/dist/cjs/internal-content-types/LlmsSettings.js +8 -9
  67. package/dist/cjs/internal-content-types/LlmsSettings.js.map +1 -1
  68. package/dist/cjs/internal-content-types/LoginIpBlock.js +1 -1
  69. package/dist/cjs/internal-content-types/LoginIpBlock.js.map +1 -1
  70. package/dist/cjs/internal-content-types/ManagerNotification.js +2 -2
  71. package/dist/cjs/internal-content-types/ManagerNotification.js.map +1 -1
  72. package/dist/cjs/internal-content-types/ManagerUser.js +9 -9
  73. package/dist/cjs/internal-content-types/ManagerUser.js.map +1 -1
  74. package/dist/cjs/internal-content-types/Media.js +18 -17
  75. package/dist/cjs/internal-content-types/Media.js.map +1 -1
  76. package/dist/cjs/internal-content-types/MediaFolder.js +2 -2
  77. package/dist/cjs/internal-content-types/MediaFolder.js.map +1 -1
  78. package/dist/cjs/internal-content-types/MfaChallenge.js +2 -2
  79. package/dist/cjs/internal-content-types/MfaChallenge.js.map +1 -1
  80. package/dist/cjs/internal-content-types/Migration.js +5 -5
  81. package/dist/cjs/internal-content-types/Migration.js.map +1 -1
  82. package/dist/cjs/internal-content-types/PasswordResetToken.js +1 -1
  83. package/dist/cjs/internal-content-types/PasswordResetToken.js.map +1 -1
  84. package/dist/cjs/internal-content-types/PreviewSnapshot.js +2 -2
  85. package/dist/cjs/internal-content-types/PreviewSnapshot.js.map +1 -1
  86. package/dist/cjs/internal-content-types/Redirect.js +4 -4
  87. package/dist/cjs/internal-content-types/Redirect.js.map +1 -1
  88. package/dist/cjs/internal-content-types/RobotsRule.js +3 -3
  89. package/dist/cjs/internal-content-types/RobotsRule.js.map +1 -1
  90. package/dist/cjs/internal-content-types/Route.js +2 -2
  91. package/dist/cjs/internal-content-types/Route.js.map +1 -1
  92. package/dist/cjs/internal-content-types/RouteLayoutModule.js +1 -1
  93. package/dist/cjs/internal-content-types/RouteLayoutModule.js.map +1 -1
  94. package/dist/cjs/internal-content-types/RouteLayoutModuleOverride.js +1 -1
  95. package/dist/cjs/internal-content-types/RouteLayoutModuleOverride.js.map +1 -1
  96. package/dist/cjs/internal-content-types/RouteMap.js +2 -2
  97. package/dist/cjs/internal-content-types/RouteMap.js.map +1 -1
  98. package/dist/cjs/internal-content-types/RouteSettings.js +1 -1
  99. package/dist/cjs/internal-content-types/RouteSettings.js.map +1 -1
  100. package/dist/cjs/internal-content-types/Seo.js +34 -20
  101. package/dist/cjs/internal-content-types/Seo.js.map +1 -1
  102. package/dist/cjs/internal-content-types/SeoAudit.js +29 -0
  103. package/dist/cjs/internal-content-types/SeoAudit.js.map +1 -0
  104. package/dist/cjs/internal-content-types/SeoSettings.js +5 -5
  105. package/dist/cjs/internal-content-types/SeoSettings.js.map +1 -1
  106. package/dist/cjs/internal-content-types/StructuredData.js +102 -0
  107. package/dist/cjs/internal-content-types/StructuredData.js.map +1 -0
  108. package/dist/cjs/internal-content-types/UserMfa.js +6 -6
  109. package/dist/cjs/internal-content-types/UserMfa.js.map +1 -1
  110. package/dist/cjs/internal-content-types/WebAuthnRegChallenge.js +1 -1
  111. package/dist/cjs/internal-content-types/WebAuthnRegChallenge.js.map +1 -1
  112. package/dist/cjs/internal-content-types/index.js +2 -0
  113. package/dist/cjs/internal-content-types/index.js.map +1 -1
  114. package/dist/cjs/lib/ContentType.js +11 -3
  115. package/dist/cjs/lib/ContentType.js.map +1 -1
  116. package/dist/cjs/lib/Registry.js +1 -0
  117. package/dist/cjs/lib/Registry.js.map +1 -1
  118. package/dist/cjs/lib/fields/Boolean.js +5 -1
  119. package/dist/cjs/lib/fields/Boolean.js.map +1 -1
  120. package/dist/cjs/lib/fields/Breadcrums.js +5 -1
  121. package/dist/cjs/lib/fields/Breadcrums.js.map +1 -1
  122. package/dist/cjs/lib/fields/ContentReference.js +22 -6
  123. package/dist/cjs/lib/fields/ContentReference.js.map +1 -1
  124. package/dist/cjs/lib/fields/Date.js +11 -5
  125. package/dist/cjs/lib/fields/Date.js.map +1 -1
  126. package/dist/cjs/lib/fields/Field.js +71 -45
  127. package/dist/cjs/lib/fields/Field.js.map +1 -1
  128. package/dist/cjs/lib/fields/Fields.js +2 -0
  129. package/dist/cjs/lib/fields/Fields.js.map +1 -1
  130. package/dist/cjs/lib/fields/File.js +74 -25
  131. package/dist/cjs/lib/fields/File.js.map +1 -1
  132. package/dist/cjs/lib/fields/Iterator.js +1 -1
  133. package/dist/cjs/lib/fields/Iterator.js.map +1 -1
  134. package/dist/cjs/lib/fields/Link.js +26 -15
  135. package/dist/cjs/lib/fields/Link.js.map +1 -1
  136. package/dist/cjs/lib/fields/List.js +34 -12
  137. package/dist/cjs/lib/fields/List.js.map +1 -1
  138. package/dist/cjs/lib/fields/Menu.js +56 -0
  139. package/dist/cjs/lib/fields/Menu.js.map +1 -0
  140. package/dist/cjs/lib/fields/Number.js +3 -2
  141. package/dist/cjs/lib/fields/Number.js.map +1 -1
  142. package/dist/cjs/lib/fields/Relation.js +17 -15
  143. package/dist/cjs/lib/fields/Relation.js.map +1 -1
  144. package/dist/cjs/lib/fields/Select.js +20 -4
  145. package/dist/cjs/lib/fields/Select.js.map +1 -1
  146. package/dist/cjs/lib/fields/SelfRelation.js +4 -3
  147. package/dist/cjs/lib/fields/SelfRelation.js.map +1 -1
  148. package/dist/cjs/lib/fields/SimpleList.js +38 -14
  149. package/dist/cjs/lib/fields/SimpleList.js.map +1 -1
  150. package/dist/cjs/lib/fields/String.js +34 -36
  151. package/dist/cjs/lib/fields/String.js.map +1 -1
  152. package/dist/cjs/lib/fields/index.js +1 -0
  153. package/dist/cjs/lib/fields/index.js.map +1 -1
  154. package/dist/cjs/media/imageOptimization.js.map +1 -1
  155. package/dist/cjs/media/mediaOptimization.js +18 -0
  156. package/dist/cjs/media/mediaOptimization.js.map +1 -0
  157. package/dist/cjs/media/videoOptimization.js +142 -0
  158. package/dist/cjs/media/videoOptimization.js.map +1 -0
  159. package/dist/cjs/orm/createIndexes.js +4 -0
  160. package/dist/cjs/orm/createIndexes.js.map +1 -1
  161. package/dist/cjs/schemas/manager/media/finalizeUpload.js +10 -1
  162. package/dist/cjs/schemas/manager/media/finalizeUpload.js.map +1 -1
  163. package/dist/cjs/schemas/manager/media/reimportMedia.js.map +1 -1
  164. package/dist/cjs/schemas/manager/media/replaceMedia.js +21 -0
  165. package/dist/cjs/schemas/manager/media/replaceMedia.js.map +1 -0
  166. package/dist/cjs/schemas/web/page.js +2 -3
  167. package/dist/cjs/schemas/web/page.js.map +1 -1
  168. package/dist/cjs/web/page.js +1 -1
  169. package/dist/cjs/web/page.js.map +1 -1
  170. package/dist/docs/index.md +117 -18
  171. package/dist/esm/api/operations/index.d.ts +154 -26
  172. package/dist/esm/api/operations/index.d.ts.map +1 -1
  173. package/dist/esm/api/operations/manager-contract.d.ts +108 -8
  174. package/dist/esm/api/operations/manager-contract.d.ts.map +1 -1
  175. package/dist/esm/api/operations/manager-contract.js +9 -1
  176. package/dist/esm/api/operations/manager-contract.js.map +1 -1
  177. package/dist/esm/api/operations/manager-manifest.d.ts +5 -0
  178. package/dist/esm/api/operations/manager-manifest.d.ts.map +1 -1
  179. package/dist/esm/api/operations/manager-manifest.js +5 -0
  180. package/dist/esm/api/operations/manager-manifest.js.map +1 -1
  181. package/dist/esm/api/operations/manager.d.ts +108 -8
  182. package/dist/esm/api/operations/manager.d.ts.map +1 -1
  183. package/dist/esm/api/operations/manager.js +4 -0
  184. package/dist/esm/api/operations/manager.js.map +1 -1
  185. package/dist/esm/api/operations/web-contract.d.ts +46 -18
  186. package/dist/esm/api/operations/web-contract.d.ts.map +1 -1
  187. package/dist/esm/api/operations/web.d.ts +46 -18
  188. package/dist/esm/api/operations/web.d.ts.map +1 -1
  189. package/dist/esm/api/routes/manager/auth/getSession.d.ts +2 -2
  190. package/dist/esm/api/routes/manager/auth/markTourSeen.d.ts +3 -3
  191. package/dist/esm/api/routes/manager/auth/markTourSeen.d.ts.map +1 -1
  192. package/dist/esm/api/routes/manager/auth/markTourSeen.js +4 -1
  193. package/dist/esm/api/routes/manager/auth/markTourSeen.js.map +1 -1
  194. package/dist/esm/api/routes/manager/auth/updateAccount.d.ts +2 -2
  195. package/dist/esm/api/routes/manager/auth/updateTutorialPreferences.d.ts +2 -2
  196. package/dist/esm/api/routes/manager/media/deleteMediaStorage.d.ts +1 -0
  197. package/dist/esm/api/routes/manager/media/deleteMediaStorage.d.ts.map +1 -1
  198. package/dist/esm/api/routes/manager/media/deleteMediaStorage.js +14 -9
  199. package/dist/esm/api/routes/manager/media/deleteMediaStorage.js.map +1 -1
  200. package/dist/esm/api/routes/manager/media/finalizeUpload.d.ts.map +1 -1
  201. package/dist/esm/api/routes/manager/media/finalizeUpload.js +5 -1
  202. package/dist/esm/api/routes/manager/media/finalizeUpload.js.map +1 -1
  203. package/dist/esm/api/routes/manager/media/reimportMedia.d.ts +12 -3
  204. package/dist/esm/api/routes/manager/media/reimportMedia.d.ts.map +1 -1
  205. package/dist/esm/api/routes/manager/media/reimportMedia.js +18 -8
  206. package/dist/esm/api/routes/manager/media/reimportMedia.js.map +1 -1
  207. package/dist/esm/api/routes/manager/media/replaceMedia.d.ts +32 -0
  208. package/dist/esm/api/routes/manager/media/replaceMedia.d.ts.map +1 -0
  209. package/dist/esm/api/routes/manager/media/replaceMedia.js +218 -0
  210. package/dist/esm/api/routes/manager/media/replaceMedia.js.map +1 -0
  211. package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.d.ts.map +1 -1
  212. package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.js +14 -12
  213. package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.js.map +1 -1
  214. package/dist/esm/api/routes/manager/media/uploadBinary.d.ts.map +1 -1
  215. package/dist/esm/api/routes/manager/media/uploadBinary.js +112 -39
  216. package/dist/esm/api/routes/manager/media/uploadBinary.js.map +1 -1
  217. package/dist/esm/api/routes/web/llms.d.ts +1 -1
  218. package/dist/esm/api/routes/web/llms.d.ts.map +1 -1
  219. package/dist/esm/api/routes/web/llms.js +43 -50
  220. package/dist/esm/api/routes/web/llms.js.map +1 -1
  221. package/dist/esm/api/routes/web/page.d.ts +2 -0
  222. package/dist/esm/api/routes/web/page.d.ts.map +1 -1
  223. package/dist/esm/api/routes/web/page.js +45 -14
  224. package/dist/esm/api/routes/web/page.js.map +1 -1
  225. package/dist/esm/api/routes/web/previewPage.d.ts +23 -9
  226. package/dist/esm/api/routes/web/previewPage.d.ts.map +1 -1
  227. package/dist/esm/api/routes/web/sitemap.d.ts.map +1 -1
  228. package/dist/esm/api/routes/web/sitemap.js +12 -2
  229. package/dist/esm/api/routes/web/sitemap.js.map +1 -1
  230. package/dist/esm/api/routes/web/staticPaths.d.ts.map +1 -1
  231. package/dist/esm/api/routes/web/staticPaths.js +4 -2
  232. package/dist/esm/api/routes/web/staticPaths.js.map +1 -1
  233. package/dist/esm/api/utils/dynamicData.d.ts +6 -5
  234. package/dist/esm/api/utils/dynamicData.d.ts.map +1 -1
  235. package/dist/esm/api/utils/dynamicData.js +200 -138
  236. package/dist/esm/api/utils/dynamicData.js.map +1 -1
  237. package/dist/esm/api/utils/getUser.d.ts +2 -2
  238. package/dist/esm/api/utils/index.d.ts +25 -25
  239. package/dist/esm/api/utils/index.d.ts.map +1 -1
  240. package/dist/esm/api/utils/index.js +25 -25
  241. package/dist/esm/api/utils/index.js.map +1 -1
  242. package/dist/esm/api/utils/mediaUploadKey.d.ts +2 -0
  243. package/dist/esm/api/utils/mediaUploadKey.d.ts.map +1 -1
  244. package/dist/esm/api/utils/mediaUploadKey.js +9 -0
  245. package/dist/esm/api/utils/mediaUploadKey.js.map +1 -1
  246. package/dist/esm/api/utils/populates/populateLinks.d.ts +4 -2
  247. package/dist/esm/api/utils/populates/populateLinks.d.ts.map +1 -1
  248. package/dist/esm/api/utils/populates/populateLinks.js +30 -58
  249. package/dist/esm/api/utils/populates/populateLinks.js.map +1 -1
  250. package/dist/esm/api/utils/populates/populateRelations.d.ts +2 -2
  251. package/dist/esm/api/utils/populates/populateRelations.d.ts.map +1 -1
  252. package/dist/esm/api/utils/populates/populateRelations.js +85 -50
  253. package/dist/esm/api/utils/populates/populateRelations.js.map +1 -1
  254. package/dist/esm/api/utils/reviews.d.ts +2 -2
  255. package/dist/esm/api/utils/routes/routeMapHelpers.d.ts +4 -1
  256. package/dist/esm/api/utils/routes/routeMapHelpers.d.ts.map +1 -1
  257. package/dist/esm/api/utils/routes/routeMapHelpers.js +42 -9
  258. package/dist/esm/api/utils/routes/routeMapHelpers.js.map +1 -1
  259. package/dist/esm/api/utils/routes/updateRoutesMap.d.ts.map +1 -1
  260. package/dist/esm/api/utils/routes/updateRoutesMap.js +12 -7
  261. package/dist/esm/api/utils/routes/updateRoutesMap.js.map +1 -1
  262. package/dist/esm/client.d.ts +2 -0
  263. package/dist/esm/client.d.ts.map +1 -1
  264. package/dist/esm/client.js +1 -0
  265. package/dist/esm/client.js.map +1 -1
  266. package/dist/esm/contracts.d.ts +1 -0
  267. package/dist/esm/contracts.d.ts.map +1 -1
  268. package/dist/esm/contracts.js +1 -0
  269. package/dist/esm/contracts.js.map +1 -1
  270. package/dist/esm/index.d.ts +1 -0
  271. package/dist/esm/index.d.ts.map +1 -1
  272. package/dist/esm/index.js +2 -2
  273. package/dist/esm/index.js.map +1 -1
  274. package/dist/esm/internal-content-types/ApiOperation.d.ts +56 -16
  275. package/dist/esm/internal-content-types/ApiOperation.d.ts.map +1 -1
  276. package/dist/esm/internal-content-types/Backup.d.ts +1044 -99
  277. package/dist/esm/internal-content-types/Backup.d.ts.map +1 -1
  278. package/dist/esm/internal-content-types/Backup.js +3 -3
  279. package/dist/esm/internal-content-types/Backup.js.map +1 -1
  280. package/dist/esm/internal-content-types/BackupDocument.d.ts +56 -16
  281. package/dist/esm/internal-content-types/BackupDocument.d.ts.map +1 -1
  282. package/dist/esm/internal-content-types/ContentComment.d.ts +5833 -614
  283. package/dist/esm/internal-content-types/ContentComment.d.ts.map +1 -1
  284. package/dist/esm/internal-content-types/ContentComment.js +2 -2
  285. package/dist/esm/internal-content-types/ContentComment.js.map +1 -1
  286. package/dist/esm/internal-content-types/ContentCommentReadState.d.ts +4384 -896
  287. package/dist/esm/internal-content-types/ContentCommentReadState.d.ts.map +1 -1
  288. package/dist/esm/internal-content-types/ContentReview.d.ts +33582 -9735
  289. package/dist/esm/internal-content-types/ContentReview.d.ts.map +1 -1
  290. package/dist/esm/internal-content-types/ContentReview.js +31 -18
  291. package/dist/esm/internal-content-types/ContentReview.js.map +1 -1
  292. package/dist/esm/internal-content-types/ContentReviewDecision.d.ts +4777 -914
  293. package/dist/esm/internal-content-types/ContentReviewDecision.d.ts.map +1 -1
  294. package/dist/esm/internal-content-types/ContentReviewDecision.js +1 -1
  295. package/dist/esm/internal-content-types/ContentReviewDecision.js.map +1 -1
  296. package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts +1547 -40
  297. package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts.map +1 -1
  298. package/dist/esm/internal-content-types/ContentReviewPolicy.js +2 -2
  299. package/dist/esm/internal-content-types/ContentReviewPolicy.js.map +1 -1
  300. package/dist/esm/internal-content-types/ContentTemplate.d.ts +38 -12
  301. package/dist/esm/internal-content-types/ContentTemplate.d.ts.map +1 -1
  302. package/dist/esm/internal-content-types/ContentVersion.d.ts +1168 -48
  303. package/dist/esm/internal-content-types/ContentVersion.d.ts.map +1 -1
  304. package/dist/esm/internal-content-types/ContentVersion.js +4 -4
  305. package/dist/esm/internal-content-types/ContentVersion.js.map +1 -1
  306. package/dist/esm/internal-content-types/HelloWorld.d.ts +15 -5
  307. package/dist/esm/internal-content-types/HelloWorld.d.ts.map +1 -1
  308. package/dist/esm/internal-content-types/Language.d.ts +109 -9
  309. package/dist/esm/internal-content-types/Language.d.ts.map +1 -1
  310. package/dist/esm/internal-content-types/Language.js +1 -1
  311. package/dist/esm/internal-content-types/Language.js.map +1 -1
  312. package/dist/esm/internal-content-types/LiteralTranslation.d.ts +28 -8
  313. package/dist/esm/internal-content-types/LiteralTranslation.d.ts.map +1 -1
  314. package/dist/esm/internal-content-types/LlmsSettings.d.ts +2351 -914
  315. package/dist/esm/internal-content-types/LlmsSettings.d.ts.map +1 -1
  316. package/dist/esm/internal-content-types/LlmsSettings.js +8 -9
  317. package/dist/esm/internal-content-types/LlmsSettings.js.map +1 -1
  318. package/dist/esm/internal-content-types/LoginIpBlock.d.ts +119 -13
  319. package/dist/esm/internal-content-types/LoginIpBlock.d.ts.map +1 -1
  320. package/dist/esm/internal-content-types/LoginIpBlock.js +1 -1
  321. package/dist/esm/internal-content-types/LoginIpBlock.js.map +1 -1
  322. package/dist/esm/internal-content-types/ManagerFavorite.d.ts +4370 -892
  323. package/dist/esm/internal-content-types/ManagerFavorite.d.ts.map +1 -1
  324. package/dist/esm/internal-content-types/ManagerNotification.d.ts +8876 -1441
  325. package/dist/esm/internal-content-types/ManagerNotification.d.ts.map +1 -1
  326. package/dist/esm/internal-content-types/ManagerNotification.js +2 -2
  327. package/dist/esm/internal-content-types/ManagerNotification.js.map +1 -1
  328. package/dist/esm/internal-content-types/ManagerRole.d.ts +17 -5
  329. package/dist/esm/internal-content-types/ManagerRole.d.ts.map +1 -1
  330. package/dist/esm/internal-content-types/ManagerUser.d.ts +1775 -48
  331. package/dist/esm/internal-content-types/ManagerUser.d.ts.map +1 -1
  332. package/dist/esm/internal-content-types/ManagerUser.js +9 -9
  333. package/dist/esm/internal-content-types/ManagerUser.js.map +1 -1
  334. package/dist/esm/internal-content-types/Media.d.ts +6101 -774
  335. package/dist/esm/internal-content-types/Media.d.ts.map +1 -1
  336. package/dist/esm/internal-content-types/Media.js +18 -17
  337. package/dist/esm/internal-content-types/Media.js.map +1 -1
  338. package/dist/esm/internal-content-types/MediaFolder.d.ts +401 -14
  339. package/dist/esm/internal-content-types/MediaFolder.d.ts.map +1 -1
  340. package/dist/esm/internal-content-types/MediaFolder.js +2 -2
  341. package/dist/esm/internal-content-types/MediaFolder.js.map +1 -1
  342. package/dist/esm/internal-content-types/MfaChallenge.d.ts +4915 -956
  343. package/dist/esm/internal-content-types/MfaChallenge.d.ts.map +1 -1
  344. package/dist/esm/internal-content-types/MfaChallenge.js +2 -2
  345. package/dist/esm/internal-content-types/MfaChallenge.js.map +1 -1
  346. package/dist/esm/internal-content-types/Migration.d.ts +1180 -39
  347. package/dist/esm/internal-content-types/Migration.d.ts.map +1 -1
  348. package/dist/esm/internal-content-types/Migration.js +5 -5
  349. package/dist/esm/internal-content-types/Migration.js.map +1 -1
  350. package/dist/esm/internal-content-types/MigrationLock.d.ts +8 -4
  351. package/dist/esm/internal-content-types/MigrationLock.d.ts.map +1 -1
  352. package/dist/esm/internal-content-types/Page.d.ts +45 -15
  353. package/dist/esm/internal-content-types/Page.d.ts.map +1 -1
  354. package/dist/esm/internal-content-types/PasswordResetToken.d.ts +4452 -894
  355. package/dist/esm/internal-content-types/PasswordResetToken.d.ts.map +1 -1
  356. package/dist/esm/internal-content-types/PasswordResetToken.js +1 -1
  357. package/dist/esm/internal-content-types/PasswordResetToken.js.map +1 -1
  358. package/dist/esm/internal-content-types/PreviewSnapshot.d.ts +646 -34
  359. package/dist/esm/internal-content-types/PreviewSnapshot.d.ts.map +1 -1
  360. package/dist/esm/internal-content-types/PreviewSnapshot.js +2 -2
  361. package/dist/esm/internal-content-types/PreviewSnapshot.js.map +1 -1
  362. package/dist/esm/internal-content-types/Redirect.d.ts +1462 -96
  363. package/dist/esm/internal-content-types/Redirect.d.ts.map +1 -1
  364. package/dist/esm/internal-content-types/Redirect.js +4 -4
  365. package/dist/esm/internal-content-types/Redirect.js.map +1 -1
  366. package/dist/esm/internal-content-types/RobotsRule.d.ts +862 -23
  367. package/dist/esm/internal-content-types/RobotsRule.d.ts.map +1 -1
  368. package/dist/esm/internal-content-types/RobotsRule.js +3 -3
  369. package/dist/esm/internal-content-types/RobotsRule.js.map +1 -1
  370. package/dist/esm/internal-content-types/Route.d.ts +424 -27
  371. package/dist/esm/internal-content-types/Route.d.ts.map +1 -1
  372. package/dist/esm/internal-content-types/Route.js +2 -2
  373. package/dist/esm/internal-content-types/Route.js.map +1 -1
  374. package/dist/esm/internal-content-types/RouteLayoutModule.d.ts +350 -25
  375. package/dist/esm/internal-content-types/RouteLayoutModule.d.ts.map +1 -1
  376. package/dist/esm/internal-content-types/RouteLayoutModule.js +1 -1
  377. package/dist/esm/internal-content-types/RouteLayoutModule.js.map +1 -1
  378. package/dist/esm/internal-content-types/RouteLayoutModuleOverride.d.ts +340 -21
  379. package/dist/esm/internal-content-types/RouteLayoutModuleOverride.d.ts.map +1 -1
  380. package/dist/esm/internal-content-types/RouteLayoutModuleOverride.js +1 -1
  381. package/dist/esm/internal-content-types/RouteLayoutModuleOverride.js.map +1 -1
  382. package/dist/esm/internal-content-types/RouteLocaleVariant.d.ts +84 -24
  383. package/dist/esm/internal-content-types/RouteLocaleVariant.d.ts.map +1 -1
  384. package/dist/esm/internal-content-types/RouteMap.d.ts +427 -22
  385. package/dist/esm/internal-content-types/RouteMap.d.ts.map +1 -1
  386. package/dist/esm/internal-content-types/RouteMap.js +2 -2
  387. package/dist/esm/internal-content-types/RouteMap.js.map +1 -1
  388. package/dist/esm/internal-content-types/RouteSettings.d.ts +1610 -534
  389. package/dist/esm/internal-content-types/RouteSettings.d.ts.map +1 -1
  390. package/dist/esm/internal-content-types/RouteSettings.js +1 -1
  391. package/dist/esm/internal-content-types/RouteSettings.js.map +1 -1
  392. package/dist/esm/internal-content-types/SchemaState.d.ts +32 -12
  393. package/dist/esm/internal-content-types/SchemaState.d.ts.map +1 -1
  394. package/dist/esm/internal-content-types/Seo.d.ts +3188 -605
  395. package/dist/esm/internal-content-types/Seo.d.ts.map +1 -1
  396. package/dist/esm/internal-content-types/Seo.js +34 -20
  397. package/dist/esm/internal-content-types/Seo.js.map +1 -1
  398. package/dist/esm/internal-content-types/SeoAudit.d.ts +2724 -0
  399. package/dist/esm/internal-content-types/SeoAudit.d.ts.map +1 -0
  400. package/dist/esm/internal-content-types/SeoAudit.js +23 -0
  401. package/dist/esm/internal-content-types/SeoAudit.js.map +1 -0
  402. package/dist/esm/internal-content-types/SeoSettings.d.ts +16072 -4113
  403. package/dist/esm/internal-content-types/SeoSettings.d.ts.map +1 -1
  404. package/dist/esm/internal-content-types/SeoSettings.js +5 -5
  405. package/dist/esm/internal-content-types/SeoSettings.js.map +1 -1
  406. package/dist/esm/internal-content-types/Session.d.ts +4365 -893
  407. package/dist/esm/internal-content-types/Session.d.ts.map +1 -1
  408. package/dist/esm/internal-content-types/StructuredData.d.ts +6095 -0
  409. package/dist/esm/internal-content-types/StructuredData.d.ts.map +1 -0
  410. package/dist/esm/internal-content-types/StructuredData.js +96 -0
  411. package/dist/esm/internal-content-types/StructuredData.js.map +1 -0
  412. package/dist/esm/internal-content-types/UserMfa.d.ts +5285 -903
  413. package/dist/esm/internal-content-types/UserMfa.d.ts.map +1 -1
  414. package/dist/esm/internal-content-types/UserMfa.js +6 -6
  415. package/dist/esm/internal-content-types/UserMfa.js.map +1 -1
  416. package/dist/esm/internal-content-types/WebAuthnCredential.d.ts +4409 -905
  417. package/dist/esm/internal-content-types/WebAuthnCredential.d.ts.map +1 -1
  418. package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts +4466 -898
  419. package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts.map +1 -1
  420. package/dist/esm/internal-content-types/WebAuthnRegChallenge.js +1 -1
  421. package/dist/esm/internal-content-types/WebAuthnRegChallenge.js.map +1 -1
  422. package/dist/esm/internal-content-types/index.d.ts +2 -0
  423. package/dist/esm/internal-content-types/index.d.ts.map +1 -1
  424. package/dist/esm/internal-content-types/index.js +2 -0
  425. package/dist/esm/internal-content-types/index.js.map +1 -1
  426. package/dist/esm/internal-content-types/syncAdminRole.d.ts +1 -1
  427. package/dist/esm/lib/ContentType.d.ts.map +1 -1
  428. package/dist/esm/lib/ContentType.js +11 -3
  429. package/dist/esm/lib/ContentType.js.map +1 -1
  430. package/dist/esm/lib/Registry.d.ts.map +1 -1
  431. package/dist/esm/lib/Registry.js +1 -0
  432. package/dist/esm/lib/Registry.js.map +1 -1
  433. package/dist/esm/lib/fields/Boolean.d.ts +4 -3
  434. package/dist/esm/lib/fields/Boolean.d.ts.map +1 -1
  435. package/dist/esm/lib/fields/Boolean.js +7 -3
  436. package/dist/esm/lib/fields/Boolean.js.map +1 -1
  437. package/dist/esm/lib/fields/Breadcrums.d.ts +2 -1
  438. package/dist/esm/lib/fields/Breadcrums.d.ts.map +1 -1
  439. package/dist/esm/lib/fields/Breadcrums.js +5 -1
  440. package/dist/esm/lib/fields/Breadcrums.js.map +1 -1
  441. package/dist/esm/lib/fields/ContentReference.d.ts +12 -5
  442. package/dist/esm/lib/fields/ContentReference.d.ts.map +1 -1
  443. package/dist/esm/lib/fields/ContentReference.js +25 -9
  444. package/dist/esm/lib/fields/ContentReference.js.map +1 -1
  445. package/dist/esm/lib/fields/Date.d.ts +5 -4
  446. package/dist/esm/lib/fields/Date.d.ts.map +1 -1
  447. package/dist/esm/lib/fields/Date.js +13 -7
  448. package/dist/esm/lib/fields/Date.js.map +1 -1
  449. package/dist/esm/lib/fields/Field.d.ts +105 -46
  450. package/dist/esm/lib/fields/Field.d.ts.map +1 -1
  451. package/dist/esm/lib/fields/Field.js +71 -45
  452. package/dist/esm/lib/fields/Field.js.map +1 -1
  453. package/dist/esm/lib/fields/Fields.d.ts +3 -0
  454. package/dist/esm/lib/fields/Fields.d.ts.map +1 -1
  455. package/dist/esm/lib/fields/Fields.js +2 -0
  456. package/dist/esm/lib/fields/Fields.js.map +1 -1
  457. package/dist/esm/lib/fields/File.d.ts +32 -6
  458. package/dist/esm/lib/fields/File.d.ts.map +1 -1
  459. package/dist/esm/lib/fields/File.js +76 -27
  460. package/dist/esm/lib/fields/File.js.map +1 -1
  461. package/dist/esm/lib/fields/Iterator.d.ts +2 -1
  462. package/dist/esm/lib/fields/Iterator.d.ts.map +1 -1
  463. package/dist/esm/lib/fields/Iterator.js +2 -2
  464. package/dist/esm/lib/fields/Iterator.js.map +1 -1
  465. package/dist/esm/lib/fields/Link.d.ts +32 -9
  466. package/dist/esm/lib/fields/Link.d.ts.map +1 -1
  467. package/dist/esm/lib/fields/Link.js +28 -18
  468. package/dist/esm/lib/fields/Link.js.map +1 -1
  469. package/dist/esm/lib/fields/List.d.ts +11 -10
  470. package/dist/esm/lib/fields/List.d.ts.map +1 -1
  471. package/dist/esm/lib/fields/List.js +37 -15
  472. package/dist/esm/lib/fields/List.js.map +1 -1
  473. package/dist/esm/lib/fields/Menu.d.ts +26 -0
  474. package/dist/esm/lib/fields/Menu.d.ts.map +1 -0
  475. package/dist/esm/lib/fields/Menu.js +49 -0
  476. package/dist/esm/lib/fields/Menu.js.map +1 -0
  477. package/dist/esm/lib/fields/Number.d.ts +4 -3
  478. package/dist/esm/lib/fields/Number.d.ts.map +1 -1
  479. package/dist/esm/lib/fields/Number.js +5 -4
  480. package/dist/esm/lib/fields/Number.js.map +1 -1
  481. package/dist/esm/lib/fields/Relation.d.ts +14 -13
  482. package/dist/esm/lib/fields/Relation.d.ts.map +1 -1
  483. package/dist/esm/lib/fields/Relation.js +21 -19
  484. package/dist/esm/lib/fields/Relation.js.map +1 -1
  485. package/dist/esm/lib/fields/Select.d.ts +10 -3
  486. package/dist/esm/lib/fields/Select.d.ts.map +1 -1
  487. package/dist/esm/lib/fields/Select.js +22 -6
  488. package/dist/esm/lib/fields/Select.js.map +1 -1
  489. package/dist/esm/lib/fields/SelfRelation.d.ts +5 -4
  490. package/dist/esm/lib/fields/SelfRelation.d.ts.map +1 -1
  491. package/dist/esm/lib/fields/SelfRelation.js +7 -6
  492. package/dist/esm/lib/fields/SelfRelation.js.map +1 -1
  493. package/dist/esm/lib/fields/SimpleList.d.ts +11 -4
  494. package/dist/esm/lib/fields/SimpleList.d.ts.map +1 -1
  495. package/dist/esm/lib/fields/SimpleList.js +40 -16
  496. package/dist/esm/lib/fields/SimpleList.js.map +1 -1
  497. package/dist/esm/lib/fields/String.d.ts +6 -5
  498. package/dist/esm/lib/fields/String.d.ts.map +1 -1
  499. package/dist/esm/lib/fields/String.js +38 -40
  500. package/dist/esm/lib/fields/String.js.map +1 -1
  501. package/dist/esm/lib/fields/index.d.ts +1 -0
  502. package/dist/esm/lib/fields/index.d.ts.map +1 -1
  503. package/dist/esm/lib/fields/index.js +1 -0
  504. package/dist/esm/lib/fields/index.js.map +1 -1
  505. package/dist/esm/manager.d.ts +5 -0
  506. package/dist/esm/manager.d.ts.map +1 -1
  507. package/dist/esm/media/imageOptimization.d.ts +7 -1
  508. package/dist/esm/media/imageOptimization.d.ts.map +1 -1
  509. package/dist/esm/media/imageOptimization.js.map +1 -1
  510. package/dist/esm/media/mediaOptimization.d.ts +12 -0
  511. package/dist/esm/media/mediaOptimization.d.ts.map +1 -0
  512. package/dist/esm/media/mediaOptimization.js +15 -0
  513. package/dist/esm/media/mediaOptimization.js.map +1 -0
  514. package/dist/esm/media/videoOptimization.d.ts +19 -0
  515. package/dist/esm/media/videoOptimization.d.ts.map +1 -0
  516. package/dist/esm/media/videoOptimization.js +136 -0
  517. package/dist/esm/media/videoOptimization.js.map +1 -0
  518. package/dist/esm/orm/createIndexes.d.ts.map +1 -1
  519. package/dist/esm/orm/createIndexes.js +5 -1
  520. package/dist/esm/orm/createIndexes.js.map +1 -1
  521. package/dist/esm/schemas/manager/media/finalizeUpload.d.ts +43 -0
  522. package/dist/esm/schemas/manager/media/finalizeUpload.d.ts.map +1 -1
  523. package/dist/esm/schemas/manager/media/finalizeUpload.js +9 -0
  524. package/dist/esm/schemas/manager/media/finalizeUpload.js.map +1 -1
  525. package/dist/esm/schemas/manager/media/reimportMedia.d.ts +17 -1
  526. package/dist/esm/schemas/manager/media/reimportMedia.d.ts.map +1 -1
  527. package/dist/esm/schemas/manager/media/reimportMedia.js.map +1 -1
  528. package/dist/esm/schemas/manager/media/replaceMedia.d.ts +107 -0
  529. package/dist/esm/schemas/manager/media/replaceMedia.d.ts.map +1 -0
  530. package/dist/esm/schemas/manager/media/replaceMedia.js +15 -0
  531. package/dist/esm/schemas/manager/media/replaceMedia.js.map +1 -0
  532. package/dist/esm/schemas/web/page.d.ts +147 -6
  533. package/dist/esm/schemas/web/page.d.ts.map +1 -1
  534. package/dist/esm/schemas/web/page.js +2 -3
  535. package/dist/esm/schemas/web/page.js.map +1 -1
  536. package/dist/esm/schemas/web/previewPage.d.ts +75 -6
  537. package/dist/esm/schemas/web/previewPage.d.ts.map +1 -1
  538. package/dist/esm/web/page.d.ts +7 -7
  539. package/dist/esm/web/page.d.ts.map +1 -1
  540. package/dist/esm/web/page.js +1 -1
  541. package/dist/esm/web/page.js.map +1 -1
  542. package/dist/tsconfig.build.tsbuildinfo +1 -1
  543. package/package.json +140 -138
@@ -1,6 +1,7 @@
1
1
  import { Route, RouteMap } from '../../../internal-content-types/index.js';
2
2
  import { DEFAULT_STATIC_PAGE_TTL } from '../../../schemas/web/page.js';
3
3
  import { getMongoService } from '../../../orm/index.js';
4
+ import { filterVisibleRouteMapEntries } from '../../utils/routes/routeMapHelpers.js';
4
5
  export const buildStaticPathsOutput = (routes, routeMap) => {
5
6
  const staticRouteIds = new Set(routes
6
7
  .filter((route) => route.hasPage && route.dynamic === false)
@@ -27,10 +28,11 @@ export const getStaticPaths = async () => {
27
28
  db.list(RouteMap, {
28
29
  options: {
29
30
  limit: 'all',
30
- fields: ['path', 'routeId'],
31
+ fields: ['path', 'routeId', 'contentType', 'contentTypeId'],
31
32
  },
32
33
  }),
33
34
  ]);
34
- return buildStaticPathsOutput(routes.items, routeMap.items);
35
+ const visibleRouteMap = await filterVisibleRouteMapEntries(db, routeMap.items);
36
+ return buildStaticPathsOutput(routes.items, visibleRouteMap);
35
37
  };
36
38
  //# sourceMappingURL=staticPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"staticPaths.js","sourceRoot":"","sources":["../../../../../src/api/routes/web/staticPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAkC,EAClC,QAAuC,EACpB,EAAE;IACrB,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM;SACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;SAC3D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACrC,CAAA;IAED,OAAO;QACL,KAAK,EAAE,QAAQ;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,uBAAuB;SAC7B,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAgC,EAAE;IACnE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAA;IAClC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC/B;SACF,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC5B;SACF,CAAC;KACH,CAAC,CAAA;IAEF,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7D,CAAC,CAAA"}
1
+ {"version":3,"file":"staticPaths.js","sourceRoot":"","sources":["../../../../../src/api/routes/web/staticPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAkC,EAClC,QAAuC,EACpB,EAAE;IACrB,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM;SACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;SAC3D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACrC,CAAA;IAED,OAAO;QACL,KAAK,EAAE,QAAQ;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,uBAAuB;SAC7B,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAgC,EAAE;IACnE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAA;IAClC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC/B;SACF,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC;aAC5D;SACF,CAAC;KACH,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,MAAM,4BAA4B,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE9E,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;AAC9D,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
- import type ContentType from "../../lib/ContentType.js";
2
- import { type DynamicRelatedCollectionSource } from "../../lib/dynamicData.js";
3
- import type { DataPopulatedWithoutApiOnly, DBOutput } from "../../lib/types/index.js";
4
- import type { DBService } from "../../orm/dbService.js";
1
+ import type ContentType from '../../lib/ContentType.js';
2
+ import { type DynamicRelatedCollectionSource } from '../../lib/dynamicData.js';
3
+ import type { DataPopulatedWithoutApiOnly, DBOutput } from '../../lib/types/index.js';
4
+ import type { DBService } from '../../orm/dbService.js';
5
5
  type ResolveOptions = {
6
6
  db: DBService;
7
7
  contentType?: ContentType;
@@ -9,7 +9,7 @@ type ResolveOptions = {
9
9
  contentType: ContentType;
10
10
  value: Record<string, unknown>;
11
11
  };
12
- surface: "web" | "preview";
12
+ surface: 'web' | 'preview';
13
13
  };
14
14
  export declare const resolveRelatedCollectionValue: ({ db, source, currentSource, currentContentType, populateDocument, }: {
15
15
  db: DBService;
@@ -20,6 +20,7 @@ export declare const resolveRelatedCollectionValue: ({ db, source, currentSource
20
20
  }) => Promise<any[] | undefined>;
21
21
  export declare const getDynamicListItemContentTypeName: (field: ContentType["fields"][string] | undefined, itemName: string) => string;
22
22
  export declare const mergeDynamicListItems: (currentValue: unknown, resolvedValue: unknown) => unknown[];
23
+ export declare const mergeDynamicArrayItems: (currentValue: unknown, resolvedValue: unknown) => any[];
23
24
  export declare const resolveDynamicData: <T>(value: T, options: ResolveOptions) => Promise<T>;
24
25
  export declare const stripDynamicBindings: <T>(value: T) => T;
25
26
  export declare const resolveContentOutput: <T extends ContentType>({ db, contentType, data, surface, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicData.d.ts","sourceRoot":"","sources":["../../../../src/api/utils/dynamicData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAUL,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AASrD,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,CAAC;IACF,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC;CAC5B,CAAC;AAgWF,eAAO,MAAM,6BAA6B,GAAU,sEASjD;IACD,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,8BAA8B,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,gBAAgB,CAAC,EAAE,CACjB,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,KAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvC,+BA6CA,CAAC;AAqNF,eAAO,MAAM,iCAAiC,GAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,UAAU,MAAM,WAC8C,CAAC;AAiFjE,eAAO,MAAM,qBAAqB,GAChC,cAAc,OAAO,EACrB,eAAe,OAAO,cAsBvB,CAAC;AAkEF,eAAO,MAAM,kBAAkB,GAAU,CAAC,EACxC,OAAO,CAAC,EACR,SAAS,cAAc,KACtB,OAAO,CAAC,CAAC,CA2CX,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAYlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,CAAC,SAAS,WAAW,EAAE,qCAK/D;IACD,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,EAAE,CAAC,CAAC;IACf,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC;CAC5B,uj5mBAiBA,CAAC"}
1
+ {"version":3,"file":"dynamicData.d.ts","sourceRoot":"","sources":["../../../../src/api/utils/dynamicData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAUL,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAS,MAAM,iBAAiB,CAAA;AAEnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AASpD,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,WAAW,CAAA;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,CAAA;IACD,OAAO,EAAE,KAAK,GAAG,SAAS,CAAA;CAC3B,CAAA;AA6UD,eAAO,MAAM,6BAA6B,GAAU,sEAOjD;IACD,EAAE,EAAE,SAAS,CAAA;IACb,MAAM,EAAE,8BAA8B,CAAA;IACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,kBAAkB,EAAE,WAAW,CAAA;IAC/B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC3F,+BA2CA,CAAA;AA+PD,eAAO,MAAM,iCAAiC,GAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,UAAU,MAAM,WAIjB,CAAA;AAyED,eAAO,MAAM,qBAAqB,GAAI,cAAc,OAAO,EAAE,eAAe,OAAO,cAiBlF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,cAAc,OAAO,EAAE,eAAe,OAAO,UAYnF,CAAA;AAiED,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,CAAC,CAuCxF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAYlD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,CAAC,SAAS,WAAW,EAAE,qCAK/D;IACD,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,EAAE,CAAC,CAAA;IACd,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACpC,OAAO,EAAE,KAAK,GAAG,SAAS,CAAA;CAC3B,uj5mBAiBA,CAAA"}
@@ -1,105 +1,113 @@
1
- import { getRakunBootstrapOptions } from "../../bootstrapState.js";
2
- import { DYNAMIC_BINDINGS_FIELD_NAME, DynamicQueryCurrentValueSchema, DynamicQueryDocumentValueSchema, getDynamicDocumentBindings, isDynamicDataSourceContentTypeAllowed, } from "../../lib/dynamicData.js";
3
- import { Logger } from "../../lib/Logger.js";
4
- import { getContentTypeByName } from "../../lib/Registry.js";
5
- import { runOnGetHook } from "../hooks/runContentHooks.js";
6
- import { getLink } from "./getLink.js";
7
- import { populateLinks } from "./populates/populateLinks.js";
8
- import { populateRelations } from "./populates/populateRelations.js";
9
- import { parseSafeManagerQuery } from "./safeManagerQuery.js";
1
+ import { getRakunBootstrapOptions } from '../../bootstrapState.js';
2
+ import { DYNAMIC_BINDINGS_FIELD_NAME, DynamicQueryCurrentValueSchema, DynamicQueryDocumentValueSchema, getDynamicDocumentBindings, isDynamicDataSourceContentTypeAllowed, } from '../../lib/dynamicData.js';
3
+ import { Logger } from '../../lib/Logger.js';
4
+ import { getContentTypeByName } from '../../lib/Registry.js';
5
+ import { runOnGetHook } from '../hooks/runContentHooks.js';
6
+ import { getLink } from './getLink.js';
7
+ import { populateFields } from './populates/populateLinks.js';
8
+ import { populateRelations } from './populates/populateRelations.js';
9
+ import { parseSafeManagerQuery } from './safeManagerQuery.js';
10
10
  import { getContentHookContext } from '../hooks/context.js';
11
11
  import { resolveBreadcrumsFields } from './breadcrums.js';
12
- const isRecord = (value) => !!value &&
13
- typeof value === "object" &&
14
- !Array.isArray(value) &&
15
- !(value instanceof Date);
12
+ const isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);
16
13
  const getAtPath = (value, path) => {
17
14
  if (!path)
18
15
  return undefined;
19
- return path.split(".").reduce((current, segment) => {
16
+ return path.split('.').reduce((current, segment) => {
20
17
  if (!isRecord(current))
21
18
  return undefined;
22
19
  return current[segment];
23
20
  }, value);
24
21
  };
25
- const isPublicDocument = (value) => value._trashed !== true &&
26
- value._visibility !== "draft" &&
27
- value._visibility !== "trash";
22
+ const setAtPath = (target, path, value) => {
23
+ const segments = path.split('.');
24
+ let current = target;
25
+ for (const [index, segment] of segments.entries()) {
26
+ if (index === segments.length - 1) {
27
+ Object.defineProperty(current, segment, {
28
+ configurable: true,
29
+ enumerable: true,
30
+ value,
31
+ writable: true,
32
+ });
33
+ return;
34
+ }
35
+ const existing = current[segment];
36
+ const next = isRecord(existing) ? existing : {};
37
+ if (next !== existing) {
38
+ Object.defineProperty(current, segment, {
39
+ configurable: true,
40
+ enumerable: true,
41
+ value: next,
42
+ writable: true,
43
+ });
44
+ }
45
+ current = next;
46
+ }
47
+ };
48
+ const isPublicDocument = (value) => value._trashed !== true && value._visibility !== 'draft' && value._visibility !== 'trash';
28
49
  const getAllowedSourceContentType = (sourceContentTypeName) => {
29
50
  const contentType = getContentTypeByName(sourceContentTypeName);
30
- return isDynamicDataSourceContentTypeAllowed(contentType)
31
- ? contentType
51
+ return isDynamicDataSourceContentTypeAllowed(contentType) ? contentType : undefined;
52
+ };
53
+ const getDynamicTargetField = (contentType, path) => {
54
+ const [fieldName, ...rest] = path.split('.');
55
+ const field = contentType.fields[fieldName];
56
+ if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
57
+ return undefined;
58
+ }
59
+ if (rest.length === 0)
60
+ return field;
61
+ return rest.length === 1 &&
62
+ field.meta.capabilities.dynamic?.mapProperties === true &&
63
+ field.meta.capabilities.dynamic?.properties?.[rest[0]]
64
+ ? field
32
65
  : undefined;
33
66
  };
34
- const fileSourcePaths = new Set([
35
- "url",
36
- "previewUrl",
37
- "name",
38
- "title",
39
- "alt",
40
- "mime",
41
- "srcSet",
42
- "width",
43
- "height",
44
- "size",
45
- ]);
46
- const linkSourcePaths = new Set(["href", "title"]);
47
67
  const isDynamicSourcePathAllowed = (contentType, path, depth = 0) => {
48
68
  if (!path)
49
69
  return false;
50
- const [fieldName, ...rest] = path.split(".");
70
+ const [fieldName, ...rest] = path.split('.');
51
71
  const field = contentType.fields[fieldName];
52
72
  if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
53
73
  return false;
54
74
  }
55
75
  if (rest.length === 0)
56
76
  return true;
57
- if (field.meta.type === "Relation" &&
58
- "contentType" in field &&
59
- depth < 3) {
60
- return isDynamicSourcePathAllowed(field.contentType, rest.join("."), depth + 1);
61
- }
62
- if (field.meta.type === "File") {
63
- return rest.length === 1 && fileSourcePaths.has(rest[0]);
64
- }
65
- if (field.meta.type === "Link") {
66
- return rest.length === 1 && linkSourcePaths.has(rest[0]);
77
+ if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field && depth < 3) {
78
+ return isDynamicSourcePathAllowed(field.contentType, rest.join('.'), depth + 1);
67
79
  }
68
- return false;
80
+ return rest.length === 1 && !!field.meta.capabilities.dynamic?.properties?.[rest[0]];
69
81
  };
70
82
  const getDynamicSourceField = (contentType, path, depth = 0) => {
71
83
  if (!path)
72
84
  return undefined;
73
- const [fieldName, ...rest] = path.split(".");
85
+ const [fieldName, ...rest] = path.split('.');
74
86
  const field = contentType.fields[fieldName];
75
87
  if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
76
88
  return undefined;
77
89
  }
78
90
  if (rest.length === 0)
79
91
  return field;
80
- if (field.meta.type === "Relation" &&
81
- "contentType" in field &&
82
- depth < 3) {
83
- return getDynamicSourceField(field.contentType, rest.join("."), depth + 1);
92
+ if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field && depth < 3) {
93
+ return getDynamicSourceField(field.contentType, rest.join('.'), depth + 1);
84
94
  }
85
95
  return undefined;
86
96
  };
87
97
  const isArraySourceField = (field) => {
88
98
  if (!field)
89
99
  return false;
90
- if (field.meta.type === "List")
91
- return true;
92
- return "isMultiple" in field.meta && field.meta.isMultiple === true;
100
+ return field.meta.capabilities.valueKind === 'array';
93
101
  };
94
102
  const getRelationTarget = (field) => {
95
103
  if (!field || field.getIsTranslatable())
96
104
  return undefined;
97
- if (field.meta.type === "Relation" && "contentType" in field) {
105
+ if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field) {
98
106
  return field.contentType;
99
107
  }
100
- if (field.meta.ui === "SimpleList" && "field" in field) {
108
+ if (field.meta.capabilities.dynamic?.collection === 'homogeneous' && 'field' in field) {
101
109
  const itemField = field.field;
102
- if (itemField.meta.type === "Relation" && "contentType" in itemField) {
110
+ if (itemField.meta.capabilities.dynamic?.relation === true && 'contentType' in itemField) {
103
111
  return itemField.contentType;
104
112
  }
105
113
  }
@@ -109,8 +117,8 @@ const getDocumentListItemContentType = (field, itemName) => {
109
117
  if (!field || !isArraySourceField(field) || field.getIsTranslatable()) {
110
118
  return undefined;
111
119
  }
112
- if ((field.meta.ui === "List" || field.meta.ui === "Iterator") &&
113
- "fields" in field &&
120
+ if (field.meta.capabilities.dynamic?.collection === 'heterogeneous' &&
121
+ 'fields' in field &&
114
122
  Array.isArray(field.fields)) {
115
123
  if (!itemName)
116
124
  return undefined;
@@ -140,7 +148,7 @@ const loadSourceDocument = async (db, source) => {
140
148
  if (!item || !isPublicDocument(item)) {
141
149
  return undefined;
142
150
  }
143
- return (await populateRelations(await populateLinks(item)));
151
+ return (await populateRelations(await populateFields(item)));
144
152
  };
145
153
  const resolveSourceValue = async ({ db, source, currentSource, currentContentType, allowCurrentSource, contextSource, }) => {
146
154
  const usesCurrentRecord = allowCurrentSource === true &&
@@ -163,8 +171,8 @@ const resolveSourceValue = async ({ db, source, currentSource, currentContentTyp
163
171
  : await loadSourceDocument(db, source);
164
172
  if (!sourceDocument)
165
173
  return undefined;
166
- if (source.virtual === "href") {
167
- const sourceId = typeof sourceDocument._id === "string" ? sourceDocument._id : source.id;
174
+ if (source.virtual === 'href') {
175
+ const sourceId = typeof sourceDocument._id === 'string' ? sourceDocument._id : source.id;
168
176
  return sourceId ? await resolveHref(source, sourceId) : undefined;
169
177
  }
170
178
  if (!isDynamicSourcePathAllowed(sourceContentType, source.path)) {
@@ -172,17 +180,17 @@ const resolveSourceValue = async ({ db, source, currentSource, currentContentTyp
172
180
  }
173
181
  return getAtPath(sourceDocument, source.path);
174
182
  };
175
- const isRelatedCollectionSource = (source) => "kind" in source && source.kind === "relatedCollection";
176
- const isNestedListSource = (source) => "kind" in source && source.kind === "list";
183
+ const isRelatedCollectionSource = (source) => 'kind' in source && source.kind === 'relatedCollection';
184
+ const isNestedListSource = (source) => 'kind' in source && source.kind === 'list';
177
185
  const addPublicContentFilter = (query) => ({
178
186
  ...query,
179
187
  filter: {
180
188
  ...query.filter,
181
189
  _trashed: { $ne: true },
182
- _visibility: { $nin: ["draft", "trash"] },
190
+ _visibility: { $nin: ['draft', 'trash'] },
183
191
  },
184
192
  });
185
- const isDynamicQueryCurrentPathAllowed = (contentType, path) => path === "_id" || isDynamicSourcePathAllowed(contentType, path);
193
+ const isDynamicQueryCurrentPathAllowed = (contentType, path) => path === '_id' || isDynamicSourcePathAllowed(contentType, path);
186
194
  const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, currentDocument, currentDocumentContentType) => {
187
195
  const currentValue = DynamicQueryCurrentValueSchema.safeParse(value);
188
196
  if (currentValue.success) {
@@ -191,9 +199,7 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
191
199
  return { success: false };
192
200
  }
193
201
  const resolved = getAtPath(currentItem, path);
194
- return resolved === undefined
195
- ? { success: false }
196
- : { success: true, value: resolved };
202
+ return resolved === undefined ? { success: false } : { success: true, value: resolved };
197
203
  }
198
204
  const documentValue = DynamicQueryDocumentValueSchema.safeParse(value);
199
205
  if (documentValue.success) {
@@ -202,9 +208,7 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
202
208
  return { success: false };
203
209
  }
204
210
  const resolved = getAtPath(currentDocument, path);
205
- return resolved === undefined
206
- ? { success: false }
207
- : { success: true, value: resolved };
211
+ return resolved === undefined ? { success: false } : { success: true, value: resolved };
208
212
  }
209
213
  if (Array.isArray(value)) {
210
214
  const items = [];
@@ -228,12 +232,12 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
228
232
  }
229
233
  return { success: true, value };
230
234
  };
231
- export const resolveRelatedCollectionValue = async ({ db, source, currentSource, currentContentType, populateDocument = async (sourceItem) => (await populateRelations(await populateLinks(sourceItem))), }) => {
235
+ export const resolveRelatedCollectionValue = async ({ db, source, currentSource, currentContentType, populateDocument = async (sourceItem) => (await populateRelations(await populateFields(sourceItem))), }) => {
232
236
  if (!isDynamicDataSourceContentTypeAllowed(currentContentType)) {
233
237
  return undefined;
234
238
  }
235
239
  const sourceId = currentSource._id;
236
- if (typeof sourceId !== "string")
240
+ if (typeof sourceId !== 'string')
237
241
  return undefined;
238
242
  const relatedContentType = getAllowedSourceContentType(source.contentType);
239
243
  if (!relatedContentType)
@@ -264,16 +268,16 @@ export const resolveRelatedCollectionValue = async ({ db, source, currentSource,
264
268
  };
265
269
  const resolveListMapSourceValue = async ({ db, source, targetField, currentSource, currentContentType, contextSource, }) => {
266
270
  if (isNestedListSource(source)) {
267
- const targetContentType = getListTargetContentType(targetField, source.itemName);
268
- if (!targetContentType)
271
+ if (!targetField || !getDynamicListTarget(targetField, source.itemName)) {
269
272
  return undefined;
273
+ }
270
274
  return await resolveListBinding({
271
275
  db,
272
276
  binding: source,
273
277
  contextSource,
274
278
  currentDocument: currentSource,
275
279
  currentDocumentContentType: currentContentType,
276
- itemContentTypeName: targetContentType.name,
280
+ targetField,
277
281
  });
278
282
  }
279
283
  if (isRelatedCollectionSource(source)) {
@@ -293,7 +297,7 @@ const resolveListMapSourceValue = async ({ db, source, targetField, currentSourc
293
297
  contextSource,
294
298
  });
295
299
  };
296
- const resolveListBinding = async ({ db, binding, contextSource, currentDocument, currentDocumentContentType, itemContentTypeName, }) => {
300
+ const resolveListBinding = async ({ db, binding, contextSource, currentDocument, currentDocumentContentType, targetField, }) => {
297
301
  const documentSource = binding.source;
298
302
  const rootDocumentSource = contextSource ?? {
299
303
  contentType: currentDocumentContentType,
@@ -305,6 +309,9 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
305
309
  if (!sourceContentType) {
306
310
  return undefined;
307
311
  }
312
+ const target = getDynamicListTarget(targetField, binding.itemName);
313
+ if (!target)
314
+ return undefined;
308
315
  let sourceItems;
309
316
  if (documentSource) {
310
317
  if (documentSource.contentType !== currentDocumentContentType.name) {
@@ -319,9 +326,7 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
319
326
  if (!Array.isArray(value))
320
327
  return undefined;
321
328
  sourceItems = documentSource.itemName
322
- ? value.flatMap((item) => isRecord(item) &&
323
- item.name === documentSource.itemName &&
324
- "value" in item
329
+ ? value.flatMap((item) => isRecord(item) && item.name === documentSource.itemName && 'value' in item
325
330
  ? [item.value]
326
331
  : [])
327
332
  : value;
@@ -342,105 +347,147 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
342
347
  return undefined;
343
348
  const populated = documentSource
344
349
  ? sourceItem
345
- : (await populateRelations(await populateLinks(sourceItem)));
346
- const targetContentType = getContentTypeByName(itemContentTypeName);
347
- const mapped = Object.fromEntries(await Promise.all(Object.entries(binding.map).map(async ([targetField, source]) => [
348
- targetField,
350
+ : (await populateRelations(await populateFields(sourceItem)));
351
+ const mappedEntries = await Promise.all(Object.entries(binding.map).map(async ([targetPath, source]) => [
352
+ targetPath,
349
353
  await resolveListMapSourceValue({
350
354
  db,
351
355
  source,
352
- targetField: targetContentType?.fields[targetField],
356
+ targetField: target.kind === 'linkArray'
357
+ ? undefined
358
+ : getDynamicTargetField(target.contentType, targetPath),
353
359
  currentSource: populated,
354
360
  currentContentType: sourceContentType,
355
361
  contextSource: rootDocumentSource,
356
362
  }),
357
- ])));
363
+ ]));
364
+ const mapped = {};
365
+ mappedEntries
366
+ .sort(([left], [right]) => left.split('.').length - right.split('.').length)
367
+ .forEach(([targetPath, value]) => setAtPath(mapped, targetPath, value));
368
+ if (target.kind === 'linkArray')
369
+ return mapped;
370
+ const targetValue = {
371
+ _id: typeof sourceItem._id === 'string'
372
+ ? `${binding.itemName}:${sourceItem._id}`
373
+ : `${binding.itemName}:${index}`,
374
+ _type: target.contentType.name,
375
+ ...mapped,
376
+ };
377
+ if (target.kind === 'relationArray')
378
+ return targetValue;
358
379
  return {
359
380
  name: binding.itemName,
360
- value: {
361
- _id: typeof sourceItem._id === "string"
362
- ? `${binding.itemName}:${sourceItem._id}`
363
- : `${binding.itemName}:${index}`,
364
- _type: itemContentTypeName,
365
- ...mapped,
366
- },
381
+ value: targetValue,
367
382
  };
368
383
  }));
369
384
  return resolvedItems.filter((item) => item !== undefined);
370
385
  };
371
- const getListTargetContentType = (field, itemName) => {
372
- if (!field || (field.meta.ui !== "List" && field.meta.ui !== "Iterator")) {
386
+ const getBlocksTargetContentType = (field, itemName) => {
387
+ if (!field || field.meta.capabilities.dynamic?.collection !== 'heterogeneous') {
373
388
  return undefined;
374
389
  }
375
- if (!("fields" in field) || !Array.isArray(field.fields)) {
390
+ if (!('fields' in field) || !Array.isArray(field.fields)) {
376
391
  return undefined;
377
392
  }
378
393
  const entry = field.fields.find((item) => item.name === itemName);
379
394
  if (!entry ||
380
- entry.field.meta.type !== "Relation" ||
381
- !("contentType" in entry.field)) {
395
+ entry.field.meta.capabilities.dynamic?.relation !== true ||
396
+ !('contentType' in entry.field)) {
382
397
  return undefined;
383
398
  }
384
399
  return entry.field.contentType;
385
400
  };
386
- export const getDynamicListItemContentTypeName = (field, itemName) => getListTargetContentType(field, itemName)?.name ?? itemName;
401
+ const getSimpleListItemField = (field) => {
402
+ if (!field ||
403
+ field.meta.capabilities.dynamic?.collection !== 'homogeneous' ||
404
+ !('field' in field)) {
405
+ return undefined;
406
+ }
407
+ return field.field;
408
+ };
409
+ const getDynamicListTarget = (field, itemName) => {
410
+ const blocksContentType = getBlocksTargetContentType(field, itemName);
411
+ if (blocksContentType) {
412
+ return { kind: 'blocks', contentType: blocksContentType };
413
+ }
414
+ const itemField = getSimpleListItemField(field);
415
+ if (!itemField)
416
+ return undefined;
417
+ if (itemField.meta.capabilities.dynamic?.relation === true && 'contentType' in itemField) {
418
+ const contentType = itemField.contentType;
419
+ if (itemName !== contentType.name)
420
+ return undefined;
421
+ return {
422
+ kind: 'relationArray',
423
+ contentType,
424
+ };
425
+ }
426
+ const itemTypeName = itemField.meta.editor ?? itemField.meta.type;
427
+ return itemField.meta.capabilities.dynamic?.mapProperties === true &&
428
+ itemField.meta.capabilities.dynamic?.properties &&
429
+ itemName === itemTypeName
430
+ ? { kind: 'linkArray' }
431
+ : undefined;
432
+ };
433
+ export const getDynamicListItemContentTypeName = (field, itemName) => {
434
+ const target = getDynamicListTarget(field, itemName);
435
+ return target && target.kind !== 'linkArray' ? target.contentType.name : itemName;
436
+ };
387
437
  const filterListBindingMap = (contentType, fieldName, binding) => {
388
- const targetContentType = getListTargetContentType(contentType.fields[fieldName], binding.itemName);
389
- if (!targetContentType)
390
- return binding;
391
- return filterListBindingForTarget(targetContentType, binding);
438
+ return filterListBindingForTarget(contentType.fields[fieldName], binding);
392
439
  };
393
- const filterListBindingForTarget = (targetContentType, binding) => {
440
+ const filterListBindingForTarget = (targetField, binding) => {
441
+ const target = getDynamicListTarget(targetField, binding.itemName);
442
+ if (!target)
443
+ return { ...binding, map: {} };
394
444
  return {
395
445
  ...binding,
396
- map: Object.fromEntries(Object.entries(binding.map).flatMap(([targetField, source]) => {
397
- if (!targetContentType.allowsDynamicBindingForField(targetField)) {
446
+ map: Object.fromEntries(Object.entries(binding.map).flatMap(([targetPath, source]) => {
447
+ if (target.kind === 'linkArray') {
448
+ return targetField &&
449
+ 'field' in targetField &&
450
+ !!targetField.field.meta.capabilities.dynamic
451
+ ?.properties?.[targetPath] &&
452
+ !isNestedListSource(source)
453
+ ? [[targetPath, source]]
454
+ : [];
455
+ }
456
+ const field = getDynamicTargetField(target.contentType, targetPath);
457
+ if (!field) {
398
458
  return [];
399
459
  }
400
460
  if (!isNestedListSource(source)) {
401
- return [[targetField, source]];
461
+ return [[targetPath, source]];
402
462
  }
403
- const nestedTargetContentType = getListTargetContentType(targetContentType.fields[targetField], source.itemName);
404
- return nestedTargetContentType
405
- ? [
406
- [
407
- targetField,
408
- filterListBindingForTarget(nestedTargetContentType, source),
409
- ],
410
- ]
411
- : [];
463
+ if (targetPath.includes('.'))
464
+ return [];
465
+ const nestedTarget = getDynamicListTarget(field, source.itemName);
466
+ return nestedTarget ? [[targetPath, filterListBindingForTarget(field, source)]] : [];
412
467
  })),
413
468
  };
414
469
  };
415
470
  const getListItemStableKey = (item) => {
416
471
  if (!isRecord(item))
417
472
  return undefined;
418
- const name = typeof item.name === "string" ? item.name : "";
473
+ const name = typeof item.name === 'string' ? item.name : '';
419
474
  const value = item.value;
420
- if (isRecord(value) && typeof value._id === "string") {
421
- const id = value._id.startsWith(`${name}:`)
422
- ? value._id.slice(name.length + 1)
423
- : value._id;
475
+ if (isRecord(value) && typeof value._id === 'string') {
476
+ const id = value._id.startsWith(`${name}:`) ? value._id.slice(name.length + 1) : value._id;
424
477
  return `${name}:${id}`;
425
478
  }
426
- if (isRecord(value) &&
427
- isRecord(value.data) &&
428
- typeof value.data._id === "string") {
479
+ if (isRecord(value) && isRecord(value.data) && typeof value.data._id === 'string') {
429
480
  return `${name}:${value.data._id}`;
430
481
  }
431
482
  return undefined;
432
483
  };
433
484
  const isListValueItem = (item) => isRecord(item) &&
434
- typeof item.name === "string" &&
435
- Object.prototype.hasOwnProperty.call(item, "value") &&
485
+ typeof item.name === 'string' &&
486
+ Object.prototype.hasOwnProperty.call(item, 'value') &&
436
487
  item.value !== undefined;
437
488
  export const mergeDynamicListItems = (currentValue, resolvedValue) => {
438
- const currentItems = Array.isArray(currentValue)
439
- ? currentValue.filter(isListValueItem)
440
- : [];
441
- const resolvedItems = Array.isArray(resolvedValue)
442
- ? resolvedValue.filter(isListValueItem)
443
- : [];
489
+ const currentItems = Array.isArray(currentValue) ? currentValue.filter(isListValueItem) : [];
490
+ const resolvedItems = Array.isArray(resolvedValue) ? resolvedValue.filter(isListValueItem) : [];
444
491
  const seen = new Set();
445
492
  const merged = [];
446
493
  for (const item of [...resolvedItems, ...currentItems]) {
@@ -454,6 +501,19 @@ export const mergeDynamicListItems = (currentValue, resolvedValue) => {
454
501
  }
455
502
  return merged;
456
503
  };
504
+ export const mergeDynamicArrayItems = (currentValue, resolvedValue) => {
505
+ const currentItems = Array.isArray(currentValue) ? currentValue : [];
506
+ const resolvedItems = Array.isArray(resolvedValue) ? resolvedValue : [];
507
+ const seenIds = new Set();
508
+ return [...resolvedItems, ...currentItems].filter((item) => {
509
+ if (!isRecord(item) || typeof item._id !== 'string')
510
+ return true;
511
+ if (seenIds.has(item._id))
512
+ return false;
513
+ seenIds.add(item._id);
514
+ return true;
515
+ });
516
+ };
457
517
  const resolveRecordBindings = async ({ db, contentType, value, contextSource, }) => {
458
518
  const bindings = getDynamicDocumentBindings(value[DYNAMIC_BINDINGS_FIELD_NAME]);
459
519
  if (!bindings)
@@ -475,13 +535,14 @@ const resolveRecordBindings = async ({ db, contentType, value, contextSource, })
475
535
  }
476
536
  }
477
537
  catch (error) {
478
- Logger.error("dynamicData: field binding failed", error);
538
+ Logger.error('dynamicData: field binding failed', error);
479
539
  }
480
540
  }
481
541
  for (const [field, binding] of Object.entries(bindings.lists ?? {})) {
482
542
  if (!contentType.allowsDynamicBindingForField(field))
483
543
  continue;
484
544
  try {
545
+ const targetField = contentType.fields[field];
485
546
  const filteredBinding = filterListBindingMap(contentType, field, binding);
486
547
  const resolved = await resolveListBinding({
487
548
  db,
@@ -489,14 +550,17 @@ const resolveRecordBindings = async ({ db, contentType, value, contextSource, })
489
550
  contextSource,
490
551
  currentDocument: contextSource?.value ?? next,
491
552
  currentDocumentContentType: contextSource?.contentType ?? contentType,
492
- itemContentTypeName: getDynamicListItemContentTypeName(contentType.fields[field], binding.itemName),
553
+ targetField,
493
554
  });
494
555
  if (resolved !== undefined) {
495
- next[field] = mergeDynamicListItems(next[field], resolved);
556
+ next[field] =
557
+ targetField.meta.capabilities.dynamic?.collection === 'homogeneous'
558
+ ? mergeDynamicArrayItems(next[field], resolved)
559
+ : mergeDynamicListItems(next[field], resolved);
496
560
  }
497
561
  }
498
562
  catch (error) {
499
- Logger.error("dynamicData: list binding failed", error);
563
+ Logger.error('dynamicData: list binding failed', error);
500
564
  }
501
565
  }
502
566
  return next;
@@ -508,9 +572,7 @@ export const resolveDynamicData = async (value, options) => {
508
572
  if (!isRecord(value))
509
573
  return value;
510
574
  const contentType = options.contentType ??
511
- (typeof value._type === "string"
512
- ? getContentTypeByName(value._type)
513
- : undefined);
575
+ (typeof value._type === 'string' ? getContentTypeByName(value._type) : undefined);
514
576
  const boundValue = contentType
515
577
  ? await resolveRecordBindings({
516
578
  db: options.db,