@phtngyn/cms 0.2.0-beta.7 → 0.3.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 (524) hide show
  1. package/LICENSE +18 -10
  2. package/README.md +59 -401
  3. package/drizzle/20261003215543_initial/migration.sql +251 -0
  4. package/drizzle/20261003215543_initial/snapshot.json +1941 -0
  5. package/package.json +75 -71
  6. package/src/Authoring.d.ts +41 -49
  7. package/src/Authoring.js +1 -1
  8. package/src/Blocks-BrxSemnd.js +40 -0
  9. package/src/Client.d.ts +8186 -0
  10. package/src/Client.js +41 -0
  11. package/src/Collections.d.ts +142 -0
  12. package/src/Collections.js +142 -0
  13. package/src/Config-CMiwciub.js +130 -0
  14. package/src/Config.d.ts +172 -0
  15. package/src/Config.js +2 -0
  16. package/src/Configuration-Dk2k3OIc.js +73 -0
  17. package/src/DataTransfer-BmECvPHB.js +488 -0
  18. package/src/Database-DSsNCGft.d.ts +3 -0
  19. package/src/Delivery.d.ts +28 -0
  20. package/src/Delivery.js +7 -0
  21. package/src/Document-CKXMSEf1.js +293 -0
  22. package/src/Document-TgwYKJZM.d.ts +220 -0
  23. package/src/DocumentRenderer-Wz2xaNyf.js +394 -0
  24. package/src/EditorSchema-wrDv-id6.js +296 -0
  25. package/src/Fields-BegSgYhj.d.ts +166 -0
  26. package/src/Fields-ioGaMEh9.js +130 -0
  27. package/src/Forms-BuKAXQxr.d.ts +203 -0
  28. package/src/Forms.d.ts +48 -11
  29. package/src/Forms.js +342 -7
  30. package/src/I18n-Ckf9h0rC.js +154 -0
  31. package/src/I18n.d.ts +45 -2
  32. package/src/I18n.js +2 -1
  33. package/src/Image-CJWPLnhP.js +110 -0
  34. package/src/Links-CJYyy7rC.js +28 -0
  35. package/src/Links-Dx1yOni8.d.ts +28 -0
  36. package/src/Locales-Ch7a5xuA.js +67 -0
  37. package/src/Locales-jwbmJaOp.d.ts +43 -0
  38. package/src/Locales.d.ts +3 -0
  39. package/src/Locales.js +3 -0
  40. package/src/Media-BQ0uL4w7.d.ts +15 -0
  41. package/src/Media-DSyvd14o.js +87 -0
  42. package/src/Module.d.ts +2 -10
  43. package/src/Module.js +1039 -162
  44. package/src/Operations.d.ts +57 -0
  45. package/src/Operations.js +263 -0
  46. package/src/People-DvNZauWw.js +69 -0
  47. package/src/PreviewFocus-C_EelZO5.js +104 -0
  48. package/src/Query-C0kGJF5_.d.ts +261 -0
  49. package/src/RevisionPreview-IVwbJ9Wy.js +133 -0
  50. package/src/Routes-BaZvm2LE.js +126 -0
  51. package/src/Routes-DM1rRp3r.d.ts +15 -0
  52. package/src/S3MediaObjects-y-WacEi9.js +193 -0
  53. package/src/Seo-BcpqxoAs.d.ts +57 -0
  54. package/src/Seo-CjNUtUkj.js +254 -0
  55. package/src/StudioApi-CXLwwocX.js +833 -0
  56. package/src/StudioErrors-T5zLGQ1M.js +117 -0
  57. package/src/StudioErrors-kq-E44lQ.d.ts +104 -0
  58. package/src/StudioServer.d.ts +20 -0
  59. package/src/StudioServer.js +34 -0
  60. package/src/answers-DcTg0Xv2.js +41 -0
  61. package/src/cli.js +681 -187
  62. package/src/contracts-rprW3ZOB.js +130 -0
  63. package/src/forms-3xuf0Ym7.d.ts +206 -0
  64. package/src/localeConfiguration-BPbkLi7-.js +32 -0
  65. package/src/localeContext-DhF3SPvM.js +59 -0
  66. package/src/locales-6OD4XGIZ.js +12 -0
  67. package/src/nuxtDelivery-BYX_Cddb.js +466 -0
  68. package/src/plugin-DTYuDaQu.js +7171 -0
  69. package/src/previewContext-dt3ZUh-w.js +4 -0
  70. package/src/previewRegions-CXjk5cbP.js +145 -0
  71. package/src/previewSource-fb-q3ESM.js +144 -0
  72. package/src/rendering-D9LVeEKX.js +47 -0
  73. package/src/rolldown-runtime-8H4AJuhK.js +14 -0
  74. package/src/runtime/CmsImage.js +38 -0
  75. package/src/runtime/DocumentPage.vue +10 -0
  76. package/src/runtime/DocumentPageContent.js +48 -0
  77. package/src/runtime/DocumentRenderer.d.ts +129 -0
  78. package/src/runtime/DocumentRenderer.js +2 -0
  79. package/src/runtime/api.js +48 -6
  80. package/src/runtime/delivery/useCmsDocument.js +2 -0
  81. package/src/runtime/delivery/useCmsDocumentQuery.js +2 -0
  82. package/src/runtime/delivery/useCmsDocumentSeo.js +2 -114
  83. package/src/runtime/delivery/useCmsLocale.js +10 -0
  84. package/src/runtime/plugin.js +2 -40
  85. package/src/runtime/preview.css +85 -0
  86. package/src/runtime/preview.js +277 -0
  87. package/src/runtime/previewSource.js +82 -0
  88. package/src/runtime/revisionPrivacy.js +13 -0
  89. package/src/runtime/studio.js +10 -0
  90. package/src/runtime/studioIcons.js +36 -0
  91. package/src/validation-3pggwcnm.js +396 -0
  92. package/src/validation-DpUwPC8Y.js +224 -0
  93. package/studio/THIRD-PARTY-LICENSES.md +2406 -0
  94. package/studio/chunks/AccountPage-DL3DitDM.js +288 -0
  95. package/studio/chunks/AccountPage-DL3DitDM.js.br +0 -0
  96. package/studio/chunks/AccountPage-DL3DitDM.js.gz +0 -0
  97. package/studio/chunks/ActivityPage-CLqVUqTh.js +584 -0
  98. package/studio/chunks/ActivityPage-CLqVUqTh.js.br +0 -0
  99. package/studio/chunks/ActivityPage-CLqVUqTh.js.gz +0 -0
  100. package/studio/chunks/Alert-D0D24z_a.js +335 -0
  101. package/studio/chunks/Alert-D0D24z_a.js.br +0 -0
  102. package/studio/chunks/Alert-D0D24z_a.js.gz +0 -0
  103. package/studio/chunks/Badge-BBFs88TI.js +346 -0
  104. package/studio/chunks/Badge-BBFs88TI.js.br +0 -0
  105. package/studio/chunks/Badge-BBFs88TI.js.gz +0 -0
  106. package/studio/chunks/Button-BT3ztSPx.js +14319 -0
  107. package/studio/chunks/Button-BT3ztSPx.js.br +0 -0
  108. package/studio/chunks/Button-BT3ztSPx.js.gz +0 -0
  109. package/studio/chunks/Collapsible-CKnEYIlp.js +246 -0
  110. package/studio/chunks/Collapsible-CKnEYIlp.js.br +0 -0
  111. package/studio/chunks/Collapsible-CKnEYIlp.js.gz +0 -0
  112. package/studio/chunks/ContentInventory-D7nsFA6U.js +1745 -0
  113. package/studio/chunks/ContentInventory-D7nsFA6U.js.br +0 -0
  114. package/studio/chunks/ContentInventory-D7nsFA6U.js.gz +0 -0
  115. package/studio/chunks/ContentPage-DCxt6BeD.js +18 -0
  116. package/studio/chunks/ContentPage-DCxt6BeD.js.br +0 -0
  117. package/studio/chunks/ContentPage-DCxt6BeD.js.gz +0 -0
  118. package/studio/chunks/DashboardSearch-DjyMjJwF.js +2413 -0
  119. package/studio/chunks/DashboardSearch-DjyMjJwF.js.br +0 -0
  120. package/studio/chunks/DashboardSearch-DjyMjJwF.js.gz +0 -0
  121. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js +26063 -0
  122. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.br +0 -0
  123. package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.gz +0 -0
  124. package/studio/chunks/DropdownMenu-CA9fB0uZ.js +4400 -0
  125. package/studio/chunks/DropdownMenu-CA9fB0uZ.js.br +0 -0
  126. package/studio/chunks/DropdownMenu-CA9fB0uZ.js.gz +0 -0
  127. package/studio/chunks/EditorPage-D_PAYEE4.js +7799 -0
  128. package/studio/chunks/EditorPage-D_PAYEE4.js.br +0 -0
  129. package/studio/chunks/EditorPage-D_PAYEE4.js.gz +0 -0
  130. package/studio/chunks/FormField-CgM6l2Yn.js +198 -0
  131. package/studio/chunks/FormField-CgM6l2Yn.js.br +0 -0
  132. package/studio/chunks/FormField-CgM6l2Yn.js.gz +0 -0
  133. package/studio/chunks/HelpPage-C-vrFcT_.js +552 -0
  134. package/studio/chunks/HelpPage-C-vrFcT_.js.br +0 -0
  135. package/studio/chunks/HelpPage-C-vrFcT_.js.gz +0 -0
  136. package/studio/chunks/Kbd-Ot7TIhVZ.js +271 -0
  137. package/studio/chunks/Kbd-Ot7TIhVZ.js.br +0 -0
  138. package/studio/chunks/Kbd-Ot7TIhVZ.js.gz +0 -0
  139. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js +101 -0
  140. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.br +0 -0
  141. package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.gz +0 -0
  142. package/studio/chunks/MediaPage-D-jaWtdl.js +923 -0
  143. package/studio/chunks/MediaPage-D-jaWtdl.js.br +0 -0
  144. package/studio/chunks/MediaPage-D-jaWtdl.js.gz +0 -0
  145. package/studio/chunks/MediaPicker-BZs2wUFz.js +837 -0
  146. package/studio/chunks/MediaPicker-BZs2wUFz.js.br +0 -0
  147. package/studio/chunks/MediaPicker-BZs2wUFz.js.gz +0 -0
  148. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js +1173 -0
  149. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.br +0 -0
  150. package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.gz +0 -0
  151. package/studio/chunks/Modal-D6hSvxHd.js +265 -0
  152. package/studio/chunks/Modal-D6hSvxHd.js.br +0 -0
  153. package/studio/chunks/Modal-D6hSvxHd.js.gz +0 -0
  154. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js +277 -0
  155. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.br +0 -0
  156. package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.gz +0 -0
  157. package/studio/chunks/Pagination-D9BSo5H2.js +573 -0
  158. package/studio/chunks/Pagination-D9BSo5H2.js.br +0 -0
  159. package/studio/chunks/Pagination-D9BSo5H2.js.gz +0 -0
  160. package/studio/chunks/PeoplePage-CWIXitBD.js +783 -0
  161. package/studio/chunks/PeoplePage-CWIXitBD.js.br +0 -0
  162. package/studio/chunks/PeoplePage-CWIXitBD.js.gz +0 -0
  163. package/studio/chunks/Popover-B63bkTMS.js +128 -0
  164. package/studio/chunks/Popover-B63bkTMS.js.br +0 -0
  165. package/studio/chunks/Popover-B63bkTMS.js.gz +0 -0
  166. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js +255 -0
  167. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.br +0 -0
  168. package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.gz +0 -0
  169. package/studio/chunks/Routes-DLYHmulE.js +102 -0
  170. package/studio/chunks/Routes-DLYHmulE.js.br +0 -0
  171. package/studio/chunks/Routes-DLYHmulE.js.gz +0 -0
  172. package/studio/chunks/RovingFocusItem-QZNg-wWF.js +95 -0
  173. package/studio/chunks/RovingFocusItem-QZNg-wWF.js.br +0 -0
  174. package/studio/chunks/RovingFocusItem-QZNg-wWF.js.gz +0 -0
  175. package/studio/chunks/ScheduledPage-C0hqrkr5.js +332 -0
  176. package/studio/chunks/ScheduledPage-C0hqrkr5.js.br +0 -0
  177. package/studio/chunks/ScheduledPage-C0hqrkr5.js.gz +0 -0
  178. package/studio/chunks/Search-BEgCe9Aj.js +14646 -0
  179. package/studio/chunks/Search-BEgCe9Aj.js.br +0 -0
  180. package/studio/chunks/Search-BEgCe9Aj.js.gz +0 -0
  181. package/studio/chunks/Select-B50WZMW-.js +2145 -0
  182. package/studio/chunks/Select-B50WZMW-.js.br +0 -0
  183. package/studio/chunks/Select-B50WZMW-.js.gz +0 -0
  184. package/studio/chunks/SelectMenu-DSweWGMz.js +2109 -0
  185. package/studio/chunks/SelectMenu-DSweWGMz.js.br +0 -0
  186. package/studio/chunks/SelectMenu-DSweWGMz.js.gz +0 -0
  187. package/studio/chunks/SeoPage-CNNxGe4h.js +846 -0
  188. package/studio/chunks/SeoPage-CNNxGe4h.js.br +0 -0
  189. package/studio/chunks/SeoPage-CNNxGe4h.js.gz +0 -0
  190. package/studio/chunks/Skeleton-COz8dcrw.js +39 -0
  191. package/studio/chunks/Skeleton-COz8dcrw.js.br +2 -0
  192. package/studio/chunks/Skeleton-COz8dcrw.js.gz +0 -0
  193. package/studio/chunks/Slideover-QMMHAAys.js +289 -0
  194. package/studio/chunks/Slideover-QMMHAAys.js.br +0 -0
  195. package/studio/chunks/Slideover-QMMHAAys.js.gz +0 -0
  196. package/studio/chunks/StudioPage-ngEIDr5d.js +80 -0
  197. package/studio/chunks/StudioPage-ngEIDr5d.js.br +0 -0
  198. package/studio/chunks/StudioPage-ngEIDr5d.js.gz +0 -0
  199. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js +2524 -0
  200. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.br +0 -0
  201. package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.gz +0 -0
  202. package/studio/chunks/Switch-qKl1aDn7.js +484 -0
  203. package/studio/chunks/Switch-qKl1aDn7.js.br +0 -0
  204. package/studio/chunks/Switch-qKl1aDn7.js.gz +0 -0
  205. package/studio/chunks/ToolPage-DxoVAJVk.js +29 -0
  206. package/studio/chunks/ToolPage-DxoVAJVk.js.br +0 -0
  207. package/studio/chunks/ToolPage-DxoVAJVk.js.gz +0 -0
  208. package/studio/chunks/Tooltip-Bu15m_DB.js +693 -0
  209. package/studio/chunks/Tooltip-Bu15m_DB.js.br +0 -0
  210. package/studio/chunks/Tooltip-Bu15m_DB.js.gz +0 -0
  211. package/studio/chunks/TrashPage-lhqLLdoG.js +12 -0
  212. package/studio/chunks/TrashPage-lhqLLdoG.js.br +0 -0
  213. package/studio/chunks/TrashPage-lhqLLdoG.js.gz +0 -0
  214. package/studio/chunks/VersionsPage-Cqy6UAp9.js +2349 -0
  215. package/studio/chunks/VersionsPage-Cqy6UAp9.js.br +0 -0
  216. package/studio/chunks/VersionsPage-Cqy6UAp9.js.gz +0 -0
  217. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js +113 -0
  218. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.br +0 -0
  219. package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.gz +0 -0
  220. package/studio/chunks/arrays-CUJkmV4I.js +10 -0
  221. package/studio/chunks/arrays-CUJkmV4I.js.br +0 -0
  222. package/studio/chunks/arrays-CUJkmV4I.js.gz +0 -0
  223. package/studio/chunks/base-DkTekJe8.js +213 -0
  224. package/studio/chunks/base-DkTekJe8.js.br +0 -0
  225. package/studio/chunks/base-DkTekJe8.js.gz +0 -0
  226. package/studio/chunks/content-DUGl3N4d.js +6012 -0
  227. package/studio/chunks/content-DUGl3N4d.js.br +0 -0
  228. package/studio/chunks/content-DUGl3N4d.js.gz +0 -0
  229. package/studio/chunks/destinations-DPIQVQa6.js +227 -0
  230. package/studio/chunks/destinations-DPIQVQa6.js.br +0 -0
  231. package/studio/chunks/destinations-DPIQVQa6.js.gz +0 -0
  232. package/studio/chunks/en-073cjKW4.js +152 -0
  233. package/studio/chunks/en-073cjKW4.js.br +0 -0
  234. package/studio/chunks/en-073cjKW4.js.gz +0 -0
  235. package/studio/chunks/en-Bn8mxPuf.js +134 -0
  236. package/studio/chunks/en-Bn8mxPuf.js.br +0 -0
  237. package/studio/chunks/en-Bn8mxPuf.js.gz +0 -0
  238. package/studio/chunks/en-C9OiaUDZ.js +251 -0
  239. package/studio/chunks/en-C9OiaUDZ.js.br +0 -0
  240. package/studio/chunks/en-C9OiaUDZ.js.gz +0 -0
  241. package/studio/chunks/en-CHAR6jzx.js +147 -0
  242. package/studio/chunks/en-CHAR6jzx.js.br +0 -0
  243. package/studio/chunks/en-CHAR6jzx.js.gz +0 -0
  244. package/studio/chunks/en-Cq4N1vEF.js +93 -0
  245. package/studio/chunks/en-Cq4N1vEF.js.br +2 -0
  246. package/studio/chunks/en-Cq4N1vEF.js.gz +0 -0
  247. package/studio/chunks/en-D2hRqlse.js +140 -0
  248. package/studio/chunks/en-D2hRqlse.js.br +0 -0
  249. package/studio/chunks/en-D2hRqlse.js.gz +0 -0
  250. package/studio/chunks/en-DiUC3-j6.js +144 -0
  251. package/studio/chunks/en-DiUC3-j6.js.br +0 -0
  252. package/studio/chunks/en-DiUC3-j6.js.gz +0 -0
  253. package/studio/chunks/english-Cs_Adu-u.js +8 -0
  254. package/studio/chunks/english-Cs_Adu-u.js.br +0 -0
  255. package/studio/chunks/english-Cs_Adu-u.js.gz +0 -0
  256. package/studio/chunks/esm-D6DqSiL1.js +752 -0
  257. package/studio/chunks/esm-D6DqSiL1.js.br +0 -0
  258. package/studio/chunks/esm-D6DqSiL1.js.gz +0 -0
  259. package/studio/chunks/externalRequest-CTzr2nDq.js +23 -0
  260. package/studio/chunks/externalRequest-CTzr2nDq.js.br +0 -0
  261. package/studio/chunks/externalRequest-CTzr2nDq.js.gz +0 -0
  262. package/studio/chunks/iconify-DR9ryCPv.js +1007 -0
  263. package/studio/chunks/iconify-DR9ryCPv.js.br +0 -0
  264. package/studio/chunks/iconify-DR9ryCPv.js.gz +0 -0
  265. package/studio/chunks/icons-D2MsAaXq.js +183 -0
  266. package/studio/chunks/icons-D2MsAaXq.js.br +0 -0
  267. package/studio/chunks/icons-D2MsAaXq.js.gz +0 -0
  268. package/studio/chunks/leaveGuards-D22fTGgr.js +26 -0
  269. package/studio/chunks/leaveGuards-D22fTGgr.js.br +0 -0
  270. package/studio/chunks/leaveGuards-D22fTGgr.js.gz +0 -0
  271. package/studio/chunks/lucideIcons-EyqyPBsX.js +238 -0
  272. package/studio/chunks/lucideIcons-EyqyPBsX.js.br +0 -0
  273. package/studio/chunks/lucideIcons-EyqyPBsX.js.gz +0 -0
  274. package/studio/chunks/mediaRoute--8cY8rUe.js +17 -0
  275. package/studio/chunks/mediaRoute--8cY8rUe.js.br +0 -0
  276. package/studio/chunks/mediaRoute--8cY8rUe.js.gz +0 -0
  277. package/studio/chunks/newDocumentPlanning-C26DHpvh.js +77 -0
  278. package/studio/chunks/newDocumentPlanning-C26DHpvh.js.br +0 -0
  279. package/studio/chunks/newDocumentPlanning-C26DHpvh.js.gz +0 -0
  280. package/studio/chunks/notifications-OKOLc40v.js +110 -0
  281. package/studio/chunks/notifications-OKOLc40v.js.br +0 -0
  282. package/studio/chunks/notifications-OKOLc40v.js.gz +0 -0
  283. package/studio/chunks/operations-CjNHyrEX.js +57 -0
  284. package/studio/chunks/operations-CjNHyrEX.js.br +0 -0
  285. package/studio/chunks/operations-CjNHyrEX.js.gz +0 -0
  286. package/studio/chunks/overlay-DnqFLZTc.js +1733 -0
  287. package/studio/chunks/overlay-DnqFLZTc.js.br +0 -0
  288. package/studio/chunks/overlay-DnqFLZTc.js.gz +0 -0
  289. package/studio/chunks/presentation-DF83w0hE.js +57 -0
  290. package/studio/chunks/presentation-DF83w0hE.js.br +0 -0
  291. package/studio/chunks/presentation-DF83w0hE.js.gz +0 -0
  292. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js +4557 -0
  293. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.br +0 -0
  294. package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.gz +0 -0
  295. package/studio/chunks/searchPresentation-DFwxQkt3.js +76 -0
  296. package/studio/chunks/searchPresentation-DFwxQkt3.js.br +0 -0
  297. package/studio/chunks/searchPresentation-DFwxQkt3.js.gz +0 -0
  298. package/studio/chunks/status-DQv6ihkU.js +38 -0
  299. package/studio/chunks/status-DQv6ihkU.js.br +0 -0
  300. package/studio/chunks/status-DQv6ihkU.js.gz +0 -0
  301. package/studio/chunks/studioContext-I8HozGU1.js +4953 -0
  302. package/studio/chunks/studioContext-I8HozGU1.js.br +0 -0
  303. package/studio/chunks/studioContext-I8HozGU1.js.gz +0 -0
  304. package/studio/chunks/studioQueries-BR-9NT5F.js +73 -0
  305. package/studio/chunks/studioQueries-BR-9NT5F.js.br +0 -0
  306. package/studio/chunks/studioQueries-BR-9NT5F.js.gz +0 -0
  307. package/studio/chunks/studioSearch-ByaL-QpM.js +1095 -0
  308. package/studio/chunks/studioSearch-ByaL-QpM.js.br +0 -0
  309. package/studio/chunks/studioSearch-ByaL-QpM.js.gz +0 -0
  310. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js +62 -0
  311. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.br +0 -0
  312. package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.gz +0 -0
  313. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js +189 -0
  314. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.br +0 -0
  315. package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.gz +0 -0
  316. package/studio/chunks/useDocumentMessage-BAWvc38w.js +16 -0
  317. package/studio/chunks/useDocumentMessage-BAWvc38w.js.br +3 -0
  318. package/studio/chunks/useDocumentMessage-BAWvc38w.js.gz +0 -0
  319. package/studio/chunks/useFilter-DzyiTR7f.js +87 -0
  320. package/studio/chunks/useFilter-DzyiTR7f.js.br +0 -0
  321. package/studio/chunks/useFilter-DzyiTR7f.js.gz +0 -0
  322. package/studio/chunks/useFormControl-CL7sSCUo.js +8 -0
  323. package/studio/chunks/useFormControl-CL7sSCUo.js.br +0 -0
  324. package/studio/chunks/useFormControl-CL7sSCUo.js.gz +0 -0
  325. package/studio/chunks/useGraceArea-Chcy25IQ.js +154 -0
  326. package/studio/chunks/useGraceArea-Chcy25IQ.js.br +0 -0
  327. package/studio/chunks/useGraceArea-Chcy25IQ.js.gz +0 -0
  328. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js +44 -0
  329. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.br +8 -0
  330. package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.gz +0 -0
  331. package/studio/chunks/useLinkCopy-CMjQteCy.js +35 -0
  332. package/studio/chunks/useLinkCopy-CMjQteCy.js.br +0 -0
  333. package/studio/chunks/useLinkCopy-CMjQteCy.js.gz +0 -0
  334. package/studio/chunks/usePointerMotion-DwRcwBNQ.js +16 -0
  335. package/studio/chunks/usePointerMotion-DwRcwBNQ.js.br +0 -0
  336. package/studio/chunks/usePointerMotion-DwRcwBNQ.js.gz +0 -0
  337. package/studio/chunks/useStudioNavigation-CLwtSYpb.js +298 -0
  338. package/studio/chunks/useStudioNavigation-CLwtSYpb.js.br +0 -0
  339. package/studio/chunks/useStudioNavigation-CLwtSYpb.js.gz +0 -0
  340. package/studio/chunks/useStudioPages-DR9qmYLg.js +79 -0
  341. package/studio/chunks/useStudioPages-DR9qmYLg.js.br +0 -0
  342. package/studio/chunks/useStudioPages-DR9qmYLg.js.gz +0 -0
  343. package/studio/chunks/utils-mdScC0v0.js +59 -0
  344. package/studio/chunks/utils-mdScC0v0.js.br +0 -0
  345. package/studio/chunks/utils-mdScC0v0.js.gz +0 -0
  346. package/studio/chunks/virtualizer-D1S0bZ4t.js +781 -0
  347. package/studio/chunks/virtualizer-D1S0bZ4t.js.br +0 -0
  348. package/studio/chunks/virtualizer-D1S0bZ4t.js.gz +0 -0
  349. package/studio/help/64f767fe29c2-save-and-publish.svg +7 -0
  350. package/studio/host.css +1 -1
  351. package/studio/host.css.br +0 -0
  352. package/studio/host.css.gz +0 -0
  353. package/studio/host.js +8757 -39178
  354. package/studio/host.js.br +0 -0
  355. package/studio/host.js.gz +0 -0
  356. package/CHANGELOG.md +0 -13
  357. package/bin/cms.mjs +0 -2
  358. package/src/ApplicationTypes.d.ts +0 -84
  359. package/src/ApplicationTypes.js +0 -1
  360. package/src/Configuration-Da5B2PVH.js +0 -1191
  361. package/src/Configuration-Da5B2PVH.js.map +0 -1
  362. package/src/Configuration.d.ts +0 -82
  363. package/src/Configuration.js +0 -8
  364. package/src/Configuration.js.map +0 -1
  365. package/src/Content.d.ts +0 -68
  366. package/src/Content.js +0 -373
  367. package/src/Content.js.map +0 -1
  368. package/src/ContentTransfer-BxwswWn3.js +0 -86
  369. package/src/ContentTransfer-BxwswWn3.js.map +0 -1
  370. package/src/ContentTransfer-Z9FHyLez.d.ts +0 -72
  371. package/src/DocumentEngine-hh_IGPXO.js +0 -978
  372. package/src/DocumentEngine-hh_IGPXO.js.map +0 -1
  373. package/src/DocumentModel.d.ts +0 -52
  374. package/src/DocumentModel.js +0 -66
  375. package/src/DocumentModel.js.map +0 -1
  376. package/src/Forms-CX-hwmJF.js +0 -391
  377. package/src/Forms-CX-hwmJF.js.map +0 -1
  378. package/src/Forms-CfNPTiCr.js +0 -110
  379. package/src/Forms-CfNPTiCr.js.map +0 -1
  380. package/src/Forms-R0HoTR-o.d.ts +0 -92
  381. package/src/Forms.js.map +0 -1
  382. package/src/HttpPaths-c9nLZ9H2.js +0 -21
  383. package/src/HttpPaths-c9nLZ9H2.js.map +0 -1
  384. package/src/I18n-zbqpWxki.d.ts +0 -29
  385. package/src/Media-j1bTritO.js +0 -112
  386. package/src/Media-j1bTritO.js.map +0 -1
  387. package/src/Module.js.map +0 -1
  388. package/src/References-CCPDAPve.js +0 -45
  389. package/src/References-CCPDAPve.js.map +0 -1
  390. package/src/S3MediaObjects-Dwhl2deX.js +0 -2742
  391. package/src/S3MediaObjects-Dwhl2deX.js.map +0 -1
  392. package/src/Seo-402YumpT.d.ts +0 -198
  393. package/src/cli/content.js +0 -101
  394. package/src/cli/content.js.map +0 -1
  395. package/src/cli.js.map +0 -1
  396. package/src/connection-BP80q4d-.js +0 -92
  397. package/src/connection-BP80q4d-.js.map +0 -1
  398. package/src/dev-lifecycle-CjDq63Ft.js +0 -535
  399. package/src/dev-lifecycle-CjDq63Ft.js.map +0 -1
  400. package/src/installation-DYNQQBD3.js +0 -9114
  401. package/src/installation-DYNQQBD3.js.map +0 -1
  402. package/src/internal/application-types.js +0 -43
  403. package/src/internal/application-types.js.map +0 -1
  404. package/src/internal/authoring-catalog.js +0 -158
  405. package/src/internal/authoring-catalog.js.map +0 -1
  406. package/src/internal/authoring-compiler.js +0 -146
  407. package/src/internal/authoring-compiler.js.map +0 -1
  408. package/src/internal/authoring-metadata.js +0 -191
  409. package/src/internal/authoring-metadata.js.map +0 -1
  410. package/src/internal/cms-config.js +0 -45
  411. package/src/internal/cms-config.js.map +0 -1
  412. package/src/internal/configuration.js +0 -228
  413. package/src/internal/configuration.js.map +0 -1
  414. package/src/internal/dev-lifecycle.js +0 -3
  415. package/src/internal/diagnostics.js +0 -47
  416. package/src/internal/diagnostics.js.map +0 -1
  417. package/src/internal/document-model.js +0 -376
  418. package/src/internal/document-model.js.map +0 -1
  419. package/src/internal/field-metadata.js +0 -7
  420. package/src/internal/field-metadata.js.map +0 -1
  421. package/src/internal/form-capabilities.js +0 -12
  422. package/src/internal/form-capabilities.js.map +0 -1
  423. package/src/internal/i18n.js +0 -73
  424. package/src/internal/i18n.js.map +0 -1
  425. package/src/internal/studio-app.js +0 -68
  426. package/src/internal/studio-app.js.map +0 -1
  427. package/src/location-CMNGO3lU.js +0 -35
  428. package/src/location-CMNGO3lU.js.map +0 -1
  429. package/src/metadata-DN9_K6Yl.js +0 -201
  430. package/src/metadata-DN9_K6Yl.js.map +0 -1
  431. package/src/models-5j67LMqW.js +0 -131
  432. package/src/models-5j67LMqW.js.map +0 -1
  433. package/src/models-VmGmG19-.js +0 -628
  434. package/src/models-VmGmG19-.js.map +0 -1
  435. package/src/runtime/api.js.map +0 -1
  436. package/src/runtime/blocks.js +0 -30
  437. package/src/runtime/blocks.js.map +0 -1
  438. package/src/runtime/collaboration.js +0 -45
  439. package/src/runtime/collaboration.js.map +0 -1
  440. package/src/runtime/delivery/DocumentField.js +0 -23
  441. package/src/runtime/delivery/DocumentField.js.map +0 -1
  442. package/src/runtime/delivery/DocumentRenderer.js +0 -61
  443. package/src/runtime/delivery/DocumentRenderer.js.map +0 -1
  444. package/src/runtime/delivery/DocumentScope.js +0 -41
  445. package/src/runtime/delivery/DocumentScope.js.map +0 -1
  446. package/src/runtime/delivery/blocks.js +0 -8
  447. package/src/runtime/delivery/blocks.js.map +0 -1
  448. package/src/runtime/delivery/context.js +0 -12
  449. package/src/runtime/delivery/context.js.map +0 -1
  450. package/src/runtime/delivery/document-page.js +0 -21
  451. package/src/runtime/delivery/document-page.js.map +0 -1
  452. package/src/runtime/delivery/document.js +0 -43
  453. package/src/runtime/delivery/document.js.map +0 -1
  454. package/src/runtime/delivery/error.js +0 -11
  455. package/src/runtime/delivery/error.js.map +0 -1
  456. package/src/runtime/delivery/plugin.js +0 -99
  457. package/src/runtime/delivery/plugin.js.map +0 -1
  458. package/src/runtime/delivery/preview.d.ts +0 -11
  459. package/src/runtime/delivery/preview.js +0 -6
  460. package/src/runtime/delivery/preview.js.map +0 -1
  461. package/src/runtime/delivery/types.d.ts +0 -2
  462. package/src/runtime/delivery/types.js +0 -1
  463. package/src/runtime/delivery/useCmsDocumentSeo.d.ts +0 -67
  464. package/src/runtime/delivery/useCmsDocumentSeo.js.map +0 -1
  465. package/src/runtime/delivery/useDocument.d.ts +0 -6
  466. package/src/runtime/delivery/useDocument.js +0 -23
  467. package/src/runtime/delivery/useDocument.js.map +0 -1
  468. package/src/runtime/delivery/useDocumentQuery.d.ts +0 -7
  469. package/src/runtime/delivery/useDocumentQuery.js +0 -29
  470. package/src/runtime/delivery/useDocumentQuery.js.map +0 -1
  471. package/src/runtime/forms/document.js +0 -38
  472. package/src/runtime/forms/document.js.map +0 -1
  473. package/src/runtime/forms/useCmsForm.js +0 -257
  474. package/src/runtime/forms/useCmsForm.js.map +0 -1
  475. package/src/runtime/i18n/translator.js +0 -51
  476. package/src/runtime/i18n/translator.js.map +0 -1
  477. package/src/runtime/i18n/useCmsI18n.d.ts +0 -13
  478. package/src/runtime/i18n/useCmsI18n.js +0 -38
  479. package/src/runtime/i18n/useCmsI18n.js.map +0 -1
  480. package/src/runtime/installation.js +0 -3
  481. package/src/runtime/plugin.js.map +0 -1
  482. package/src/runtime/preview/CmsStudioPreviewMarker.js +0 -29
  483. package/src/runtime/preview/CmsStudioPreviewMarker.js.map +0 -1
  484. package/src/runtime/preview/comark-document.js +0 -37
  485. package/src/runtime/preview/comark-document.js.map +0 -1
  486. package/src/runtime/preview/connection.js +0 -3
  487. package/src/runtime/preview/controller.js +0 -265
  488. package/src/runtime/preview/controller.js.map +0 -1
  489. package/src/runtime/preview/crypto.js +0 -16
  490. package/src/runtime/preview/crypto.js.map +0 -1
  491. package/src/runtime/preview/overlay.js +0 -122
  492. package/src/runtime/preview/overlay.js.map +0 -1
  493. package/src/runtime/preview/plugin.client.js +0 -68
  494. package/src/runtime/preview/plugin.client.js.map +0 -1
  495. package/src/runtime/preview/preview.css +0 -91
  496. package/src/runtime/preview/protocol.d.ts +0 -16
  497. package/src/runtime/preview/protocol.js +0 -23
  498. package/src/runtime/preview/protocol.js.map +0 -1
  499. package/src/runtime/preview/regions.js +0 -142
  500. package/src/runtime/preview/regions.js.map +0 -1
  501. package/src/runtime/preview/store.js +0 -4
  502. package/src/runtime/sitemap-entries.js +0 -17
  503. package/src/runtime/sitemap-entries.js.map +0 -1
  504. package/src/runtime/sitemap.js +0 -23
  505. package/src/runtime/sitemap.js.map +0 -1
  506. package/src/runtime/studio-app.js +0 -17
  507. package/src/runtime/studio-app.js.map +0 -1
  508. package/src/runtime/studio-document.js +0 -46
  509. package/src/runtime/studio-document.js.map +0 -1
  510. package/src/runtime/studio-entry.js +0 -19
  511. package/src/runtime/studio-entry.js.map +0 -1
  512. package/src/runtime/studio-navigation.js +0 -11
  513. package/src/runtime/studio-navigation.js.map +0 -1
  514. package/src/scalars-CA6kyipS.d.ts +0 -7
  515. package/src/scalars-CVZqT3L0.js +0 -22
  516. package/src/scalars-CVZqT3L0.js.map +0 -1
  517. package/src/store-X1e1o_MF.js +0 -209
  518. package/src/store-X1e1o_MF.js.map +0 -1
  519. package/src/types-DZ0IV-Ow.d.ts +0 -101
  520. package/studio/CreateDocumentDialog-BpjBYGfI.js +0 -335
  521. package/studio/SelectMenu-KiXwx4Y_.js +0 -34032
  522. package/studio/collaboration-DcK2F6v9.js +0 -4566
  523. package/studio/editor-P2rB7Csp.js +0 -30128
  524. package/studio/rolldown-runtime-Dy4uBu1J.js +0 -11
