@phtngyn/cms 0.2.0-beta.8 → 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 -404
  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 +1040 -152
  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 +8793 -39395
  354. package/studio/host.js.br +0 -0
  355. package/studio/host.js.gz +0 -0
  356. package/CHANGELOG.md +0 -14
  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-CMweD9bn.js +0 -1191
  361. package/src/Configuration-CMweD9bn.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-tYtwbBjr.js +0 -978
  372. package/src/DocumentEngine-tYtwbBjr.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-Be3vshPJ.js +0 -20
  383. package/src/HttpPaths-Be3vshPJ.js.map +0 -1
  384. package/src/I18n-wxswIRyY.d.ts +0 -30
  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-BXfjaZOu.js +0 -2756
  391. package/src/S3MediaObjects-BXfjaZOu.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-3I_pozUl.js +0 -535
  399. package/src/dev-lifecycle-3I_pozUl.js.map +0 -1
  400. package/src/installation-DxqSSVbH.js +0 -9105
  401. package/src/installation-DxqSSVbH.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 -104
  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 -58
  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-C4_JBo1w.js +0 -335
  521. package/studio/SelectMenu-wXqxymUw.js +0 -34045
  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
@@ -0,0 +1,193 @@
1
+ import { ByteSize, Context, Deferred, Effect, FileSystem, Layer, Pull, Schema, Stream } from "effect";
2
+ import { Readable } from "node:stream";
3
+ import * as NodeStream from "@effect/platform-node/NodeStream";
4
+ import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
5
+ import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
6
+ //#region ../server/src/MediaObjects.ts
7
+ var MediaStorageError = class extends Schema.TaggedError()("Media.StorageError", {
8
+ operation: Schema.NonEmptyString,
9
+ cause: Schema.Defect()
10
+ }) {};
11
+ /** The private-object-store seam used by the Media library and its recovery worker. */
12
+ const MediaObjects = Context.Service("@internal/server/MediaObjects");
13
+ //#endregion
14
+ //#region ../s3/src/internal/keys.ts
15
+ function safePath(path, allowEmpty) {
16
+ if (!path) return allowEmpty;
17
+ return path === path.trim() && !path.startsWith("/") && !path.endsWith("/") && !Array.from(path).some((character) => {
18
+ const code = character.codePointAt(0);
19
+ return character === "\\" || code !== void 0 && (code <= 31 || code === 127);
20
+ }) && path.split("/").every((segment) => segment !== "" && segment !== "." && segment !== "..");
21
+ }
22
+ function physicalKey(prefix, key) {
23
+ if (!safePath(prefix, true) || !safePath(key, false)) throw new Error("Unsafe media object key.");
24
+ return prefix ? `${prefix}/${key}` : key;
25
+ }
26
+ /** Listing a folder includes its separator; listing a key prefix does not. */
27
+ function physicalPrefix(prefix, key) {
28
+ if (!key) return prefix ? `${physicalKey("", prefix)}/` : "";
29
+ return key.endsWith("/") ? `${physicalKey(prefix, key.slice(0, -1))}/` : physicalKey(prefix, key);
30
+ }
31
+ /** Ignore provider records outside this installation's namespace. */
32
+ function relativeKey(prefix, key) {
33
+ const namespace = prefix ? `${prefix}/` : "";
34
+ return key && key.startsWith(namespace) ? key.slice(namespace.length) : void 0;
35
+ }
36
+ function validateOptions(options) {
37
+ if (!options.bucket.trim() || !options.region.trim() || !safePath(options.prefix ?? "", true) || options.endpoint !== void 0 && !options.endpoint.trim() || options.credentials && (!options.credentials.accessKeyId.trim() || !options.credentials.secretAccessKey)) return Effect.fail(new MediaStorageError({
38
+ operation: "configure",
39
+ cause: /* @__PURE__ */ new Error("Invalid S3 media configuration.")
40
+ }));
41
+ return Effect.succeed(options);
42
+ }
43
+ //#endregion
44
+ //#region ../s3/src/internal/upload.ts
45
+ const openUpload = Effect.fn("S3MediaObjects.openUpload")(function* (fs, filePath) {
46
+ const pull = yield* Stream.toPull(fs.stream(filePath));
47
+ const first = yield* Pull.catchDone(pull, () => Effect.succeed([])).pipe(Effect.mapError((cause) => new MediaStorageError({
48
+ operation: "put.open",
49
+ cause
50
+ })));
51
+ const error = yield* Deferred.make();
52
+ const closed = yield* Deferred.make();
53
+ const onError = (cause) => Deferred.doneUnsafe(error, Effect.fail(new MediaStorageError({
54
+ operation: "put.read",
55
+ cause
56
+ })));
57
+ return {
58
+ body: yield* Effect.acquireRelease(NodeStream.toReadable(Stream.concat(Stream.fromArray(first), Stream.fromPull(Effect.succeed(pull)))).pipe(Effect.tap((body) => Effect.sync(() => {
59
+ body.on("error", onError);
60
+ body.once("close", () => Deferred.doneUnsafe(closed, Effect.void));
61
+ }))), (body) => Effect.sync(() => body.destroy()).pipe(Effect.andThen(Deferred.await(closed)), Effect.ensuring(Effect.sync(() => body.removeListener("error", onError))))),
62
+ error
63
+ };
64
+ });
65
+ //#endregion
66
+ //#region ../s3/src/internal/client.ts
67
+ const failure = (operation, cause) => new MediaStorageError({
68
+ operation,
69
+ cause
70
+ });
71
+ function isMissing(cause) {
72
+ if (!(cause instanceof Error)) return false;
73
+ return cause.name === "NoSuchKey" || cause.name === "NotFound";
74
+ }
75
+ function make(client, options, fs) {
76
+ const bucket = options.bucket;
77
+ const prefix = options.prefix ?? "";
78
+ const key = (value) => physicalKey(prefix, value);
79
+ const request = Effect.fn("S3MediaObjects.request")(function* (operation, send) {
80
+ return yield* Effect.tryPromise({
81
+ try: send,
82
+ catch: (cause) => failure(operation, cause)
83
+ });
84
+ });
85
+ const missingAsNull = (effect) => effect.pipe(Effect.catchIf((error) => isMissing(error.cause), () => Effect.succeed(null)));
86
+ const statObject = Effect.fn("S3MediaObjects.stat")(function* (objectKey) {
87
+ const output = yield* request("stat", (signal) => client.send(new HeadObjectCommand({
88
+ Bucket: bucket,
89
+ Key: key(objectKey)
90
+ }), { abortSignal: signal })).pipe(missingAsNull);
91
+ if (!output) return null;
92
+ if (output.ContentLength === void 0 || !output.ContentType) return yield* failure("stat", /* @__PURE__ */ new Error("S3 object metadata is incomplete."));
93
+ return {
94
+ key: objectKey,
95
+ byteSize: output.ContentLength,
96
+ mimeType: output.ContentType
97
+ };
98
+ });
99
+ return MediaObjects.of({
100
+ check: request("bucket.check", (signal) => client.send(new HeadBucketCommand({ Bucket: bucket }), { abortSignal: signal })).pipe(Effect.timeoutOrElse({
101
+ duration: "3 seconds",
102
+ orElse: () => Effect.fail(failure("bucket.check.timeout", /* @__PURE__ */ new Error("S3 bucket check timed out.")))
103
+ }), Effect.asVoid),
104
+ put: Effect.fn("S3MediaObjects.put")(function* (input) {
105
+ const file = yield* fs.stat(input.filePath).pipe(Effect.mapError((cause) => failure("put.stat", cause)));
106
+ if (ByteSize.toBigInt(file.size) !== BigInt(input.byteSize)) return yield* failure("put.size", /* @__PURE__ */ new Error("The upload size changed before storage."));
107
+ const error = yield* Effect.gen(function* () {
108
+ const upload = yield* openUpload(fs, input.filePath);
109
+ yield* Effect.gen(function* () {
110
+ yield* request("put", (signal) => client.send(new PutObjectCommand({
111
+ Bucket: bucket,
112
+ Key: key(input.key),
113
+ Body: upload.body,
114
+ ContentLength: input.byteSize,
115
+ ContentType: input.mimeType
116
+ }), { abortSignal: signal }));
117
+ const stored = yield* statObject(input.key);
118
+ if (!stored || stored.byteSize !== input.byteSize || stored.mimeType !== input.mimeType) return yield* failure("put.verify", /* @__PURE__ */ new Error("Stored object metadata does not match the upload."));
119
+ }).pipe(Effect.raceFirst(Deferred.await(upload.error)));
120
+ return upload.error;
121
+ }).pipe(Effect.scoped);
122
+ yield* Effect.transposeOption(yield* Deferred.poll(error));
123
+ }),
124
+ read: Effect.fn("S3MediaObjects.read")(function* (objectKey, range) {
125
+ const output = yield* request("read", (signal) => client.send(new GetObjectCommand({
126
+ Bucket: bucket,
127
+ Key: key(objectKey),
128
+ Range: range ? `bytes=${range.start}-${range.end}` : void 0
129
+ }), { abortSignal: signal })).pipe(missingAsNull);
130
+ if (!output) return null;
131
+ if (!output.Body) return yield* failure("read", /* @__PURE__ */ new Error("S3 returned an empty response body."));
132
+ const body = output.Body;
133
+ const stream = yield* Effect.try({
134
+ try: () => body.transformToWebStream(),
135
+ catch: (cause) => failure("read", cause)
136
+ }).pipe(Effect.onError(() => Effect.sync(() => {
137
+ if (body instanceof Readable) body.destroy();
138
+ })));
139
+ if (range && (output.ContentLength !== range.end - range.start + 1 || !output.ContentRange?.startsWith(`bytes ${range.start}-${range.end}/`))) {
140
+ yield* Effect.tryPromise({
141
+ try: () => stream.cancel(),
142
+ catch: (cause) => failure("read.cleanup", cause)
143
+ }).pipe(Effect.ignore);
144
+ return yield* failure("read.range", /* @__PURE__ */ new Error("S3 returned a different byte range."));
145
+ }
146
+ return stream;
147
+ }),
148
+ stat: statObject,
149
+ remove: Effect.fn("S3MediaObjects.remove")(function* (objectKey) {
150
+ yield* request("remove", (signal) => client.send(new DeleteObjectCommand({
151
+ Bucket: bucket,
152
+ Key: key(objectKey)
153
+ }), { abortSignal: signal }));
154
+ }),
155
+ list: Effect.fn("S3MediaObjects.list")(function* (objectPrefix, cursor) {
156
+ const listPrefix = yield* Effect.try({
157
+ try: () => physicalPrefix(prefix, objectPrefix),
158
+ catch: (cause) => failure("list.key", cause)
159
+ });
160
+ const output = yield* request("list", (signal) => client.send(new ListObjectsV2Command({
161
+ Bucket: bucket,
162
+ Prefix: listPrefix,
163
+ ContinuationToken: cursor
164
+ }), { abortSignal: signal }));
165
+ return {
166
+ objects: (output.Contents ?? []).flatMap((entry) => {
167
+ const objectKey = entry.Key === void 0 ? void 0 : relativeKey(prefix, entry.Key);
168
+ return objectKey === void 0 || entry.Size === void 0 ? [] : [{
169
+ key: objectKey,
170
+ byteSize: entry.Size
171
+ }];
172
+ }),
173
+ nextCursor: output.NextContinuationToken
174
+ };
175
+ })
176
+ });
177
+ }
178
+ //#endregion
179
+ //#region ../s3/src/S3MediaObjects.ts
180
+ const layerNoDeps = (options) => Layer.effect(MediaObjects, Effect.gen(function* () {
181
+ const valid = yield* validateOptions(options);
182
+ const fs = yield* FileSystem.FileSystem;
183
+ return make(yield* Effect.acquireRelease(Effect.sync(() => new S3Client({
184
+ region: valid.region,
185
+ endpoint: valid.endpoint,
186
+ forcePathStyle: valid.forcePathStyle,
187
+ credentials: valid.credentials,
188
+ requestChecksumCalculation: "WHEN_REQUIRED"
189
+ })), (opened) => Effect.sync(() => opened.destroy())), valid, fs);
190
+ }));
191
+ const layer = (options) => layerNoDeps(options).pipe(Layer.provide(NodeFileSystem.layer));
192
+ //#endregion
193
+ export { MediaObjects as n, MediaStorageError as r, layer as t };
@@ -0,0 +1,57 @@
1
+ import "./Media-BQ0uL4w7.js";
2
+ import { Schema } from "effect";
3
+ //#region ../model/src/Seo.d.ts
4
+ declare const SiteSeoSettings: Schema.Struct<{
5
+ readonly siteName: Schema.String;
6
+ readonly canonicalOrigin: Schema.String;
7
+ readonly defaultDescription: Schema.optionalKey<Schema.String>;
8
+ readonly titleTemplate: Schema.optionalKey<Schema.String>;
9
+ readonly socialTitle: Schema.optionalKey<Schema.String>;
10
+ readonly socialDescription: Schema.optionalKey<Schema.String>;
11
+ readonly socialImage: Schema.optionalKey<Schema.Struct<{
12
+ readonly mediaId: Schema.brand<Schema.String, "MediaId">;
13
+ readonly alt: Schema.String;
14
+ }>>;
15
+ readonly index: Schema.Boolean;
16
+ readonly follow: Schema.Boolean;
17
+ readonly identity: Schema.optionalKey<Schema.Union<readonly [Schema.Struct<{
18
+ readonly image: Schema.optionalKey<Schema.Struct<{
19
+ readonly mediaId: Schema.brand<Schema.String, "MediaId">;
20
+ readonly alt: Schema.String;
21
+ }>>;
22
+ readonly name: Schema.String;
23
+ readonly url: Schema.optionalKey<Schema.String>;
24
+ readonly type: Schema.Literal<"Person">;
25
+ }>, Schema.Struct<{
26
+ readonly logo: Schema.optionalKey<Schema.Struct<{
27
+ readonly mediaId: Schema.brand<Schema.String, "MediaId">;
28
+ readonly alt: Schema.String;
29
+ }>>;
30
+ readonly name: Schema.String;
31
+ readonly url: Schema.optionalKey<Schema.String>;
32
+ readonly type: Schema.Literal<"Organization">;
33
+ }>, Schema.Struct<{
34
+ readonly logo: Schema.optionalKey<Schema.Struct<{
35
+ readonly mediaId: Schema.brand<Schema.String, "MediaId">;
36
+ readonly alt: Schema.String;
37
+ }>>;
38
+ readonly image: Schema.optionalKey<Schema.Struct<{
39
+ readonly mediaId: Schema.brand<Schema.String, "MediaId">;
40
+ readonly alt: Schema.String;
41
+ }>>;
42
+ readonly telephone: Schema.optionalKey<Schema.String>;
43
+ readonly address: Schema.optionalKey<Schema.Struct<{
44
+ readonly streetAddress: Schema.optionalKey<Schema.String>;
45
+ readonly addressLocality: Schema.optionalKey<Schema.String>;
46
+ readonly addressRegion: Schema.optionalKey<Schema.String>;
47
+ readonly postalCode: Schema.optionalKey<Schema.String>;
48
+ readonly addressCountry: Schema.optionalKey<Schema.String>;
49
+ }>>;
50
+ readonly name: Schema.String;
51
+ readonly url: Schema.optionalKey<Schema.String>;
52
+ readonly type: Schema.Literal<"LocalBusiness">;
53
+ }>]>>;
54
+ }>;
55
+ interface SiteSeoSettings extends Schema.Schema.Type<typeof SiteSeoSettings> {}
56
+ //#endregion
57
+ export { SiteSeoSettings as t };
@@ -0,0 +1,254 @@
1
+ import { i as MediaId } from "./Media-DSyvd14o.js";
2
+ import { Predicate, Schema } from "effect";
3
+ //#region ../model/src/internal/canonicalContent.ts
4
+ /** Stable JSON bytes that preserve array order and ignore object property order. */
5
+ function canonicalContent(value) {
6
+ if (Array.isArray(value)) return `[${value.map(canonicalContent).join(",")}]`;
7
+ if (isObject(value)) return `{${Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([key, item]) => `${JSON.stringify(key)}:${canonicalContent(item)}`).join(",")}}`;
8
+ return JSON.stringify(value) ?? "null";
9
+ }
10
+ /** The caller already supplies JSON, so only its representation needs narrowing. */
11
+ function isObject(value) {
12
+ return Predicate.isObject(value);
13
+ }
14
+ //#endregion
15
+ //#region ../model/src/ValidationIssue.ts
16
+ const IssuePath = Schema.Array(Schema.Union([Schema.String, Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))]));
17
+ const IssueLocation = Schema.Union([
18
+ Schema.Struct({
19
+ kind: Schema.Literal("field"),
20
+ path: IssuePath
21
+ }),
22
+ Schema.Struct({
23
+ kind: Schema.Literal("block"),
24
+ blockId: Schema.optionalKey(Schema.String),
25
+ path: IssuePath
26
+ }),
27
+ Schema.Struct({
28
+ kind: Schema.Literal("seo"),
29
+ path: IssuePath
30
+ }),
31
+ Schema.Struct({ kind: Schema.Literal("placement") }),
32
+ Schema.Struct({
33
+ kind: Schema.Literal("body"),
34
+ path: Schema.optionalKey(IssuePath)
35
+ }),
36
+ Schema.Struct({ kind: Schema.Literal("document") })
37
+ ]);
38
+ const ValidationIssue = Schema.Struct({
39
+ code: Schema.String,
40
+ location: IssueLocation,
41
+ message: Schema.String,
42
+ details: Schema.optionalKey(Schema.JsonObject),
43
+ locale: Schema.optionalKey(Schema.String)
44
+ });
45
+ function issue(code, location, message, details) {
46
+ return details === void 0 ? {
47
+ code,
48
+ location,
49
+ message
50
+ } : {
51
+ code,
52
+ location,
53
+ message,
54
+ details
55
+ };
56
+ }
57
+ /** Presentation text is never an identity or compatibility key. */
58
+ function issueKey(value) {
59
+ const details = value.details === void 0 ? null : Object.fromEntries(Object.entries(value.details).filter(([key]) => key !== "label"));
60
+ return canonicalContent([
61
+ value.code,
62
+ value.location,
63
+ details,
64
+ value.locale ?? null
65
+ ]);
66
+ }
67
+ //#endregion
68
+ //#region ../model/src/internal/calendarDate.ts
69
+ /** Accept only real calendar dates in the shared authored YYYY-MM-DD representation. */
70
+ function isCalendarDate(value) {
71
+ if (!/^\d{4}-\d{2}-\d{2}$/u.test(value)) return false;
72
+ const date = /* @__PURE__ */ new Date(`${value}T00:00:00.000Z`);
73
+ return Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value;
74
+ }
75
+ //#endregion
76
+ //#region ../model/src/Seo.ts
77
+ /** Installation and initial SEO addresses share one normalized HTTP origin contract. */
78
+ const SiteOrigin = Schema.String.check(Schema.makeFilter(isCanonicalOrigin, { message: "Use an HTTP or HTTPS origin without credentials, a path, query, or fragment." }));
79
+ const SeoImage = Schema.Struct({
80
+ mediaId: MediaId,
81
+ alt: Schema.String
82
+ });
83
+ const DocumentStructuredData = Schema.Union([Schema.Struct({ type: Schema.Literal("WebPage") }), Schema.Struct({
84
+ type: Schema.Literal("Article"),
85
+ headline: Schema.optionalKey(Schema.String),
86
+ datePublished: Schema.optionalKey(Schema.String),
87
+ dateModified: Schema.optionalKey(Schema.String)
88
+ })]);
89
+ /** Page overrides are optional; omitted values inherit the published site settings. */
90
+ const DocumentSeo = Schema.Struct({
91
+ title: Schema.optionalKey(Schema.String),
92
+ description: Schema.optionalKey(Schema.String),
93
+ socialTitle: Schema.optionalKey(Schema.String),
94
+ socialDescription: Schema.optionalKey(Schema.String),
95
+ socialImage: Schema.optionalKey(SeoImage),
96
+ index: Schema.optionalKey(Schema.Boolean),
97
+ follow: Schema.optionalKey(Schema.Boolean),
98
+ canonicalUrl: Schema.optionalKey(Schema.String),
99
+ structuredData: Schema.optionalKey(DocumentStructuredData)
100
+ });
101
+ const identityFields = {
102
+ name: Schema.String,
103
+ url: Schema.optionalKey(Schema.String)
104
+ };
105
+ const SiteIdentity = Schema.Union([
106
+ Schema.Struct({
107
+ type: Schema.Literal("Person"),
108
+ ...identityFields,
109
+ image: Schema.optionalKey(SeoImage)
110
+ }),
111
+ Schema.Struct({
112
+ type: Schema.Literal("Organization"),
113
+ ...identityFields,
114
+ logo: Schema.optionalKey(SeoImage)
115
+ }),
116
+ Schema.Struct({
117
+ type: Schema.Literal("LocalBusiness"),
118
+ ...identityFields,
119
+ logo: Schema.optionalKey(SeoImage),
120
+ image: Schema.optionalKey(SeoImage),
121
+ telephone: Schema.optionalKey(Schema.String),
122
+ address: Schema.optionalKey(Schema.Struct({
123
+ streetAddress: Schema.optionalKey(Schema.String),
124
+ addressLocality: Schema.optionalKey(Schema.String),
125
+ addressRegion: Schema.optionalKey(Schema.String),
126
+ postalCode: Schema.optionalKey(Schema.String),
127
+ addressCountry: Schema.optionalKey(Schema.String)
128
+ }))
129
+ })
130
+ ]);
131
+ const SiteSeoSettings = Schema.Struct({
132
+ siteName: Schema.String,
133
+ canonicalOrigin: Schema.String,
134
+ defaultDescription: Schema.optionalKey(Schema.String),
135
+ titleTemplate: Schema.optionalKey(Schema.String),
136
+ socialTitle: Schema.optionalKey(Schema.String),
137
+ socialDescription: Schema.optionalKey(Schema.String),
138
+ socialImage: Schema.optionalKey(SeoImage),
139
+ index: Schema.Boolean,
140
+ follow: Schema.Boolean,
141
+ identity: Schema.optionalKey(SiteIdentity)
142
+ });
143
+ const SiteSeoRevision = Schema.Struct({
144
+ version: Schema.String.check(Schema.isUUID()),
145
+ settings: SiteSeoSettings,
146
+ editedBy: Schema.String,
147
+ editedAt: Schema.String
148
+ });
149
+ const SiteSeoState = Schema.Struct({
150
+ working: SiteSeoRevision,
151
+ published: SiteSeoRevision
152
+ });
153
+ function resolveDocumentSeo(input) {
154
+ const { fields, path, page, site } = input;
155
+ const pageTitle = Schema.is(Schema.String)(fields.title) ? fields.title : site.siteName;
156
+ const title = site.titleTemplate?.replaceAll("%s", page?.title ?? pageTitle) ?? page?.title ?? pageTitle;
157
+ const fieldDescription = Schema.is(Schema.String)(fields.summary) ? fields.summary : void 0;
158
+ const description = page?.description ?? fieldDescription ?? site.defaultDescription;
159
+ return {
160
+ title,
161
+ ...description ? { description } : void 0,
162
+ socialTitle: page?.socialTitle ?? site.socialTitle ?? title,
163
+ ...page?.socialDescription ?? site.socialDescription ?? description ? { socialDescription: page?.socialDescription ?? site.socialDescription ?? description } : void 0,
164
+ ...page?.socialImage ?? site.socialImage ? { socialImage: page?.socialImage ?? site.socialImage } : void 0,
165
+ canonicalUrl: page?.canonicalUrl ?? new URL(path, `${site.canonicalOrigin}/`).href,
166
+ index: site.index && (page?.index ?? true),
167
+ follow: site.follow && (page?.follow ?? true),
168
+ structuredData: page?.structuredData ?? { type: "WebPage" },
169
+ ...site.identity ? { identity: site.identity } : void 0
170
+ };
171
+ }
172
+ function inspectDocumentSeo(seo) {
173
+ if (!seo) return [];
174
+ const issues = [];
175
+ const problem = (code, path, message) => issue(code, {
176
+ kind: "seo",
177
+ path
178
+ }, message);
179
+ for (const key of [
180
+ "title",
181
+ "description",
182
+ "socialTitle",
183
+ "socialDescription"
184
+ ]) if (seo[key] !== void 0 && !seo[key]?.trim()) issues.push(problem("seo.empty", [key], `${key} cannot be empty.`));
185
+ if (seo.canonicalUrl !== void 0 && !isHttpUrl(seo.canonicalUrl)) issues.push(problem("seo.url", ["canonicalUrl"], "Preferred page address needs a complete HTTP or HTTPS URL."));
186
+ if (seo.socialImage && !seo.socialImage.alt.trim()) issues.push(problem("seo.required", ["socialImage", "alt"], "Shared image needs a description."));
187
+ if (seo.structuredData?.type === "Article") {
188
+ if (seo.structuredData.headline !== void 0 && !seo.structuredData.headline.trim()) issues.push(problem("seo.empty", ["structuredData", "headline"], "Article headline cannot be empty."));
189
+ for (const key of ["datePublished", "dateModified"]) {
190
+ const value = seo.structuredData[key];
191
+ if (value !== void 0 && !isCalendarDate(value)) issues.push(problem("seo.date", ["structuredData", key], `${key} needs a valid calendar date.`));
192
+ }
193
+ }
194
+ return issues;
195
+ }
196
+ function inspectSiteSeo(settings) {
197
+ const issues = [];
198
+ const problem = (code, path, message) => issue(code, {
199
+ kind: "seo",
200
+ path
201
+ }, message);
202
+ if (!settings.siteName.trim()) issues.push(problem("seo.siteName", ["siteName"], "Website name is required."));
203
+ if (!isCanonicalOrigin(settings.canonicalOrigin)) issues.push(problem("seo.canonicalOrigin", ["canonicalOrigin"], "Website address needs an HTTP or HTTPS origin."));
204
+ if (settings.titleTemplate !== void 0 && !settings.titleTemplate.includes("%s")) issues.push(problem("seo.titleTemplate", ["titleTemplate"], "Title template needs %s."));
205
+ for (const key of [
206
+ "defaultDescription",
207
+ "socialTitle",
208
+ "socialDescription"
209
+ ]) if (settings[key] !== void 0 && !settings[key]?.trim()) issues.push(problem("seo.empty", [key], `${key} cannot be empty.`));
210
+ if (settings.socialImage && !settings.socialImage.alt.trim()) issues.push(problem("seo.required", ["socialImage", "alt"], "Default shared image needs a description."));
211
+ if (settings.identity) {
212
+ if (!settings.identity.name.trim()) issues.push(problem("seo.required", ["identity", "name"], "Website identity needs a name."));
213
+ if (settings.identity.url !== void 0 && !isHttpUrl(settings.identity.url)) issues.push(problem("seo.url", ["identity", "url"], "Website identity needs a complete HTTP or HTTPS URL."));
214
+ if ("image" in settings.identity && settings.identity.image && !settings.identity.image.alt.trim()) issues.push(problem("seo.required", [
215
+ "identity",
216
+ "image",
217
+ "alt"
218
+ ], "Website identity image needs a description."));
219
+ if ("logo" in settings.identity && settings.identity.logo && !settings.identity.logo.alt.trim()) issues.push(problem("seo.required", [
220
+ "identity",
221
+ "logo",
222
+ "alt"
223
+ ], "Website identity logo needs a description."));
224
+ }
225
+ return issues;
226
+ }
227
+ function siteSeoIssues(settings) {
228
+ return inspectSiteSeo(settings).map((issue) => issue.message);
229
+ }
230
+ function documentSeoMediaIds(seo) {
231
+ return seo?.socialImage ? [seo.socialImage.mediaId] : [];
232
+ }
233
+ function siteSeoMediaIds(settings) {
234
+ return [
235
+ settings.socialImage,
236
+ settings.identity && "image" in settings.identity ? settings.identity.image : void 0,
237
+ settings.identity && "logo" in settings.identity ? settings.identity.logo : void 0
238
+ ].flatMap((image) => image ? [image.mediaId] : []);
239
+ }
240
+ function isHttpUrl(value) {
241
+ try {
242
+ const url = new URL(value);
243
+ return (url.protocol === "http:" || url.protocol === "https:") && !!url.hostname && !url.username && !url.password && value === value.trim();
244
+ } catch {
245
+ return false;
246
+ }
247
+ }
248
+ function isCanonicalOrigin(value) {
249
+ if (!isHttpUrl(value)) return false;
250
+ const url = new URL(value);
251
+ return url.origin === value && url.pathname === "/" && !url.search && !url.hash;
252
+ }
253
+ //#endregion
254
+ export { canonicalContent as _, SiteSeoState as a, inspectSiteSeo as c, siteSeoMediaIds as d, isCalendarDate as f, issueKey as g, issue as h, SiteSeoSettings as i, resolveDocumentSeo as l, ValidationIssue as m, SiteOrigin as n, documentSeoMediaIds as o, IssuePath as p, SiteSeoRevision as r, inspectDocumentSeo as s, DocumentSeo as t, siteSeoIssues as u };