@@ -1,376 +0,0 @@
1
- import { FIELD_INPUT_METADATA, FIELD_OPTIONS_METADATA } from "./field-metadata.js";
2
- import { r as DocumentConfiguration, u as compileStructuredFields } from "../Configuration-Da5B2PVH.js";
3
- import { t as createDocumentEngine } from "../DocumentEngine-hh_IGPXO.js";
4
- import { Effect, Predicate, Result, Schema } from "effect";
5
-
6
- //#region src/internal/document-model.ts
7
- const isJsonObject = Schema.is(Schema.JsonObject);
8
- var CmsDocumentModelInvalid = class extends Schema.TaggedError()("Cms.DocumentModelInvalid", {
9
- message: Schema.NonEmptyString,
10
- path: Schema.NonEmptyString
11
- }) {};
12
- const isCmsDocumentModelInvalid = Schema.is(CmsDocumentModelInvalid);
13
- function compileCmsDocumentModel(documents, i18n) {
14
- try {
15
- const compiled = Object.entries(documents.collections).map(([collection, options]) => compileCollection(collection, options));
16
- const decoded = Schema.decodeResult(DocumentConfiguration)({
17
- ...i18n === void 0 ? void 0 : { locales: {
18
- defaultLocale: i18n.defaultLocale,
19
- fallbackLocale: i18n.fallbackLocale ?? null,
20
- locales: Object.keys(i18n.locales),
21
- prefixDefaultLocale: i18n.prefixDefaultLocale ?? false
22
- } },
23
- types: compiled.map((entry) => entry.authoring)
24
- });
25
- if (Result.isFailure(decoded)) throw invalid("documents", String(decoded.failure));
26
- const model = {
27
- authoring: decoded.success,
28
- executable: { types: Object.fromEntries(compiled.map((entry) => [entry.authoring.collection, entry.executable])) }
29
- };
30
- const engine = Effect.runSync(Effect.result(createDocumentEngine(model.authoring, { documentModel: model.executable })));
31
- if (Result.isFailure(engine)) throw invalid("documents", engine.failure.message);
32
- return model;
33
- } catch (cause) {
34
- throw isCmsDocumentModelInvalid(cause) ? cause : invalid("documents.collections", cause instanceof Error ? cause.message : String(cause));
35
- }
36
- }
37
- function compileCollection(collection, options) {
38
- const path = `documents.collections.${collection}`;
39
- let generated;
40
- try {
41
- if (isEffectCollectionSchema(options.schema)) {
42
- const document = Schema.toJsonSchemaDocument(options.schema, {
43
- includeAnnotationKey: (key) => key === "x-cms-input" || key === "x-cms-options",
44
- referencePolicy: () => void 0
45
- });
46
- generated = {
47
- ...document.schema,
48
- $defs: document.definitions
49
- };
50
- } else {
51
- if (!Predicate.isFunction(options.schema["~standard"]?.jsonSchema?.input)) throw new Error("Studio needs Standard JSON Schema V1 input conversion (or an adapter that supplies it).");
52
- generated = options.schema["~standard"].jsonSchema.input({ target: "draft-2020-12" });
53
- }
54
- } catch (cause) {
55
- throw invalid(`${path}.schema`, cause instanceof Error ? cause.message : String(cause));
56
- }
57
- const decoded = Schema.decodeUnknownResult(Schema.JsonObject)(generated);
58
- if (Result.isFailure(decoded)) throw invalid(`${path}.schema`, "The generated input structure is not serializable.");
59
- const input = resolveInputStructure(decoded.success, `${path}.schema`);
60
- if (input.type !== "object") throw invalid(`${path}.schema`, "A collection schema must describe an object input.");
61
- const projection = compileProjection(input, `${path}.schema`);
62
- const authoringFields = compileAuthoringFields(input, `${path}.schema`);
63
- const structuredFields = compileStructuredFields(authoringFields);
64
- const validator = isEffectCollectionSchema(options.schema) ? Schema.toStandardSchemaV1(options.schema) : options.schema;
65
- return {
66
- authoring: {
67
- ...options.body === void 0 ? void 0 : { body: options.body },
68
- authoringFields,
69
- canCreate: options.canCreate ?? true,
70
- collection,
71
- description: options.description ?? "",
72
- hierarchy: options.hierarchy ?? options.route.includes("*"),
73
- label: options.label,
74
- routes: {
75
- entry: options.route,
76
- home: collectionHomeRoute(options.route)
77
- }
78
- },
79
- executable: {
80
- project: projection,
81
- validate: (value) => Effect.tryPromise(() => Promise.resolve(validator["~standard"].validate(value)).then((validation) => {
82
- if ("issues" in validation || !Schema.is(Schema.JsonObject)(validation.value)) return validation;
83
- const issues = structuredFields.validateIdentities(validation.value);
84
- return issues.length > 0 ? { issues } : validation;
85
- }))
86
- }
87
- };
88
- }
89
- function collectionHomeRoute(entryRoute) {
90
- const token = entryRoute.indexOf(":");
91
- const normalized = `/${(token < 0 ? entryRoute : entryRoute.slice(0, token)).split("/").filter(Boolean).join("/")}`;
92
- return normalized === "/" ? "/" : normalized.replace(/\/$/u, "");
93
- }
94
- function compileProjection(schema, path) {
95
- const properties = objectKeyword(schema, "properties", path, true);
96
- const declarations = new Map(Object.entries(properties).map(([name, value]) => {
97
- const property = requireObject(value, `${path}.${name}`);
98
- const nested = property.type === "object" ? compileProjection(property, `${path}.${name}`) : void 0;
99
- const items = property.type === "array" ? requireObject(property.items, `${path}.${name}[]`) : void 0;
100
- return [name, {
101
- listItem: items?.type === "object" ? compileProjection(items, `${path}.${name}[]`) : void 0,
102
- nested
103
- }];
104
- }));
105
- return (input, parent = "") => {
106
- const value = {};
107
- const unknownPaths = [];
108
- for (const [name, child] of Object.entries(input)) {
109
- const declaration = declarations.get(name);
110
- const fieldPath = parent ? `${parent}.${name}` : name;
111
- if (!declarations.has(name)) unknownPaths.push(fieldPath);
112
- else if (declaration?.nested && isJsonObject(child)) {
113
- const projected = declaration.nested(child, fieldPath);
114
- value[name] = projected.value;
115
- unknownPaths.push(...projected.unknownPaths);
116
- } else if (declaration?.listItem && Array.isArray(child)) value[name] = child.map((item, index) => {
117
- if (!isJsonObject(item)) return item;
118
- const projected = declaration.listItem?.(item, `${fieldPath}.${index}`);
119
- if (!projected) return item;
120
- unknownPaths.push(...projected.unknownPaths);
121
- return projected.value;
122
- });
123
- else value[name] = child;
124
- }
125
- return {
126
- unknownPaths,
127
- value
128
- };
129
- };
130
- }
131
- function compileAuthoringFields(schema, path, listItem = false) {
132
- const properties = objectKeyword(schema, "properties", path, true);
133
- const required = stringArrayKeyword(schema, "required", path);
134
- return Object.entries(properties).flatMap(([name, value]) => {
135
- if (!name || name.includes(".")) throw invalid(`${path}.${name || "<empty>"}`, "Field names must be non-empty and cannot contain dots.");
136
- if (name === "id") {
137
- if (listItem) return [];
138
- throw invalid(`${path}.id`, "Field \"id\" is reserved for CMS identity.");
139
- }
140
- const property = requireObject(value, `${path}.${name}`);
141
- const fieldRequired = required.has(name);
142
- if (property.type === "object") return [{
143
- ...fieldPresentation(property, `${path}.${name}`, name, fieldRequired),
144
- fields: compileAuthoringFields(property, `${path}.${name}`),
145
- input: "object",
146
- options: [],
147
- type: "object"
148
- }];
149
- return [compileAuthoringField(property, `${path}.${name}`, name, fieldRequired)];
150
- });
151
- }
152
- function compileAuthoringField(schema, schemaPath, name, required) {
153
- const presentation = fieldPresentation(schema, schemaPath, name, required);
154
- switch (schema.type) {
155
- case "boolean": return {
156
- ...presentation,
157
- input: input(schema, schemaPath, "toggle", ["toggle"]),
158
- options: [],
159
- type: "boolean"
160
- };
161
- case "integer":
162
- case "number": {
163
- const options = numericOptions(schema, schemaPath);
164
- return {
165
- ...presentation,
166
- input: input(schema, schemaPath, options.length > 0 ? "select" : "number", ["number", "select"]),
167
- options,
168
- type: "number"
169
- };
170
- }
171
- case "string": {
172
- if (schema.format === "date") return {
173
- ...presentation,
174
- input: input(schema, schemaPath, "date", ["date"]),
175
- options: [],
176
- type: "date"
177
- };
178
- if (schema.format === "cms-document-reference") return {
179
- ...presentation,
180
- input: "document",
181
- options: [],
182
- type: "string"
183
- };
184
- if (schema.format === "cms-managed-media-reference") return {
185
- ...presentation,
186
- input: "media",
187
- options: [],
188
- type: "string"
189
- };
190
- const options = stringOptions(schema, schemaPath);
191
- return {
192
- ...presentation,
193
- input: input(schema, schemaPath, options.length > 0 ? "select" : "text", [
194
- "select",
195
- "text",
196
- "textarea",
197
- "image",
198
- "link",
199
- "document",
200
- "media"
201
- ]),
202
- options,
203
- type: "string"
204
- };
205
- }
206
- case "array": {
207
- const items = requireObject(schema.items, `${schemaPath}[]`);
208
- if (items.type === "object") {
209
- const itemProperties = objectKeyword(items, "properties", `${schemaPath}[]`, true);
210
- const itemRequired = stringArrayKeyword(items, "required", `${schemaPath}[]`);
211
- const identity = itemProperties.id;
212
- if (!identity || requireObject(identity, `${schemaPath}[].id`).type !== "string" || !itemRequired.has("id")) throw invalid(schemaPath, "Repeatable object items need a required string id managed by the CMS.");
213
- return {
214
- ...presentation,
215
- fields: compileAuthoringFields(items, `${schemaPath}[]`, true),
216
- input: "list",
217
- options: [],
218
- type: "array"
219
- };
220
- }
221
- if (items.type !== "string") throw invalid(schemaPath, "Studio supports scalar string lists or repeatable objects with stable identity.");
222
- return {
223
- ...presentation,
224
- input: input(schema, schemaPath, "multiselect", ["multiselect"]),
225
- options: stringOptions(items, `${schemaPath}[]`, schema[FIELD_OPTIONS_METADATA]),
226
- type: "string[]"
227
- };
228
- }
229
- default: throw invalid(schemaPath, `Studio cannot generate an input for schema type "${displayJson(schema.type)}".`);
230
- }
231
- }
232
- function fieldPresentation(schema, schemaPath, name, required) {
233
- const defaultValue = schema.default;
234
- const description = stringKeyword(schema, "description", schemaPath);
235
- const title = stringKeyword(schema, "title", schemaPath);
236
- return {
237
- ...defaultValue === void 0 ? void 0 : { defaultValue },
238
- ...description === void 0 ? void 0 : { description },
239
- label: title?.trim() || humanize(name),
240
- name,
241
- nullable: schema["x-cms-nullable"] === true,
242
- required
243
- };
244
- }
245
- function input(schema, path, fallback, supported) {
246
- const configured = schema[FIELD_INPUT_METADATA];
247
- if (configured === void 0) return fallback;
248
- const decoded = Schema.decodeUnknownResult(Schema.Literals([...supported]))(configured);
249
- if (Result.isSuccess(decoded)) return decoded.success;
250
- throw invalid(path, `Input "${displayJson(configured)}" is not compatible with this field.`);
251
- }
252
- function stringOptions(schema, path, configured = schema[FIELD_OPTIONS_METADATA]) {
253
- const value = schema.enum;
254
- if (value === void 0) return [];
255
- const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.String))(value);
256
- if (Result.isFailure(decoded)) throw invalid(path, "Field options must all be strings.");
257
- return labeledOptions(configured, decoded.success, path);
258
- }
259
- function numericOptions(schema, path) {
260
- const value = schema.enum;
261
- if (value === void 0) return [];
262
- const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.Finite))(value);
263
- if (Result.isFailure(decoded)) throw invalid(path, "Field options must all be finite numbers.");
264
- return labeledOptions(schema[FIELD_OPTIONS_METADATA], decoded.success, path);
265
- }
266
- function labeledOptions(configured, values, path) {
267
- if (configured === void 0) return values.map((value) => ({
268
- label: String(value),
269
- value
270
- }));
271
- const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.Struct({
272
- label: Schema.String,
273
- value: Schema.Union([Schema.String, Schema.Finite])
274
- })))(configured);
275
- if (Result.isFailure(decoded) || decoded.success.length !== values.length || decoded.success.some((option, index) => option.value !== values[index])) throw invalid(path, "Labeled options must match the schema enum values in order.");
276
- return values.map((value, index) => ({
277
- label: decoded.success[index]?.label ?? String(value),
278
- value
279
- }));
280
- }
281
- function objectKeyword(schema, keyword, path, optional = false) {
282
- const value = schema[keyword];
283
- if (value === void 0 && optional) return {};
284
- return requireObject(value, `${path}.${keyword}`);
285
- }
286
- function stringArrayKeyword(schema, keyword, path) {
287
- const value = schema[keyword];
288
- if (value === void 0) return /* @__PURE__ */ new Set();
289
- const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.String))(value);
290
- if (Result.isFailure(decoded)) throw invalid(`${path}.${keyword}`, `Expected "${keyword}" to be an array of strings.`);
291
- return new Set(decoded.success);
292
- }
293
- function stringKeyword(schema, keyword, path) {
294
- const value = schema[keyword];
295
- if (value === void 0) return void 0;
296
- const decoded = Schema.decodeUnknownResult(Schema.String)(value);
297
- if (Result.isFailure(decoded)) throw invalid(`${path}.${keyword}`, `Expected "${keyword}" to be a string.`);
298
- return decoded.success;
299
- }
300
- function requireObject(value, path) {
301
- if (!isJsonObject(value)) throw invalid(path, "Studio requires an object input structure at this location.");
302
- return value;
303
- }
304
- function humanize(path) {
305
- const name = path.split(".").at(-1) ?? path;
306
- const words = name.replace(/([a-z\d])([A-Z])/gu, "$1 $2").replace(/[-_]+/gu, " ").trim();
307
- return words ? `${words.charAt(0).toUpperCase()}${words.slice(1)}` : name;
308
- }
309
- function displayJson(value) {
310
- return value === void 0 ? "undefined" : JSON.stringify(value) ?? "undefined";
311
- }
312
- function invalid(path, message) {
313
- return new CmsDocumentModelInvalid({
314
- message,
315
- path
316
- });
317
- }
318
- /** Resolve local input references while rejecting recursive or ambiguous editor structures. */
319
- function resolveInputStructure(root, path) {
320
- function visit(node, currentPath, ancestors) {
321
- if (node.$ref !== void 0) {
322
- const decodedRef = Schema.decodeUnknownResult(Schema.String)(node.$ref);
323
- if (Result.isFailure(decodedRef)) throw invalid(currentPath, "Expected a string schema reference.");
324
- const ref = decodedRef.success;
325
- if (!ref.startsWith("#/") || ancestors.has(ref)) throw invalid(currentPath, "Studio requires non-recursive local schema references.");
326
- let target = root;
327
- for (const segment of ref.slice(2).split("/")) target = isJsonObject(target) ? target[segment.replace(/~1/gu, "/").replace(/~0/gu, "~")] : void 0;
328
- const { $ref: _, ...siblings } = node;
329
- return visit(Object.assign({}, requireObject(target, currentPath), siblings), currentPath, /* @__PURE__ */ new Set([...ancestors, ref]));
330
- }
331
- if (node.anyOf !== void 0) {
332
- if (!Array.isArray(node.anyOf)) throw invalid(currentPath, "Expected an array of schema alternatives.");
333
- const alternatives = node.anyOf.map((value) => requireObject(value, currentPath));
334
- const nulls = alternatives.filter((value) => value.type === "null");
335
- const values = alternatives.filter((value) => value.type !== "null");
336
- if (nulls.length === 1 && values.length === 1) {
337
- const { anyOf: _, ...siblings } = node;
338
- return Object.assign(visit(Object.assign({}, values[0], siblings), currentPath, ancestors), { "x-cms-nullable": true });
339
- }
340
- throw invalid(currentPath, "Studio requires a single supported input type per field.");
341
- }
342
- if (node.oneOf !== void 0) throw invalid(currentPath, "Studio requires a single supported input type per field.");
343
- const out = Object.fromEntries(Object.entries(node));
344
- if (node.allOf !== void 0) {
345
- if (!Array.isArray(node.allOf)) throw invalid(currentPath, "Expected an array of schema constraints.");
346
- for (const constraint of node.allOf) {
347
- const part = visit(requireObject(constraint, currentPath), currentPath, ancestors);
348
- if (part.properties !== void 0 || part.items !== void 0 || part.type !== void 0 && part.type !== node.type) throw invalid(currentPath, "Studio cannot combine structural schema intersections.");
349
- for (const key of [
350
- "title",
351
- "description",
352
- "default",
353
- "format",
354
- "enum",
355
- FIELD_INPUT_METADATA,
356
- FIELD_OPTIONS_METADATA
357
- ]) {
358
- if (part[key] === void 0) continue;
359
- if (out[key] !== void 0 && JSON.stringify(out[key]) !== JSON.stringify(part[key])) throw invalid(currentPath, `Conflicting field metadata "${key}" in schema intersection.`);
360
- out[key] = part[key];
361
- }
362
- }
363
- }
364
- if (node.properties !== void 0) out.properties = Object.fromEntries(Object.entries(requireObject(node.properties, currentPath)).map(([name, value]) => [name, visit(requireObject(value, `${currentPath}.${name}`), `${currentPath}.${name}`, ancestors)]));
365
- if (node.items !== void 0) out.items = visit(requireObject(node.items, `${currentPath}[]`), `${currentPath}[]`, ancestors);
366
- return out;
367
- }
368
- return visit(root, path, /* @__PURE__ */ new Set());
369
- }
370
- function isEffectCollectionSchema(schema) {
371
- return Schema.isSchema(schema);
372
- }
373
-
374
- //#endregion
375
- export { CmsDocumentModelInvalid, compileCmsDocumentModel };
376
- //# sourceMappingURL=document-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-model.js","names":[],"sources":["../../../../src/internal/document-model.ts"],"sourcesContent":["import type { CmsI18nOptions } from '../I18n'\nimport type { StandardJSONSchemaV1 } from '@standard-schema/spec'\nimport type {\n DocumentSchemaProjection,\n ExecutableDocumentModel,\n ExecutableDocumentSchema,\n} from '@internal/document/DocumentEngine'\nimport type { DocumentConfiguration as DocumentConfigurationType } from '@internal/protocol/Configuration'\nimport type { StructuredField } from '@internal/protocol/StructuredFields'\nimport type {\n CmsCollectionOptions,\n CmsCollectionSchema,\n CmsDocumentModelOptions,\n CmsFieldInput,\n} from '../DocumentModel'\nimport { createDocumentEngine } from '@internal/document/DocumentEngine'\nimport { compileStructuredFields } from '@internal/document/StructuredFields'\nimport { DocumentConfiguration } from '@internal/protocol/Configuration'\nimport { Effect, Predicate, Result, Schema } from 'effect'\nimport { FIELD_INPUT_METADATA, FIELD_OPTIONS_METADATA } from './field-metadata'\n\nconst isJsonObject = Schema.is(Schema.JsonObject)\n\ntype EncodedDocumentConfiguration = Schema.Codec.Encoded<typeof DocumentConfiguration>\n\ninterface CmsDocumentModel {\n readonly authoring: DocumentConfigurationType\n readonly executable: ExecutableDocumentModel\n}\n\ninterface CompiledCollection {\n readonly authoring: EncodedDocumentConfiguration['types'][number]\n readonly executable: ExecutableDocumentSchema\n}\n\nexport class CmsDocumentModelInvalid extends Schema.TaggedError<CmsDocumentModelInvalid>()('Cms.DocumentModelInvalid', {\n message: Schema.NonEmptyString,\n path: Schema.NonEmptyString,\n}) {}\n\nconst isCmsDocumentModelInvalid = Schema.is(CmsDocumentModelInvalid)\n\nexport function compileCmsDocumentModel(documents: CmsDocumentModelOptions, i18n?: CmsI18nOptions): CmsDocumentModel {\n try {\n const compiled = Object.entries(documents.collections).map(([collection, options]) =>\n compileCollection(collection, options),\n )\n\n const decoded = Schema.decodeResult(DocumentConfiguration)({\n ...(i18n === undefined\n ? undefined\n : {\n locales: {\n defaultLocale: i18n.defaultLocale,\n fallbackLocale: i18n.fallbackLocale ?? null,\n locales: Object.keys(i18n.locales),\n prefixDefaultLocale: i18n.prefixDefaultLocale ?? false,\n },\n }),\n types: compiled.map((entry) => entry.authoring),\n })\n\n if (Result.isFailure(decoded)) throw invalid('documents', String(decoded.failure))\n\n const model = {\n authoring: decoded.success,\n executable: {\n types: Object.fromEntries(compiled.map((entry) => [entry.authoring.collection, entry.executable])),\n },\n }\n\n const engine = Effect.runSync(\n Effect.result(createDocumentEngine(model.authoring, { documentModel: model.executable })),\n )\n\n if (Result.isFailure(engine)) throw invalid('documents', engine.failure.message)\n\n return model\n } catch (cause) {\n throw isCmsDocumentModelInvalid(cause)\n ? cause\n : invalid('documents.collections', cause instanceof Error ? cause.message : String(cause))\n }\n}\n\nfunction compileCollection(collection: string, options: CmsCollectionOptions): CompiledCollection {\n const path = `documents.collections.${collection}`\n let generated: ReturnType<StandardJSONSchemaV1.Converter['input']>\n\n try {\n if (isEffectCollectionSchema(options.schema)) {\n const document = Schema.toJsonSchemaDocument(options.schema, {\n includeAnnotationKey: (key) => key === FIELD_INPUT_METADATA || key === FIELD_OPTIONS_METADATA,\n referencePolicy: () => undefined,\n })\n\n generated = { ...document.schema, $defs: document.definitions }\n } else {\n if (!Predicate.isFunction(options.schema['~standard']?.jsonSchema?.input)) {\n throw new Error('Studio needs Standard JSON Schema V1 input conversion (or an adapter that supplies it).')\n }\n\n generated = options.schema['~standard'].jsonSchema.input({ target: 'draft-2020-12' })\n }\n } catch (cause) {\n throw invalid(`${path}.schema`, cause instanceof Error ? cause.message : String(cause))\n }\n\n const decoded = Schema.decodeUnknownResult(Schema.JsonObject)(generated)\n\n if (Result.isFailure(decoded)) throw invalid(`${path}.schema`, 'The generated input structure is not serializable.')\n const input = resolveInputStructure(decoded.success, `${path}.schema`)\n\n if (input.type !== 'object') throw invalid(`${path}.schema`, 'A collection schema must describe an object input.')\n const projection = compileProjection(input, `${path}.schema`)\n const authoringFields = compileAuthoringFields(input, `${path}.schema`)\n const structuredFields = compileStructuredFields(authoringFields)\n\n const validator = isEffectCollectionSchema(options.schema)\n ? Schema.toStandardSchemaV1(options.schema)\n : options.schema\n\n return {\n authoring: {\n ...(options.body === undefined ? undefined : { body: options.body }),\n authoringFields,\n canCreate: options.canCreate ?? true,\n collection,\n description: options.description ?? '',\n hierarchy: options.hierarchy ?? options.route.includes('*'),\n label: options.label,\n routes: { entry: options.route, home: collectionHomeRoute(options.route) },\n },\n executable: {\n project: projection,\n validate: (value) =>\n Effect.tryPromise(() =>\n Promise.resolve(validator['~standard'].validate(value)).then((validation) => {\n if ('issues' in validation || !Schema.is(Schema.JsonObject)(validation.value)) return validation\n const issues = structuredFields.validateIdentities(validation.value)\n\n return issues.length > 0 ? { issues } : validation\n }),\n ),\n },\n }\n}\n\nfunction collectionHomeRoute(entryRoute: string): string {\n const token = entryRoute.indexOf(':')\n const prefix = token < 0 ? entryRoute : entryRoute.slice(0, token)\n const normalized = `/${prefix.split('/').filter(Boolean).join('/')}`\n\n return normalized === '/' ? '/' : normalized.replace(/\\/$/u, '')\n}\n\ntype ProjectDocumentProjection = (input: Schema.JsonObject, parent?: string) => DocumentSchemaProjection\n\nfunction compileProjection(schema: Schema.JsonObject, path: string): ProjectDocumentProjection {\n const properties = objectKeyword(schema, 'properties', path, true)\n\n const declarations = new Map(\n Object.entries(properties).map(([name, value]) => {\n const property = requireObject(value, `${path}.${name}`)\n const nested = property.type === 'object' ? compileProjection(property, `${path}.${name}`) : undefined\n const items = property.type === 'array' ? requireObject(property.items, `${path}.${name}[]`) : undefined\n const listItem = items?.type === 'object' ? compileProjection(items, `${path}.${name}[]`) : undefined\n\n return [name, { listItem, nested }] as const\n }),\n )\n\n return (input, parent = '') => {\n const value: Record<string, Schema.Json> = {}\n const unknownPaths: string[] = []\n\n for (const [name, child] of Object.entries(input)) {\n const declaration = declarations.get(name)\n const fieldPath = parent ? `${parent}.${name}` : name\n\n if (!declarations.has(name)) {\n unknownPaths.push(fieldPath)\n } else if (declaration?.nested && isJsonObject(child)) {\n const projected = declaration.nested(child, fieldPath)\n value[name] = projected.value\n unknownPaths.push(...projected.unknownPaths)\n } else if (declaration?.listItem && Array.isArray(child)) {\n value[name] = child.map((item, index) => {\n if (!isJsonObject(item)) return item\n const projected = declaration.listItem?.(item, `${fieldPath}.${index}`)\n\n if (!projected) return item\n unknownPaths.push(...projected.unknownPaths)\n\n return projected.value\n })\n } else {\n value[name] = child\n }\n }\n\n return { unknownPaths, value }\n }\n}\n\nfunction compileAuthoringFields(\n schema: Schema.JsonObject,\n path: string,\n listItem = false,\n): ReadonlyArray<StructuredField> {\n const properties = objectKeyword(schema, 'properties', path, true)\n const required = stringArrayKeyword(schema, 'required', path)\n\n return Object.entries(properties).flatMap(([name, value]) => {\n if (!name || name.includes('.')) {\n throw invalid(`${path}.${name || '<empty>'}`, 'Field names must be non-empty and cannot contain dots.')\n }\n\n if (name === 'id') {\n if (listItem) return []\n throw invalid(`${path}.id`, 'Field \"id\" is reserved for CMS identity.')\n }\n\n const property = requireObject(value, `${path}.${name}`)\n const fieldRequired = required.has(name)\n\n if (property.type === 'object') {\n return [\n {\n ...fieldPresentation(property, `${path}.${name}`, name, fieldRequired),\n fields: compileAuthoringFields(property, `${path}.${name}`),\n input: 'object',\n options: [],\n type: 'object',\n },\n ]\n }\n\n return [compileAuthoringField(property, `${path}.${name}`, name, fieldRequired)]\n })\n}\n\nfunction compileAuthoringField(\n schema: Schema.JsonObject,\n schemaPath: string,\n name: string,\n required: boolean,\n): StructuredField {\n const presentation = fieldPresentation(schema, schemaPath, name, required)\n\n switch (schema.type) {\n case 'boolean':\n return { ...presentation, input: input(schema, schemaPath, 'toggle', ['toggle']), options: [], type: 'boolean' }\n case 'integer':\n case 'number': {\n const options = numericOptions(schema, schemaPath)\n\n return {\n ...presentation,\n input: input(schema, schemaPath, options.length > 0 ? 'select' : 'number', ['number', 'select']),\n options,\n type: 'number',\n }\n }\n\n case 'string': {\n if (schema.format === 'date') {\n return { ...presentation, input: input(schema, schemaPath, 'date', ['date']), options: [], type: 'date' }\n }\n\n if (schema.format === 'cms-document-reference') {\n return { ...presentation, input: 'document', options: [], type: 'string' }\n }\n\n if (schema.format === 'cms-managed-media-reference') {\n return { ...presentation, input: 'media', options: [], type: 'string' }\n }\n\n const options = stringOptions(schema, schemaPath)\n\n return {\n ...presentation,\n input: input(schema, schemaPath, options.length > 0 ? 'select' : 'text', [\n 'select',\n 'text',\n 'textarea',\n 'image',\n 'link',\n 'document',\n 'media',\n ]),\n options,\n type: 'string',\n }\n }\n\n case 'array': {\n const items = requireObject(schema.items, `${schemaPath}[]`)\n\n if (items.type === 'object') {\n const itemProperties = objectKeyword(items, 'properties', `${schemaPath}[]`, true)\n const itemRequired = stringArrayKeyword(items, 'required', `${schemaPath}[]`)\n const identity = itemProperties.id\n\n if (!identity || requireObject(identity, `${schemaPath}[].id`).type !== 'string' || !itemRequired.has('id')) {\n throw invalid(schemaPath, 'Repeatable object items need a required string id managed by the CMS.')\n }\n\n return {\n ...presentation,\n fields: compileAuthoringFields(items, `${schemaPath}[]`, true),\n input: 'list',\n options: [],\n type: 'array',\n }\n }\n\n if (items.type !== 'string')\n throw invalid(schemaPath, 'Studio supports scalar string lists or repeatable objects with stable identity.')\n\n return {\n ...presentation,\n input: input(schema, schemaPath, 'multiselect', ['multiselect']),\n options: stringOptions(items, `${schemaPath}[]`, schema[FIELD_OPTIONS_METADATA]),\n type: 'string[]',\n }\n }\n\n default:\n throw invalid(schemaPath, `Studio cannot generate an input for schema type \"${displayJson(schema.type)}\".`)\n }\n}\n\nfunction fieldPresentation(schema: Schema.JsonObject, schemaPath: string, name: string, required: boolean) {\n const defaultValue = schema.default\n const description = stringKeyword(schema, 'description', schemaPath)\n const title = stringKeyword(schema, 'title', schemaPath)\n\n return {\n ...(defaultValue === undefined ? undefined : { defaultValue }),\n ...(description === undefined ? undefined : { description }),\n label: title?.trim() || humanize(name),\n name,\n nullable: schema['x-cms-nullable'] === true,\n required,\n }\n}\n\nfunction input<const Supported extends ReadonlyArray<CmsFieldInput>>(\n schema: Schema.JsonObject,\n path: string,\n fallback: Supported[number],\n supported: Supported,\n): Supported[number] {\n const configured = schema[FIELD_INPUT_METADATA]\n\n if (configured === undefined) return fallback\n const decoded = Schema.decodeUnknownResult(Schema.Literals([...supported]))(configured)\n\n if (Result.isSuccess(decoded)) return decoded.success\n throw invalid(path, `Input \"${displayJson(configured)}\" is not compatible with this field.`)\n}\n\nfunction stringOptions(\n schema: Schema.JsonObject,\n path: string,\n configured: Schema.Json | undefined = schema[FIELD_OPTIONS_METADATA],\n): ReadonlyArray<{ label: string; value: string }> {\n const value = schema.enum\n\n if (value === undefined) return []\n const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.String))(value)\n\n if (Result.isFailure(decoded)) throw invalid(path, 'Field options must all be strings.')\n\n return labeledOptions(configured, decoded.success, path)\n}\n\nfunction numericOptions(schema: Schema.JsonObject, path: string): ReadonlyArray<{ label: string; value: number }> {\n const value = schema.enum\n\n if (value === undefined) return []\n const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.Finite))(value)\n\n if (Result.isFailure(decoded)) throw invalid(path, 'Field options must all be finite numbers.')\n\n return labeledOptions(schema[FIELD_OPTIONS_METADATA], decoded.success, path)\n}\n\nfunction labeledOptions<const Value extends string | number>(\n configured: Schema.Json | undefined,\n values: ReadonlyArray<Value>,\n path: string,\n): ReadonlyArray<{ label: string; value: Value }> {\n if (configured === undefined) return values.map((value) => ({ label: String(value), value }))\n\n const decoded = Schema.decodeUnknownResult(\n Schema.Array(Schema.Struct({ label: Schema.String, value: Schema.Union([Schema.String, Schema.Finite]) })),\n )(configured)\n\n if (\n Result.isFailure(decoded) ||\n decoded.success.length !== values.length ||\n decoded.success.some((option, index) => option.value !== values[index])\n )\n throw invalid(path, 'Labeled options must match the schema enum values in order.')\n\n return values.map((value, index) => ({ label: decoded.success[index]?.label ?? String(value), value }))\n}\n\nfunction objectKeyword(schema: Schema.JsonObject, keyword: string, path: string, optional = false): Schema.JsonObject {\n const value = schema[keyword]\n\n if (value === undefined && optional) return {}\n\n return requireObject(value, `${path}.${keyword}`)\n}\n\nfunction stringArrayKeyword(schema: Schema.JsonObject, keyword: string, path: string): ReadonlySet<string> {\n const value = schema[keyword]\n\n if (value === undefined) return new Set()\n const decoded = Schema.decodeUnknownResult(Schema.Array(Schema.String))(value)\n\n if (Result.isFailure(decoded)) throw invalid(`${path}.${keyword}`, `Expected \"${keyword}\" to be an array of strings.`)\n\n return new Set(decoded.success)\n}\n\nfunction stringKeyword(schema: Schema.JsonObject, keyword: string, path: string): string | undefined {\n const value = schema[keyword]\n\n if (value === undefined) return undefined\n const decoded = Schema.decodeUnknownResult(Schema.String)(value)\n\n if (Result.isFailure(decoded)) throw invalid(`${path}.${keyword}`, `Expected \"${keyword}\" to be a string.`)\n\n return decoded.success\n}\n\nfunction requireObject(value: Schema.Json | undefined, path: string): Schema.JsonObject {\n if (!isJsonObject(value)) throw invalid(path, 'Studio requires an object input structure at this location.')\n\n return value\n}\n\nfunction humanize(path: string): string {\n const name = path.split('.').at(-1) ?? path\n\n const words = name\n .replace(/([a-z\\d])([A-Z])/gu, '$1 $2')\n .replace(/[-_]+/gu, ' ')\n .trim()\n\n return words ? `${words.charAt(0).toUpperCase()}${words.slice(1)}` : name\n}\n\nfunction displayJson(value: Schema.Json | undefined): string {\n return value === undefined ? 'undefined' : (JSON.stringify(value) ?? 'undefined')\n}\n\nfunction invalid(path: string, message: string): CmsDocumentModelInvalid {\n return new CmsDocumentModelInvalid({ message, path })\n}\n\n/** Resolve local input references while rejecting recursive or ambiguous editor structures. */\nfunction resolveInputStructure(root: Schema.JsonObject, path: string): Schema.JsonObject {\n function visit(node: Schema.JsonObject, currentPath: string, ancestors: ReadonlySet<string>): Schema.JsonObject {\n if (node.$ref !== undefined) {\n const decodedRef = Schema.decodeUnknownResult(Schema.String)(node.$ref)\n\n if (Result.isFailure(decodedRef)) throw invalid(currentPath, 'Expected a string schema reference.')\n const ref = decodedRef.success\n\n if (!ref.startsWith('#/') || ancestors.has(ref)) {\n throw invalid(currentPath, 'Studio requires non-recursive local schema references.')\n }\n\n let target: Schema.Json | undefined = root\n\n for (const segment of ref.slice(2).split('/')) {\n target = isJsonObject(target) ? target[segment.replace(/~1/gu, '/').replace(/~0/gu, '~')] : undefined\n }\n\n const { $ref: _, ...siblings } = node\n\n return visit(\n Object.assign({}, requireObject(target, currentPath), siblings),\n currentPath,\n new Set([...ancestors, ref]),\n )\n }\n\n if (node.anyOf !== undefined) {\n if (!Array.isArray(node.anyOf)) throw invalid(currentPath, 'Expected an array of schema alternatives.')\n const alternatives = node.anyOf.map((value) => requireObject(value, currentPath))\n const nulls = alternatives.filter((value) => value.type === 'null')\n const values = alternatives.filter((value) => value.type !== 'null')\n\n if (nulls.length === 1 && values.length === 1) {\n const { anyOf: _, ...siblings } = node\n\n return Object.assign(visit(Object.assign({}, values[0], siblings), currentPath, ancestors), {\n 'x-cms-nullable': true,\n })\n }\n\n throw invalid(currentPath, 'Studio requires a single supported input type per field.')\n }\n\n if (node.oneOf !== undefined) {\n throw invalid(currentPath, 'Studio requires a single supported input type per field.')\n }\n\n const out = Object.fromEntries(Object.entries(node))\n\n if (node.allOf !== undefined) {\n if (!Array.isArray(node.allOf)) throw invalid(currentPath, 'Expected an array of schema constraints.')\n\n for (const constraint of node.allOf) {\n const part = visit(requireObject(constraint, currentPath), currentPath, ancestors)\n\n if (\n part.properties !== undefined ||\n part.items !== undefined ||\n (part.type !== undefined && part.type !== node.type)\n ) {\n throw invalid(currentPath, 'Studio cannot combine structural schema intersections.')\n }\n\n for (const key of [\n 'title',\n 'description',\n 'default',\n 'format',\n 'enum',\n FIELD_INPUT_METADATA,\n FIELD_OPTIONS_METADATA,\n ]) {\n if (part[key] === undefined) continue\n\n if (out[key] !== undefined && JSON.stringify(out[key]) !== JSON.stringify(part[key])) {\n throw invalid(currentPath, `Conflicting field metadata \"${key}\" in schema intersection.`)\n }\n\n out[key] = part[key]\n }\n }\n }\n\n if (node.properties !== undefined) {\n out.properties = Object.fromEntries(\n Object.entries(requireObject(node.properties, currentPath)).map(([name, value]) => [\n name,\n visit(requireObject(value, `${currentPath}.${name}`), `${currentPath}.${name}`, ancestors),\n ]),\n )\n }\n\n if (node.items !== undefined)\n out.items = visit(requireObject(node.items, `${currentPath}[]`), `${currentPath}[]`, ancestors)\n\n return out\n }\n\n return visit(root, path, new Set())\n}\n\nfunction isEffectCollectionSchema(schema: CmsCollectionSchema): schema is Schema.ConstraintDecoder<unknown> {\n return Schema.isSchema(schema)\n}\n"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- //#region src/internal/field-metadata.ts
2
- const FIELD_INPUT_METADATA = "x-cms-input";
3
- const FIELD_OPTIONS_METADATA = "x-cms-options";
4
-
5
- //#endregion
6
- export { FIELD_INPUT_METADATA, FIELD_OPTIONS_METADATA };
7
- //# sourceMappingURL=field-metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-metadata.js","names":[],"sources":["../../../../src/internal/field-metadata.ts"],"sourcesContent":["export const FIELD_INPUT_METADATA = 'x-cms-input'\n\nexport const FIELD_OPTIONS_METADATA = 'x-cms-options'\n"],"mappings":";AAAA,MAAa,uBAAuB;AAEpC,MAAa,yBAAyB"}
@@ -1,12 +0,0 @@
1
- import { r as FormCapabilities } from "../Forms-CfNPTiCr.js";
2
- import { Result, Schema } from "effect";
3
-
4
- //#region src/internal/form-capabilities.ts
5
- function validateFormCapabilities(definition) {
6
- Result.getOrThrow(Schema.decodeResult(FormCapabilities)(definition, { onExcessProperty: "error" }));
7
- if (new Set(definition.fieldTypes).size !== definition.fieldTypes.length || new Set(definition.rules).size !== definition.rules.length) throw new Error("Form capabilities must be unique.");
8
- }
9
-
10
- //#endregion
11
- export { validateFormCapabilities };
12
- //# sourceMappingURL=form-capabilities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-capabilities.js","names":[],"sources":["../../../../src/internal/form-capabilities.ts"],"sourcesContent":["import { FormCapabilities } from '@internal/protocol/Forms'\nimport { Result, Schema } from 'effect'\n\nexport function validateFormCapabilities(definition: FormCapabilities): void {\n Result.getOrThrow(Schema.decodeResult(FormCapabilities)(definition, { onExcessProperty: 'error' }))\n\n if (\n new Set(definition.fieldTypes).size !== definition.fieldTypes.length ||\n new Set(definition.rules).size !== definition.rules.length\n ) {\n throw new Error('Form capabilities must be unique.')\n }\n}\n"],"mappings":";;;;AAGA,SAAgB,yBAAyB,YAAoC;CAC3E,OAAO,WAAW,OAAO,aAAa,gBAAgB,CAAC,CAAC,YAAY,EAAE,kBAAkB,QAAQ,CAAC,CAAC;CAElG,IACE,IAAI,IAAI,WAAW,UAAU,CAAC,CAAC,SAAS,WAAW,WAAW,UAC9D,IAAI,IAAI,WAAW,KAAK,CAAC,CAAC,SAAS,WAAW,MAAM,QAEpD,MAAM,IAAI,MAAM,mCAAmC;AAEvD"}
@@ -1,73 +0,0 @@
1
- import { Result, Schema } from "effect";
2
-
3
- //#region src/internal/i18n.ts
4
- /** Copies only public, serializable fields; executable installation configuration stays on the server. */
5
- function compileCmsI18n(options) {
6
- if (!options) return {
7
- defaultLocale: "",
8
- fallbackLocale: null,
9
- prefixDefaultLocale: false,
10
- siteConfig: "documents",
11
- messageParameters: {},
12
- locales: {}
13
- };
14
- const codes = Object.keys(options.locales);
15
- if (!codes.includes(options.defaultLocale) || options.fallbackLocale != null && !codes.includes(options.fallbackLocale)) throw new Error("i18n defaultLocale and fallbackLocale must be declared in i18n.locales.");
16
- const locales = Object.fromEntries(Object.entries(options.locales).map(([code, locale]) => {
17
- if (!/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u.test(code) || !Schema.is(Schema.String)(locale.name) || !locale.name.trim()) throw new Error(`Invalid i18n locale: ${code}. Supply a locale code and display name.`);
18
- const entries = [];
19
- const ancestors = /* @__PURE__ */ new Set();
20
- function visit(value, path) {
21
- if (Schema.is(Schema.String)(value)) {
22
- entries.push([path, value]);
23
- return;
24
- }
25
- if (!Schema.is(Schema.JsonObject)(value) || ancestors.has(value)) throw new Error(`Invalid i18n message ${code}.${path}: expected a string or nested dictionary.`);
26
- ancestors.add(value);
27
- for (const [key, child] of Object.entries(value)) {
28
- if (!key || key.includes(".")) throw new Error(`Invalid i18n message key: ${code}.${path}.${key}`);
29
- visit(child, path ? `${path}.${key}` : key);
30
- }
31
- ancestors.delete(value);
32
- }
33
- visit(Result.getOrThrow(Schema.decodeResult(Schema.JsonObject)(locale.messages ?? {})), "");
34
- return [code, {
35
- name: locale.name,
36
- messages: Object.fromEntries(entries)
37
- }];
38
- }));
39
- const canonicalLocale = options.fallbackLocale ?? options.defaultLocale;
40
- const canonicalMessages = locales[canonicalLocale]?.messages ?? {};
41
- const canonicalKeys = Object.keys(canonicalMessages);
42
- const messageParameters = Object.fromEntries(canonicalKeys.map((key) => [key, placeholders(canonicalMessages[key] ?? "")]));
43
- for (const [code, locale] of Object.entries(locales)) {
44
- for (const key of Object.keys(locale.messages)) {
45
- if (!Object.hasOwn(canonicalMessages, key)) throw new Error(`Invalid i18n message ${code}.${key}: the canonical locale ${canonicalLocale} has no such key.`);
46
- const expected = messageParameters[key] ?? [];
47
- const actual = placeholders(locale.messages[key] ?? "");
48
- if (expected.join("\0") !== actual.join("\0")) throw new Error(`Invalid i18n message ${code}.${key}: placeholders must match ${canonicalLocale}.${key} (${expected.join(", ")}).`);
49
- }
50
- if (options.fallbackLocale == null) {
51
- const missing = canonicalKeys.find((key) => !Object.hasOwn(locale.messages, key));
52
- if (missing) throw new Error(`Invalid i18n locale ${code}: missing message ${missing} and no fallback locale is configured.`);
53
- }
54
- }
55
- return {
56
- defaultLocale: options.defaultLocale,
57
- fallbackLocale: options.fallbackLocale ?? null,
58
- prefixDefaultLocale: options.prefixDefaultLocale ?? false,
59
- siteConfig: options.siteConfig ?? "documents",
60
- messageParameters,
61
- locales
62
- };
63
- }
64
- function ownsCmsLocale(configuration, documentRoute) {
65
- return Boolean(configuration.defaultLocale) && (configuration.siteConfig === "localized-routes" || documentRoute);
66
- }
67
- function placeholders(message) {
68
- return [...message.matchAll(/\{([\w]+)\}/gu)].flatMap((match) => match[1] ? [match[1]] : []).filter((name, index, names) => names.indexOf(name) === index).sort((left, right) => left.localeCompare(right));
69
- }
70
-
71
- //#endregion
72
- export { compileCmsI18n, ownsCmsLocale };
73
- //# sourceMappingURL=i18n.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.js","names":[],"sources":["../../../../src/internal/i18n.ts"],"sourcesContent":["import { Result, Schema } from 'effect'\nimport type { CmsI18nOptions } from '../I18n'\n\nexport interface CompiledCmsI18n {\n readonly defaultLocale: string\n readonly fallbackLocale: string | null\n readonly prefixDefaultLocale: boolean\n readonly siteConfig: 'documents' | 'localized-routes'\n readonly messageParameters: Readonly<Record<string, ReadonlyArray<string>>>\n readonly locales: Readonly<\n Record<string, { readonly name: string; readonly messages: Readonly<Record<string, string>> }>\n >\n}\n\n/** Copies only public, serializable fields; executable installation configuration stays on the server. */\nexport function compileCmsI18n(options?: CmsI18nOptions): CompiledCmsI18n {\n if (!options)\n return {\n defaultLocale: '',\n fallbackLocale: null,\n prefixDefaultLocale: false,\n siteConfig: 'documents',\n messageParameters: {},\n locales: {},\n }\n const codes = Object.keys(options.locales)\n\n if (\n !codes.includes(options.defaultLocale) ||\n (options.fallbackLocale != null && !codes.includes(options.fallbackLocale))\n ) {\n throw new Error('i18n defaultLocale and fallbackLocale must be declared in i18n.locales.')\n }\n\n const locales = Object.fromEntries(\n Object.entries(options.locales).map(([code, locale]) => {\n if (\n !/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u.test(code) ||\n !Schema.is(Schema.String)(locale.name) ||\n !locale.name.trim()\n ) {\n throw new Error(`Invalid i18n locale: ${code}. Supply a locale code and display name.`)\n }\n\n const entries: [string, string][] = []\n const ancestors = new Set<object>()\n\n function visit(value: Schema.Json, path: string): void {\n if (Schema.is(Schema.String)(value)) {\n entries.push([path, value])\n\n return\n }\n\n if (!Schema.is(Schema.JsonObject)(value) || ancestors.has(value)) {\n throw new Error(`Invalid i18n message ${code}.${path}: expected a string or nested dictionary.`)\n }\n\n ancestors.add(value)\n\n for (const [key, child] of Object.entries(value)) {\n if (!key || key.includes('.')) throw new Error(`Invalid i18n message key: ${code}.${path}.${key}`)\n visit(child, path ? `${path}.${key}` : key)\n }\n\n ancestors.delete(value)\n }\n\n visit(Result.getOrThrow(Schema.decodeResult(Schema.JsonObject)(locale.messages ?? {})), '')\n\n return [code, { name: locale.name, messages: Object.fromEntries(entries) }]\n }),\n )\n\n const canonicalLocale = options.fallbackLocale ?? options.defaultLocale\n const canonicalMessages = locales[canonicalLocale]?.messages ?? {}\n const canonicalKeys = Object.keys(canonicalMessages)\n\n const messageParameters = Object.fromEntries(\n canonicalKeys.map((key) => [key, placeholders(canonicalMessages[key] ?? '')]),\n )\n\n for (const [code, locale] of Object.entries(locales)) {\n for (const key of Object.keys(locale.messages)) {\n if (!Object.hasOwn(canonicalMessages, key))\n throw new Error(`Invalid i18n message ${code}.${key}: the canonical locale ${canonicalLocale} has no such key.`)\n\n const expected = messageParameters[key] ?? []\n const actual = placeholders(locale.messages[key] ?? '')\n\n if (expected.join('\\0') !== actual.join('\\0'))\n throw new Error(\n `Invalid i18n message ${code}.${key}: placeholders must match ${canonicalLocale}.${key} (${expected.join(', ')}).`,\n )\n }\n\n if (options.fallbackLocale == null) {\n const missing = canonicalKeys.find((key) => !Object.hasOwn(locale.messages, key))\n\n if (missing)\n throw new Error(`Invalid i18n locale ${code}: missing message ${missing} and no fallback locale is configured.`)\n }\n }\n\n return {\n defaultLocale: options.defaultLocale,\n fallbackLocale: options.fallbackLocale ?? null,\n prefixDefaultLocale: options.prefixDefaultLocale ?? false,\n siteConfig: options.siteConfig ?? 'documents',\n messageParameters,\n locales,\n }\n}\n\nexport function ownsCmsLocale(configuration: CompiledCmsI18n, documentRoute: boolean): boolean {\n return Boolean(configuration.defaultLocale) && (configuration.siteConfig === 'localized-routes' || documentRoute)\n}\n\nfunction placeholders(message: string): ReadonlyArray<string> {\n return [...message.matchAll(/\\{([\\w]+)\\}/gu)]\n .flatMap((match) => (match[1] ? [match[1]] : []))\n .filter((name, index, names) => names.indexOf(name) === index)\n .sort((left, right) => left.localeCompare(right))\n}\n"],"mappings":"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"}
@@ -1,68 +0,0 @@
1
- import { d as STUDIO_APP_PATH } from "../HttpPaths-c9nLZ9H2.js";
2
- import { Config, Effect, FileSystem, Path } from "effect";
3
- import { fileURLToPath } from "node:url";
4
- import { addRouteMiddleware, addServerHandler, addServerTemplate, addVitePlugin } from "@nuxt/kit";
5
-
6
- //#region src/internal/studio-app.ts
7
- /** A separate HTML entry shares Nuxt's Vite graph, but never its document or Vue app. */
8
- const registerStudioApp = Effect.fn("CmsNuxtModule.registerStudioApp")(function* (nuxt, resolver) {
9
- addRouteMiddleware({
10
- name: "cms-studio-document",
11
- path: resolver.resolve("./runtime/studio-navigation"),
12
- global: true
13
- });
14
- const fileSystem = yield* FileSystem.FileSystem;
15
- const path = yield* Path.Path;
16
- const packagedHost = resolver.resolve("../studio/host.js");
17
- const packaged = yield* fileSystem.exists(packagedHost);
18
- let host = packagedHost;
19
- if (!packaged) {
20
- const source = fileURLToPath(import.meta.resolve("@internal/studio/host"));
21
- const root = path.dirname(path.dirname(source));
22
- host = `${root}/dist/host.js`;
23
- if (!(yield* Config.Boolean("CMS_REUSE_STUDIO_BUILD").pipe(Config.withDefault(false))) || !(yield* fileSystem.exists(host)) || !(yield* fileSystem.exists(host.replace(/\.js$/u, ".css")))) {
24
- const { build } = yield* Effect.promise(() => import("vite"));
25
- yield* Effect.promise(() => build({
26
- root,
27
- configFile: `${root}/vite.config.ts`
28
- }));
29
- }
30
- }
31
- nuxt.options.alias["#cms/studio"] = host;
32
- nuxt.options.alias["#cms/studio-styles"] = host.replace(/\.js$/u, ".css?url");
33
- const entryBase = resolver.resolve("./runtime/studio-entry");
34
- const entry = `${entryBase}.${(yield* fileSystem.exists(`${entryBase}.ts`)) ? "ts" : "js"}`;
35
- const assets = `${nuxt.options.app.baseURL}${nuxt.options.app.buildAssetsDir}`.replace(/\/+/gu, "/");
36
- let entryUrl = `${assets}@fs${entry}`;
37
- addVitePlugin({
38
- name: "cms-studio-entry",
39
- apply: "build",
40
- buildStart() {
41
- this.emitFile({
42
- type: "chunk",
43
- id: entry,
44
- name: "cms-studio"
45
- });
46
- },
47
- generateBundle(_options, bundle) {
48
- const chunk = Object.values(bundle).find((output) => output.type === "chunk" && output.name === "cms-studio");
49
- if (chunk) entryUrl = `${nuxt.options.app.baseURL}${chunk.fileName}`;
50
- }
51
- }, { server: false });
52
- const handler = addServerTemplate({
53
- filename: resolver.resolve("./runtime/studio-shell.virtual.mjs"),
54
- getContents: () => [`import { createStudioAppHandler } from ${JSON.stringify(resolver.resolve("./runtime/studio-app"))}`, `export default createStudioAppHandler(${JSON.stringify(entryUrl)}, ${JSON.stringify(nuxt.options.dev ? `${assets}@vite/client` : void 0)})`].join("\n")
55
- });
56
- addServerHandler({
57
- handler: handler.filename,
58
- route: STUDIO_APP_PATH
59
- });
60
- addServerHandler({
61
- handler: handler.filename,
62
- route: `${STUDIO_APP_PATH}/**:path`
63
- });
64
- });
65
-
66
- //#endregion
67
- export { registerStudioApp };
68
- //# sourceMappingURL=studio-app.js.map