@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.
- package/LICENSE +18 -10
- package/README.md +59 -401
- package/drizzle/20261003215543_initial/migration.sql +251 -0
- package/drizzle/20261003215543_initial/snapshot.json +1941 -0
- package/package.json +75 -71
- package/src/Authoring.d.ts +41 -49
- package/src/Authoring.js +1 -1
- package/src/Blocks-BrxSemnd.js +40 -0
- package/src/Client.d.ts +8186 -0
- package/src/Client.js +41 -0
- package/src/Collections.d.ts +142 -0
- package/src/Collections.js +142 -0
- package/src/Config-CMiwciub.js +130 -0
- package/src/Config.d.ts +172 -0
- package/src/Config.js +2 -0
- package/src/Configuration-Dk2k3OIc.js +73 -0
- package/src/DataTransfer-BmECvPHB.js +488 -0
- package/src/Database-DSsNCGft.d.ts +3 -0
- package/src/Delivery.d.ts +28 -0
- package/src/Delivery.js +7 -0
- package/src/Document-CKXMSEf1.js +293 -0
- package/src/Document-TgwYKJZM.d.ts +220 -0
- package/src/DocumentRenderer-Wz2xaNyf.js +394 -0
- package/src/EditorSchema-wrDv-id6.js +296 -0
- package/src/Fields-BegSgYhj.d.ts +166 -0
- package/src/Fields-ioGaMEh9.js +130 -0
- package/src/Forms-BuKAXQxr.d.ts +203 -0
- package/src/Forms.d.ts +48 -11
- package/src/Forms.js +342 -7
- package/src/I18n-Ckf9h0rC.js +154 -0
- package/src/I18n.d.ts +45 -2
- package/src/I18n.js +2 -1
- package/src/Image-CJWPLnhP.js +110 -0
- package/src/Links-CJYyy7rC.js +28 -0
- package/src/Links-Dx1yOni8.d.ts +28 -0
- package/src/Locales-Ch7a5xuA.js +67 -0
- package/src/Locales-jwbmJaOp.d.ts +43 -0
- package/src/Locales.d.ts +3 -0
- package/src/Locales.js +3 -0
- package/src/Media-BQ0uL4w7.d.ts +15 -0
- package/src/Media-DSyvd14o.js +87 -0
- package/src/Module.d.ts +2 -10
- package/src/Module.js +1039 -162
- package/src/Operations.d.ts +57 -0
- package/src/Operations.js +263 -0
- package/src/People-DvNZauWw.js +69 -0
- package/src/PreviewFocus-C_EelZO5.js +104 -0
- package/src/Query-C0kGJF5_.d.ts +261 -0
- package/src/RevisionPreview-IVwbJ9Wy.js +133 -0
- package/src/Routes-BaZvm2LE.js +126 -0
- package/src/Routes-DM1rRp3r.d.ts +15 -0
- package/src/S3MediaObjects-y-WacEi9.js +193 -0
- package/src/Seo-BcpqxoAs.d.ts +57 -0
- package/src/Seo-CjNUtUkj.js +254 -0
- package/src/StudioApi-CXLwwocX.js +833 -0
- package/src/StudioErrors-T5zLGQ1M.js +117 -0
- package/src/StudioErrors-kq-E44lQ.d.ts +104 -0
- package/src/StudioServer.d.ts +20 -0
- package/src/StudioServer.js +34 -0
- package/src/answers-DcTg0Xv2.js +41 -0
- package/src/cli.js +681 -187
- package/src/contracts-rprW3ZOB.js +130 -0
- package/src/forms-3xuf0Ym7.d.ts +206 -0
- package/src/localeConfiguration-BPbkLi7-.js +32 -0
- package/src/localeContext-DhF3SPvM.js +59 -0
- package/src/locales-6OD4XGIZ.js +12 -0
- package/src/nuxtDelivery-BYX_Cddb.js +466 -0
- package/src/plugin-DTYuDaQu.js +7171 -0
- package/src/previewContext-dt3ZUh-w.js +4 -0
- package/src/previewRegions-CXjk5cbP.js +145 -0
- package/src/previewSource-fb-q3ESM.js +144 -0
- package/src/rendering-D9LVeEKX.js +47 -0
- package/src/rolldown-runtime-8H4AJuhK.js +14 -0
- package/src/runtime/CmsImage.js +38 -0
- package/src/runtime/DocumentPage.vue +10 -0
- package/src/runtime/DocumentPageContent.js +48 -0
- package/src/runtime/DocumentRenderer.d.ts +129 -0
- package/src/runtime/DocumentRenderer.js +2 -0
- package/src/runtime/api.js +48 -6
- package/src/runtime/delivery/useCmsDocument.js +2 -0
- package/src/runtime/delivery/useCmsDocumentQuery.js +2 -0
- package/src/runtime/delivery/useCmsDocumentSeo.js +2 -114
- package/src/runtime/delivery/useCmsLocale.js +10 -0
- package/src/runtime/plugin.js +2 -40
- package/src/runtime/preview.css +85 -0
- package/src/runtime/preview.js +277 -0
- package/src/runtime/previewSource.js +82 -0
- package/src/runtime/revisionPrivacy.js +13 -0
- package/src/runtime/studio.js +10 -0
- package/src/runtime/studioIcons.js +36 -0
- package/src/validation-3pggwcnm.js +396 -0
- package/src/validation-DpUwPC8Y.js +224 -0
- package/studio/THIRD-PARTY-LICENSES.md +2406 -0
- package/studio/chunks/AccountPage-DL3DitDM.js +288 -0
- package/studio/chunks/AccountPage-DL3DitDM.js.br +0 -0
- package/studio/chunks/AccountPage-DL3DitDM.js.gz +0 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js +584 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js.br +0 -0
- package/studio/chunks/ActivityPage-CLqVUqTh.js.gz +0 -0
- package/studio/chunks/Alert-D0D24z_a.js +335 -0
- package/studio/chunks/Alert-D0D24z_a.js.br +0 -0
- package/studio/chunks/Alert-D0D24z_a.js.gz +0 -0
- package/studio/chunks/Badge-BBFs88TI.js +346 -0
- package/studio/chunks/Badge-BBFs88TI.js.br +0 -0
- package/studio/chunks/Badge-BBFs88TI.js.gz +0 -0
- package/studio/chunks/Button-BT3ztSPx.js +14319 -0
- package/studio/chunks/Button-BT3ztSPx.js.br +0 -0
- package/studio/chunks/Button-BT3ztSPx.js.gz +0 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js +246 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js.br +0 -0
- package/studio/chunks/Collapsible-CKnEYIlp.js.gz +0 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js +1745 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js.br +0 -0
- package/studio/chunks/ContentInventory-D7nsFA6U.js.gz +0 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js +18 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js.br +0 -0
- package/studio/chunks/ContentPage-DCxt6BeD.js.gz +0 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js +2413 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js.br +0 -0
- package/studio/chunks/DashboardSearch-DjyMjJwF.js.gz +0 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js +26063 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.br +0 -0
- package/studio/chunks/DocumentLocaleMenu-0EkkOr6_.js.gz +0 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js +4400 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js.br +0 -0
- package/studio/chunks/DropdownMenu-CA9fB0uZ.js.gz +0 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js +7799 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js.br +0 -0
- package/studio/chunks/EditorPage-D_PAYEE4.js.gz +0 -0
- package/studio/chunks/FormField-CgM6l2Yn.js +198 -0
- package/studio/chunks/FormField-CgM6l2Yn.js.br +0 -0
- package/studio/chunks/FormField-CgM6l2Yn.js.gz +0 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js +552 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js.br +0 -0
- package/studio/chunks/HelpPage-C-vrFcT_.js.gz +0 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js +271 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js.br +0 -0
- package/studio/chunks/Kbd-Ot7TIhVZ.js.gz +0 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js +101 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.br +0 -0
- package/studio/chunks/MediaFolderDialog-DYu-eu-q.js.gz +0 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js +923 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js.br +0 -0
- package/studio/chunks/MediaPage-D-jaWtdl.js.gz +0 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js +837 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js.br +0 -0
- package/studio/chunks/MediaPicker-BZs2wUFz.js.gz +0 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js +1173 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.br +0 -0
- package/studio/chunks/MediaUploadPanel-C7Kyg6aR.js.gz +0 -0
- package/studio/chunks/Modal-D6hSvxHd.js +265 -0
- package/studio/chunks/Modal-D6hSvxHd.js.br +0 -0
- package/studio/chunks/Modal-D6hSvxHd.js.gz +0 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js +277 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.br +0 -0
- package/studio/chunks/NewDocumentDialog-C8B6_r3J.js.gz +0 -0
- package/studio/chunks/Pagination-D9BSo5H2.js +573 -0
- package/studio/chunks/Pagination-D9BSo5H2.js.br +0 -0
- package/studio/chunks/Pagination-D9BSo5H2.js.gz +0 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js +783 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js.br +0 -0
- package/studio/chunks/PeoplePage-CWIXitBD.js.gz +0 -0
- package/studio/chunks/Popover-B63bkTMS.js +128 -0
- package/studio/chunks/Popover-B63bkTMS.js.br +0 -0
- package/studio/chunks/Popover-B63bkTMS.js.gz +0 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js +255 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.br +0 -0
- package/studio/chunks/PublicationActionDialog-Cm_P0C3I.js.gz +0 -0
- package/studio/chunks/Routes-DLYHmulE.js +102 -0
- package/studio/chunks/Routes-DLYHmulE.js.br +0 -0
- package/studio/chunks/Routes-DLYHmulE.js.gz +0 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js +95 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js.br +0 -0
- package/studio/chunks/RovingFocusItem-QZNg-wWF.js.gz +0 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js +332 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js.br +0 -0
- package/studio/chunks/ScheduledPage-C0hqrkr5.js.gz +0 -0
- package/studio/chunks/Search-BEgCe9Aj.js +14646 -0
- package/studio/chunks/Search-BEgCe9Aj.js.br +0 -0
- package/studio/chunks/Search-BEgCe9Aj.js.gz +0 -0
- package/studio/chunks/Select-B50WZMW-.js +2145 -0
- package/studio/chunks/Select-B50WZMW-.js.br +0 -0
- package/studio/chunks/Select-B50WZMW-.js.gz +0 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js +2109 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js.br +0 -0
- package/studio/chunks/SelectMenu-DSweWGMz.js.gz +0 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js +846 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js.br +0 -0
- package/studio/chunks/SeoPage-CNNxGe4h.js.gz +0 -0
- package/studio/chunks/Skeleton-COz8dcrw.js +39 -0
- package/studio/chunks/Skeleton-COz8dcrw.js.br +2 -0
- package/studio/chunks/Skeleton-COz8dcrw.js.gz +0 -0
- package/studio/chunks/Slideover-QMMHAAys.js +289 -0
- package/studio/chunks/Slideover-QMMHAAys.js.br +0 -0
- package/studio/chunks/Slideover-QMMHAAys.js.gz +0 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js +80 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js.br +0 -0
- package/studio/chunks/StudioPage-ngEIDr5d.js.gz +0 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js +2524 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.br +0 -0
- package/studio/chunks/StudioPageToolbar-BwHnqyr6.js.gz +0 -0
- package/studio/chunks/Switch-qKl1aDn7.js +484 -0
- package/studio/chunks/Switch-qKl1aDn7.js.br +0 -0
- package/studio/chunks/Switch-qKl1aDn7.js.gz +0 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js +29 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js.br +0 -0
- package/studio/chunks/ToolPage-DxoVAJVk.js.gz +0 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js +693 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js.br +0 -0
- package/studio/chunks/Tooltip-Bu15m_DB.js.gz +0 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js +12 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js.br +0 -0
- package/studio/chunks/TrashPage-lhqLLdoG.js.gz +0 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js +2349 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js.br +0 -0
- package/studio/chunks/VersionsPage-Cqy6UAp9.js.gz +0 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js +113 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.br +0 -0
- package/studio/chunks/VisuallyHiddenInput-Cu8hQLRf.js.gz +0 -0
- package/studio/chunks/arrays-CUJkmV4I.js +10 -0
- package/studio/chunks/arrays-CUJkmV4I.js.br +0 -0
- package/studio/chunks/arrays-CUJkmV4I.js.gz +0 -0
- package/studio/chunks/base-DkTekJe8.js +213 -0
- package/studio/chunks/base-DkTekJe8.js.br +0 -0
- package/studio/chunks/base-DkTekJe8.js.gz +0 -0
- package/studio/chunks/content-DUGl3N4d.js +6012 -0
- package/studio/chunks/content-DUGl3N4d.js.br +0 -0
- package/studio/chunks/content-DUGl3N4d.js.gz +0 -0
- package/studio/chunks/destinations-DPIQVQa6.js +227 -0
- package/studio/chunks/destinations-DPIQVQa6.js.br +0 -0
- package/studio/chunks/destinations-DPIQVQa6.js.gz +0 -0
- package/studio/chunks/en-073cjKW4.js +152 -0
- package/studio/chunks/en-073cjKW4.js.br +0 -0
- package/studio/chunks/en-073cjKW4.js.gz +0 -0
- package/studio/chunks/en-Bn8mxPuf.js +134 -0
- package/studio/chunks/en-Bn8mxPuf.js.br +0 -0
- package/studio/chunks/en-Bn8mxPuf.js.gz +0 -0
- package/studio/chunks/en-C9OiaUDZ.js +251 -0
- package/studio/chunks/en-C9OiaUDZ.js.br +0 -0
- package/studio/chunks/en-C9OiaUDZ.js.gz +0 -0
- package/studio/chunks/en-CHAR6jzx.js +147 -0
- package/studio/chunks/en-CHAR6jzx.js.br +0 -0
- package/studio/chunks/en-CHAR6jzx.js.gz +0 -0
- package/studio/chunks/en-Cq4N1vEF.js +93 -0
- package/studio/chunks/en-Cq4N1vEF.js.br +2 -0
- package/studio/chunks/en-Cq4N1vEF.js.gz +0 -0
- package/studio/chunks/en-D2hRqlse.js +140 -0
- package/studio/chunks/en-D2hRqlse.js.br +0 -0
- package/studio/chunks/en-D2hRqlse.js.gz +0 -0
- package/studio/chunks/en-DiUC3-j6.js +144 -0
- package/studio/chunks/en-DiUC3-j6.js.br +0 -0
- package/studio/chunks/en-DiUC3-j6.js.gz +0 -0
- package/studio/chunks/english-Cs_Adu-u.js +8 -0
- package/studio/chunks/english-Cs_Adu-u.js.br +0 -0
- package/studio/chunks/english-Cs_Adu-u.js.gz +0 -0
- package/studio/chunks/esm-D6DqSiL1.js +752 -0
- package/studio/chunks/esm-D6DqSiL1.js.br +0 -0
- package/studio/chunks/esm-D6DqSiL1.js.gz +0 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js +23 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js.br +0 -0
- package/studio/chunks/externalRequest-CTzr2nDq.js.gz +0 -0
- package/studio/chunks/iconify-DR9ryCPv.js +1007 -0
- package/studio/chunks/iconify-DR9ryCPv.js.br +0 -0
- package/studio/chunks/iconify-DR9ryCPv.js.gz +0 -0
- package/studio/chunks/icons-D2MsAaXq.js +183 -0
- package/studio/chunks/icons-D2MsAaXq.js.br +0 -0
- package/studio/chunks/icons-D2MsAaXq.js.gz +0 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js +26 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js.br +0 -0
- package/studio/chunks/leaveGuards-D22fTGgr.js.gz +0 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js +238 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js.br +0 -0
- package/studio/chunks/lucideIcons-EyqyPBsX.js.gz +0 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js +17 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js.br +0 -0
- package/studio/chunks/mediaRoute--8cY8rUe.js.gz +0 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js +77 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js.br +0 -0
- package/studio/chunks/newDocumentPlanning-C26DHpvh.js.gz +0 -0
- package/studio/chunks/notifications-OKOLc40v.js +110 -0
- package/studio/chunks/notifications-OKOLc40v.js.br +0 -0
- package/studio/chunks/notifications-OKOLc40v.js.gz +0 -0
- package/studio/chunks/operations-CjNHyrEX.js +57 -0
- package/studio/chunks/operations-CjNHyrEX.js.br +0 -0
- package/studio/chunks/operations-CjNHyrEX.js.gz +0 -0
- package/studio/chunks/overlay-DnqFLZTc.js +1733 -0
- package/studio/chunks/overlay-DnqFLZTc.js.br +0 -0
- package/studio/chunks/overlay-DnqFLZTc.js.gz +0 -0
- package/studio/chunks/presentation-DF83w0hE.js +57 -0
- package/studio/chunks/presentation-DF83w0hE.js.br +0 -0
- package/studio/chunks/presentation-DF83w0hE.js.gz +0 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js +4557 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.br +0 -0
- package/studio/chunks/runtime-core.esm-bundler-DKFA9Rep.js.gz +0 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js +76 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js.br +0 -0
- package/studio/chunks/searchPresentation-DFwxQkt3.js.gz +0 -0
- package/studio/chunks/status-DQv6ihkU.js +38 -0
- package/studio/chunks/status-DQv6ihkU.js.br +0 -0
- package/studio/chunks/status-DQv6ihkU.js.gz +0 -0
- package/studio/chunks/studioContext-I8HozGU1.js +4953 -0
- package/studio/chunks/studioContext-I8HozGU1.js.br +0 -0
- package/studio/chunks/studioContext-I8HozGU1.js.gz +0 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js +73 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js.br +0 -0
- package/studio/chunks/studioQueries-BR-9NT5F.js.gz +0 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js +1095 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js.br +0 -0
- package/studio/chunks/studioSearch-ByaL-QpM.js.gz +0 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js +62 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.br +0 -0
- package/studio/chunks/useAcknowledgedDraft-0_c9sWI6.js.gz +0 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js +189 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.br +0 -0
- package/studio/chunks/useApi-CUWMwLLw-B3Q3g2nf.js.gz +0 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js +16 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js.br +3 -0
- package/studio/chunks/useDocumentMessage-BAWvc38w.js.gz +0 -0
- package/studio/chunks/useFilter-DzyiTR7f.js +87 -0
- package/studio/chunks/useFilter-DzyiTR7f.js.br +0 -0
- package/studio/chunks/useFilter-DzyiTR7f.js.gz +0 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js +8 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js.br +0 -0
- package/studio/chunks/useFormControl-CL7sSCUo.js.gz +0 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js +154 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js.br +0 -0
- package/studio/chunks/useGraceArea-Chcy25IQ.js.gz +0 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js +44 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.br +8 -0
- package/studio/chunks/useLeaveConfirmation-_iCSnKEp.js.gz +0 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js +35 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js.br +0 -0
- package/studio/chunks/useLinkCopy-CMjQteCy.js.gz +0 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js +16 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js.br +0 -0
- package/studio/chunks/usePointerMotion-DwRcwBNQ.js.gz +0 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js +298 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js.br +0 -0
- package/studio/chunks/useStudioNavigation-CLwtSYpb.js.gz +0 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js +79 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js.br +0 -0
- package/studio/chunks/useStudioPages-DR9qmYLg.js.gz +0 -0
- package/studio/chunks/utils-mdScC0v0.js +59 -0
- package/studio/chunks/utils-mdScC0v0.js.br +0 -0
- package/studio/chunks/utils-mdScC0v0.js.gz +0 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js +781 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js.br +0 -0
- package/studio/chunks/virtualizer-D1S0bZ4t.js.gz +0 -0
- package/studio/help/64f767fe29c2-save-and-publish.svg +7 -0
- package/studio/host.css +1 -1
- package/studio/host.css.br +0 -0
- package/studio/host.css.gz +0 -0
- package/studio/host.js +8757 -39178
- package/studio/host.js.br +0 -0
- package/studio/host.js.gz +0 -0
- package/CHANGELOG.md +0 -13
- package/bin/cms.mjs +0 -2
- package/src/ApplicationTypes.d.ts +0 -84
- package/src/ApplicationTypes.js +0 -1
- package/src/Configuration-Da5B2PVH.js +0 -1191
- package/src/Configuration-Da5B2PVH.js.map +0 -1
- package/src/Configuration.d.ts +0 -82
- package/src/Configuration.js +0 -8
- package/src/Configuration.js.map +0 -1
- package/src/Content.d.ts +0 -68
- package/src/Content.js +0 -373
- package/src/Content.js.map +0 -1
- package/src/ContentTransfer-BxwswWn3.js +0 -86
- package/src/ContentTransfer-BxwswWn3.js.map +0 -1
- package/src/ContentTransfer-Z9FHyLez.d.ts +0 -72
- package/src/DocumentEngine-hh_IGPXO.js +0 -978
- package/src/DocumentEngine-hh_IGPXO.js.map +0 -1
- package/src/DocumentModel.d.ts +0 -52
- package/src/DocumentModel.js +0 -66
- package/src/DocumentModel.js.map +0 -1
- package/src/Forms-CX-hwmJF.js +0 -391
- package/src/Forms-CX-hwmJF.js.map +0 -1
- package/src/Forms-CfNPTiCr.js +0 -110
- package/src/Forms-CfNPTiCr.js.map +0 -1
- package/src/Forms-R0HoTR-o.d.ts +0 -92
- package/src/Forms.js.map +0 -1
- package/src/HttpPaths-c9nLZ9H2.js +0 -21
- package/src/HttpPaths-c9nLZ9H2.js.map +0 -1
- package/src/I18n-zbqpWxki.d.ts +0 -29
- package/src/Media-j1bTritO.js +0 -112
- package/src/Media-j1bTritO.js.map +0 -1
- package/src/Module.js.map +0 -1
- package/src/References-CCPDAPve.js +0 -45
- package/src/References-CCPDAPve.js.map +0 -1
- package/src/S3MediaObjects-Dwhl2deX.js +0 -2742
- package/src/S3MediaObjects-Dwhl2deX.js.map +0 -1
- package/src/Seo-402YumpT.d.ts +0 -198
- package/src/cli/content.js +0 -101
- package/src/cli/content.js.map +0 -1
- package/src/cli.js.map +0 -1
- package/src/connection-BP80q4d-.js +0 -92
- package/src/connection-BP80q4d-.js.map +0 -1
- package/src/dev-lifecycle-CjDq63Ft.js +0 -535
- package/src/dev-lifecycle-CjDq63Ft.js.map +0 -1
- package/src/installation-DYNQQBD3.js +0 -9114
- package/src/installation-DYNQQBD3.js.map +0 -1
- package/src/internal/application-types.js +0 -43
- package/src/internal/application-types.js.map +0 -1
- package/src/internal/authoring-catalog.js +0 -158
- package/src/internal/authoring-catalog.js.map +0 -1
- package/src/internal/authoring-compiler.js +0 -146
- package/src/internal/authoring-compiler.js.map +0 -1
- package/src/internal/authoring-metadata.js +0 -191
- package/src/internal/authoring-metadata.js.map +0 -1
- package/src/internal/cms-config.js +0 -45
- package/src/internal/cms-config.js.map +0 -1
- package/src/internal/configuration.js +0 -228
- package/src/internal/configuration.js.map +0 -1
- package/src/internal/dev-lifecycle.js +0 -3
- package/src/internal/diagnostics.js +0 -47
- package/src/internal/diagnostics.js.map +0 -1
- package/src/internal/document-model.js +0 -376
- package/src/internal/document-model.js.map +0 -1
- package/src/internal/field-metadata.js +0 -7
- package/src/internal/field-metadata.js.map +0 -1
- package/src/internal/form-capabilities.js +0 -12
- package/src/internal/form-capabilities.js.map +0 -1
- package/src/internal/i18n.js +0 -73
- package/src/internal/i18n.js.map +0 -1
- package/src/internal/studio-app.js +0 -68
- package/src/internal/studio-app.js.map +0 -1
- package/src/location-CMNGO3lU.js +0 -35
- package/src/location-CMNGO3lU.js.map +0 -1
- package/src/metadata-DN9_K6Yl.js +0 -201
- package/src/metadata-DN9_K6Yl.js.map +0 -1
- package/src/models-5j67LMqW.js +0 -131
- package/src/models-5j67LMqW.js.map +0 -1
- package/src/models-VmGmG19-.js +0 -628
- package/src/models-VmGmG19-.js.map +0 -1
- package/src/runtime/api.js.map +0 -1
- package/src/runtime/blocks.js +0 -30
- package/src/runtime/blocks.js.map +0 -1
- package/src/runtime/collaboration.js +0 -45
- package/src/runtime/collaboration.js.map +0 -1
- package/src/runtime/delivery/DocumentField.js +0 -23
- package/src/runtime/delivery/DocumentField.js.map +0 -1
- package/src/runtime/delivery/DocumentRenderer.js +0 -61
- package/src/runtime/delivery/DocumentRenderer.js.map +0 -1
- package/src/runtime/delivery/DocumentScope.js +0 -41
- package/src/runtime/delivery/DocumentScope.js.map +0 -1
- package/src/runtime/delivery/blocks.js +0 -8
- package/src/runtime/delivery/blocks.js.map +0 -1
- package/src/runtime/delivery/context.js +0 -12
- package/src/runtime/delivery/context.js.map +0 -1
- package/src/runtime/delivery/document-page.js +0 -21
- package/src/runtime/delivery/document-page.js.map +0 -1
- package/src/runtime/delivery/document.js +0 -43
- package/src/runtime/delivery/document.js.map +0 -1
- package/src/runtime/delivery/error.js +0 -11
- package/src/runtime/delivery/error.js.map +0 -1
- package/src/runtime/delivery/plugin.js +0 -99
- package/src/runtime/delivery/plugin.js.map +0 -1
- package/src/runtime/delivery/preview.d.ts +0 -11
- package/src/runtime/delivery/preview.js +0 -6
- package/src/runtime/delivery/preview.js.map +0 -1
- package/src/runtime/delivery/types.d.ts +0 -2
- package/src/runtime/delivery/types.js +0 -1
- package/src/runtime/delivery/useCmsDocumentSeo.d.ts +0 -67
- package/src/runtime/delivery/useCmsDocumentSeo.js.map +0 -1
- package/src/runtime/delivery/useDocument.d.ts +0 -6
- package/src/runtime/delivery/useDocument.js +0 -23
- package/src/runtime/delivery/useDocument.js.map +0 -1
- package/src/runtime/delivery/useDocumentQuery.d.ts +0 -7
- package/src/runtime/delivery/useDocumentQuery.js +0 -29
- package/src/runtime/delivery/useDocumentQuery.js.map +0 -1
- package/src/runtime/forms/document.js +0 -38
- package/src/runtime/forms/document.js.map +0 -1
- package/src/runtime/forms/useCmsForm.js +0 -257
- package/src/runtime/forms/useCmsForm.js.map +0 -1
- package/src/runtime/i18n/translator.js +0 -51
- package/src/runtime/i18n/translator.js.map +0 -1
- package/src/runtime/i18n/useCmsI18n.d.ts +0 -13
- package/src/runtime/i18n/useCmsI18n.js +0 -38
- package/src/runtime/i18n/useCmsI18n.js.map +0 -1
- package/src/runtime/installation.js +0 -3
- package/src/runtime/plugin.js.map +0 -1
- package/src/runtime/preview/CmsStudioPreviewMarker.js +0 -29
- package/src/runtime/preview/CmsStudioPreviewMarker.js.map +0 -1
- package/src/runtime/preview/comark-document.js +0 -37
- package/src/runtime/preview/comark-document.js.map +0 -1
- package/src/runtime/preview/connection.js +0 -3
- package/src/runtime/preview/controller.js +0 -265
- package/src/runtime/preview/controller.js.map +0 -1
- package/src/runtime/preview/crypto.js +0 -16
- package/src/runtime/preview/crypto.js.map +0 -1
- package/src/runtime/preview/overlay.js +0 -122
- package/src/runtime/preview/overlay.js.map +0 -1
- package/src/runtime/preview/plugin.client.js +0 -68
- package/src/runtime/preview/plugin.client.js.map +0 -1
- package/src/runtime/preview/preview.css +0 -91
- package/src/runtime/preview/protocol.d.ts +0 -16
- package/src/runtime/preview/protocol.js +0 -23
- package/src/runtime/preview/protocol.js.map +0 -1
- package/src/runtime/preview/regions.js +0 -142
- package/src/runtime/preview/regions.js.map +0 -1
- package/src/runtime/preview/store.js +0 -4
- package/src/runtime/sitemap-entries.js +0 -17
- package/src/runtime/sitemap-entries.js.map +0 -1
- package/src/runtime/sitemap.js +0 -23
- package/src/runtime/sitemap.js.map +0 -1
- package/src/runtime/studio-app.js +0 -17
- package/src/runtime/studio-app.js.map +0 -1
- package/src/runtime/studio-document.js +0 -46
- package/src/runtime/studio-document.js.map +0 -1
- package/src/runtime/studio-entry.js +0 -19
- package/src/runtime/studio-entry.js.map +0 -1
- package/src/runtime/studio-navigation.js +0 -11
- package/src/runtime/studio-navigation.js.map +0 -1
- package/src/scalars-CA6kyipS.d.ts +0 -7
- package/src/scalars-CVZqT3L0.js +0 -22
- package/src/scalars-CVZqT3L0.js.map +0 -1
- package/src/store-X1e1o_MF.js +0 -209
- package/src/store-X1e1o_MF.js.map +0 -1
- package/src/types-DZ0IV-Ow.d.ts +0 -101
- package/studio/CreateDocumentDialog-BpjBYGfI.js +0 -335
- package/studio/SelectMenu-KiXwx4Y_.js +0 -34032
- package/studio/collaboration-DcK2F6v9.js +0 -4566
- package/studio/editor-P2rB7Csp.js +0 -30128
- package/studio/rolldown-runtime-Dy4uBu1J.js +0 -11
package/src/Seo-402YumpT.d.ts
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { Schema } from "effect";
|
|
2
|
-
//#region ../protocol/src/Seo.d.ts
|
|
3
|
-
declare const SiteIdentity: Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
|
|
4
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
5
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
6
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
7
|
-
readonly alt: Schema.NonEmptyString;
|
|
8
|
-
}>>;
|
|
9
|
-
readonly name: Schema.NonEmptyString;
|
|
10
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
11
|
-
readonly type: Schema.tag<"Person">;
|
|
12
|
-
}>, Schema.Struct<{
|
|
13
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
14
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
15
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
16
|
-
readonly alt: Schema.NonEmptyString;
|
|
17
|
-
}>>;
|
|
18
|
-
readonly name: Schema.NonEmptyString;
|
|
19
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
20
|
-
readonly type: Schema.tag<"Organization">;
|
|
21
|
-
}>, Schema.Struct<{
|
|
22
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
23
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
24
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
25
|
-
readonly alt: Schema.NonEmptyString;
|
|
26
|
-
}>>;
|
|
27
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
28
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
29
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
30
|
-
readonly alt: Schema.NonEmptyString;
|
|
31
|
-
}>>;
|
|
32
|
-
readonly telephone: Schema.optionalKey<Schema.NonEmptyString>;
|
|
33
|
-
readonly address: Schema.optionalKey<Schema.Struct<{
|
|
34
|
-
readonly streetAddress: Schema.optionalKey<Schema.NonEmptyString>;
|
|
35
|
-
readonly addressLocality: Schema.optionalKey<Schema.NonEmptyString>;
|
|
36
|
-
readonly addressRegion: Schema.optionalKey<Schema.NonEmptyString>;
|
|
37
|
-
readonly postalCode: Schema.optionalKey<Schema.NonEmptyString>;
|
|
38
|
-
readonly addressCountry: Schema.optionalKey<Schema.NonEmptyString>;
|
|
39
|
-
}>>;
|
|
40
|
-
readonly name: Schema.NonEmptyString;
|
|
41
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
42
|
-
readonly type: Schema.tag<"LocalBusiness">;
|
|
43
|
-
}>]>;
|
|
44
|
-
type SiteIdentity = typeof SiteIdentity.Type;
|
|
45
|
-
declare const DocumentSeo: Schema.Struct<{
|
|
46
|
-
readonly title: Schema.optionalKey<Schema.NonEmptyString>;
|
|
47
|
-
readonly description: Schema.optionalKey<Schema.NonEmptyString>;
|
|
48
|
-
readonly socialTitle: Schema.optionalKey<Schema.NonEmptyString>;
|
|
49
|
-
readonly socialDescription: Schema.optionalKey<Schema.NonEmptyString>;
|
|
50
|
-
readonly socialImage: Schema.optionalKey<Schema.Struct<{
|
|
51
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
52
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
53
|
-
readonly alt: Schema.NonEmptyString;
|
|
54
|
-
}>>;
|
|
55
|
-
readonly index: Schema.optionalKey<Schema.Boolean>;
|
|
56
|
-
readonly follow: Schema.optionalKey<Schema.Boolean>;
|
|
57
|
-
readonly canonicalUrl: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
58
|
-
readonly structuredData: Schema.optionalKey<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
|
|
59
|
-
readonly type: Schema.tag<"WebPage">;
|
|
60
|
-
}>, Schema.Struct<{
|
|
61
|
-
readonly type: Schema.tag<"Article">;
|
|
62
|
-
readonly headline: Schema.optionalKey<Schema.NonEmptyString>;
|
|
63
|
-
readonly datePublished: Schema.optionalKey<Schema.String>;
|
|
64
|
-
readonly dateModified: Schema.optionalKey<Schema.String>;
|
|
65
|
-
}>]>>;
|
|
66
|
-
}>;
|
|
67
|
-
interface DocumentSeo extends Schema.Schema.Type<typeof DocumentSeo> {}
|
|
68
|
-
declare const SeoConfiguration: Schema.Struct<{
|
|
69
|
-
readonly defaults: Schema.Struct<{
|
|
70
|
-
readonly siteName: Schema.NonEmptyString;
|
|
71
|
-
readonly defaultDescription: Schema.optionalKey<Schema.NonEmptyString>;
|
|
72
|
-
readonly canonicalOrigin: Schema.brand<Schema.NonEmptyString, "SeoCanonicalOrigin">;
|
|
73
|
-
readonly titleTemplate: Schema.optionalKey<Schema.NonEmptyString>;
|
|
74
|
-
readonly socialTitle: Schema.optionalKey<Schema.NonEmptyString>;
|
|
75
|
-
readonly socialDescription: Schema.optionalKey<Schema.NonEmptyString>;
|
|
76
|
-
readonly socialImage: Schema.optionalKey<Schema.Struct<{
|
|
77
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
78
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
79
|
-
readonly alt: Schema.NonEmptyString;
|
|
80
|
-
}>>;
|
|
81
|
-
readonly index: Schema.Boolean;
|
|
82
|
-
readonly follow: Schema.Boolean;
|
|
83
|
-
readonly identity: Schema.optionalKey<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
|
|
84
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
85
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
86
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
87
|
-
readonly alt: Schema.NonEmptyString;
|
|
88
|
-
}>>;
|
|
89
|
-
readonly name: Schema.NonEmptyString;
|
|
90
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
91
|
-
readonly type: Schema.tag<"Person">;
|
|
92
|
-
}>, Schema.Struct<{
|
|
93
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
94
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
95
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
96
|
-
readonly alt: Schema.NonEmptyString;
|
|
97
|
-
}>>;
|
|
98
|
-
readonly name: Schema.NonEmptyString;
|
|
99
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
100
|
-
readonly type: Schema.tag<"Organization">;
|
|
101
|
-
}>, Schema.Struct<{
|
|
102
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
103
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
104
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
105
|
-
readonly alt: Schema.NonEmptyString;
|
|
106
|
-
}>>;
|
|
107
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
108
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
109
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
110
|
-
readonly alt: Schema.NonEmptyString;
|
|
111
|
-
}>>;
|
|
112
|
-
readonly telephone: Schema.optionalKey<Schema.NonEmptyString>;
|
|
113
|
-
readonly address: Schema.optionalKey<Schema.Struct<{
|
|
114
|
-
readonly streetAddress: Schema.optionalKey<Schema.NonEmptyString>;
|
|
115
|
-
readonly addressLocality: Schema.optionalKey<Schema.NonEmptyString>;
|
|
116
|
-
readonly addressRegion: Schema.optionalKey<Schema.NonEmptyString>;
|
|
117
|
-
readonly postalCode: Schema.optionalKey<Schema.NonEmptyString>;
|
|
118
|
-
readonly addressCountry: Schema.optionalKey<Schema.NonEmptyString>;
|
|
119
|
-
}>>;
|
|
120
|
-
readonly name: Schema.NonEmptyString;
|
|
121
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
122
|
-
readonly type: Schema.tag<"LocalBusiness">;
|
|
123
|
-
}>]>>;
|
|
124
|
-
}>;
|
|
125
|
-
readonly capabilities: Schema.Struct<{
|
|
126
|
-
readonly structuredDataTypes: Schema.$Array<Schema.Literals<readonly ["WebPage", "Article"]>>;
|
|
127
|
-
readonly identityTypes: Schema.$Array<Schema.Literals<readonly ["Person", "Organization", "LocalBusiness"]>>;
|
|
128
|
-
readonly generatedSocialImageTemplateIds: Schema.$Array<Schema.NonEmptyString>;
|
|
129
|
-
}>;
|
|
130
|
-
}>;
|
|
131
|
-
interface SeoConfiguration extends Schema.Schema.Type<typeof SeoConfiguration> {}
|
|
132
|
-
declare const ResolvedSeo: Schema.Struct<{
|
|
133
|
-
readonly title: Schema.NonEmptyString;
|
|
134
|
-
readonly description: Schema.optionalKey<Schema.NonEmptyString>;
|
|
135
|
-
readonly socialTitle: Schema.NonEmptyString;
|
|
136
|
-
readonly socialDescription: Schema.optionalKey<Schema.NonEmptyString>;
|
|
137
|
-
readonly socialImage: Schema.optionalKey<Schema.Struct<{
|
|
138
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
139
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
140
|
-
readonly alt: Schema.NonEmptyString;
|
|
141
|
-
}>>;
|
|
142
|
-
readonly canonicalUrl: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
143
|
-
readonly index: Schema.Boolean;
|
|
144
|
-
readonly follow: Schema.Boolean;
|
|
145
|
-
readonly structuredData: Schema.optionalKey<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
|
|
146
|
-
readonly type: Schema.tag<"WebPage">;
|
|
147
|
-
}>, Schema.Struct<{
|
|
148
|
-
readonly type: Schema.tag<"Article">;
|
|
149
|
-
readonly headline: Schema.optionalKey<Schema.NonEmptyString>;
|
|
150
|
-
readonly datePublished: Schema.optionalKey<Schema.String>;
|
|
151
|
-
readonly dateModified: Schema.optionalKey<Schema.String>;
|
|
152
|
-
}>]>>;
|
|
153
|
-
readonly identity: Schema.optionalKey<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
|
|
154
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
155
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
156
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
157
|
-
readonly alt: Schema.NonEmptyString;
|
|
158
|
-
}>>;
|
|
159
|
-
readonly name: Schema.NonEmptyString;
|
|
160
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
161
|
-
readonly type: Schema.tag<"Person">;
|
|
162
|
-
}>, Schema.Struct<{
|
|
163
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
164
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
165
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
166
|
-
readonly alt: Schema.NonEmptyString;
|
|
167
|
-
}>>;
|
|
168
|
-
readonly name: Schema.NonEmptyString;
|
|
169
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
170
|
-
readonly type: Schema.tag<"Organization">;
|
|
171
|
-
}>, Schema.Struct<{
|
|
172
|
-
readonly logo: Schema.optionalKey<Schema.Struct<{
|
|
173
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
174
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
175
|
-
readonly alt: Schema.NonEmptyString;
|
|
176
|
-
}>>;
|
|
177
|
-
readonly image: Schema.optionalKey<Schema.Struct<{
|
|
178
|
-
readonly mediaId: Schema.brand<Schema.String, "MediaId">;
|
|
179
|
-
readonly url: Schema.brand<Schema.NonEmptyString, "SeoUrl">;
|
|
180
|
-
readonly alt: Schema.NonEmptyString;
|
|
181
|
-
}>>;
|
|
182
|
-
readonly telephone: Schema.optionalKey<Schema.NonEmptyString>;
|
|
183
|
-
readonly address: Schema.optionalKey<Schema.Struct<{
|
|
184
|
-
readonly streetAddress: Schema.optionalKey<Schema.NonEmptyString>;
|
|
185
|
-
readonly addressLocality: Schema.optionalKey<Schema.NonEmptyString>;
|
|
186
|
-
readonly addressRegion: Schema.optionalKey<Schema.NonEmptyString>;
|
|
187
|
-
readonly postalCode: Schema.optionalKey<Schema.NonEmptyString>;
|
|
188
|
-
readonly addressCountry: Schema.optionalKey<Schema.NonEmptyString>;
|
|
189
|
-
}>>;
|
|
190
|
-
readonly name: Schema.NonEmptyString;
|
|
191
|
-
readonly url: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "SeoUrl">>;
|
|
192
|
-
readonly type: Schema.tag<"LocalBusiness">;
|
|
193
|
-
}>]>>;
|
|
194
|
-
}>;
|
|
195
|
-
interface ResolvedSeo extends Schema.Schema.Type<typeof ResolvedSeo> {}
|
|
196
|
-
//#endregion
|
|
197
|
-
export { SiteIdentity as i, ResolvedSeo as n, SeoConfiguration as r, DocumentSeo as t };
|
|
198
|
-
//# sourceMappingURL=Seo-402YumpT.d.ts.map
|
package/src/cli/content.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { CmsContentError, createCmsContentClient, diffCmsContentSources, readCmsContentDirectory } from "../Content.js";
|
|
2
|
-
import { Config, Console, Effect, Option, Redacted } from "effect";
|
|
3
|
-
import { createTwoFilesPatch } from "diff";
|
|
4
|
-
import { CliError, Prompt } from "effect/unstable/cli";
|
|
5
|
-
|
|
6
|
-
//#region src/cli/content.ts
|
|
7
|
-
function userError(message) {
|
|
8
|
-
return new CliError.UserError({
|
|
9
|
-
cause: new Error(message),
|
|
10
|
-
userMessage: message
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
const client = Effect.fn("CmsCli.content.client")(function* (options) {
|
|
14
|
-
const baseUrl = options.url || (yield* Config.String("CMS_URL").pipe(Config.withDefault(""))) || (yield* Prompt.String({ message: "CMS URL" }));
|
|
15
|
-
const email = options.email || (yield* Config.String("CMS_EMAIL").pipe(Config.withDefault(""))) || (yield* Prompt.String({ message: "Administrator email" }));
|
|
16
|
-
if (!baseUrl || !email) return yield* userError("CMS URL and administrator email are required.");
|
|
17
|
-
const configured = yield* Config.Redacted("CMS_PASSWORD").pipe(Config.option);
|
|
18
|
-
const password = Option.isSome(configured) ? Redacted.value(configured.value) : Redacted.value(yield* Prompt.Password({ message: `Password for ${email} at ${baseUrl}` }));
|
|
19
|
-
return yield* attempt(() => createCmsContentClient({
|
|
20
|
-
baseUrl,
|
|
21
|
-
credentials: {
|
|
22
|
-
email,
|
|
23
|
-
password
|
|
24
|
-
}
|
|
25
|
-
}));
|
|
26
|
-
});
|
|
27
|
-
const readSources = Effect.fn("CmsCli.content.readSources")(function* (directory) {
|
|
28
|
-
return (yield* attempt(() => readCmsContentDirectory(directory))).sources;
|
|
29
|
-
});
|
|
30
|
-
const exportContent = Effect.fn("CmsCli.content.export")(function* (connection, directory) {
|
|
31
|
-
const content = yield* client(connection);
|
|
32
|
-
const source = yield* attempt(() => content.export({ directory }));
|
|
33
|
-
yield* Console.log(`Exported ${source.sources.length} documents to ${directory}`);
|
|
34
|
-
});
|
|
35
|
-
const preparePlan = Effect.fn("CmsCli.content.preparePlan")(function* (connection, directory, options) {
|
|
36
|
-
const source = yield* attempt(() => readCmsContentDirectory(directory));
|
|
37
|
-
const content = yield* client(connection);
|
|
38
|
-
const plan = yield* attempt(() => content.plan(source, options));
|
|
39
|
-
yield* printPlan(plan);
|
|
40
|
-
if (!plan.valid) return yield* userError("Content plan is not ready to apply.");
|
|
41
|
-
return {
|
|
42
|
-
content,
|
|
43
|
-
plan
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
const planContent = Effect.fn("CmsCli.content.planCommand")(function* (connection, directory, options) {
|
|
47
|
-
yield* preparePlan(connection, directory, options);
|
|
48
|
-
});
|
|
49
|
-
const applyContent = Effect.fn("CmsCli.content.apply")(function* (connection, directory, options) {
|
|
50
|
-
const { content, plan } = yield* preparePlan(connection, directory, options);
|
|
51
|
-
const result = yield* attempt(() => content.apply(plan));
|
|
52
|
-
yield* Console.log(`Applied: ${result.created} created, ${result.updated} updated, ${result.published} published, ${result.unchanged} unchanged.`);
|
|
53
|
-
});
|
|
54
|
-
const diffContent = Effect.fn("CmsCli.content.diff")(function* (connection, directory) {
|
|
55
|
-
const source = yield* attempt(() => readCmsContentDirectory(directory));
|
|
56
|
-
const content = yield* client(connection);
|
|
57
|
-
const comparison = describeContentDiffResult(yield* attempt(() => content.diff(source)));
|
|
58
|
-
for (const line of comparison.lines) yield* Console.log(line);
|
|
59
|
-
yield* Console.log(`${comparison.changed} local document${comparison.changed === 1 ? " differs" : "s differ"} from the CMS.`);
|
|
60
|
-
});
|
|
61
|
-
function describeContentDiff(local, remote) {
|
|
62
|
-
return describeContentDiffResult(diffCmsContentSources(local, remote));
|
|
63
|
-
}
|
|
64
|
-
function describeContentDiffResult(comparison) {
|
|
65
|
-
const lines = [];
|
|
66
|
-
for (const change of comparison.changes) {
|
|
67
|
-
if (change.markdownChanged && change.local) lines.push(createTwoFilesPatch(`remote/${change.filePath}`, `local/${change.filePath}`, change.target?.markdown ?? "", change.local.markdown).trimEnd());
|
|
68
|
-
if (change.publicationChanged && change.local && change.target) lines.push(`Publication ${change.filePath}: CMS ${change.target.published ? "published" : "draft"}, local ${change.local.published ? "published (use --publish to apply)" : "draft (use --publish to apply)"}`);
|
|
69
|
-
}
|
|
70
|
-
for (const source of comparison.targetOnly) lines.push(`Remote only: ${source.identity ? `${source.identity.collection}/${source.identity.documentId}` : "filePath" in source ? source.filePath : "document"}`);
|
|
71
|
-
return {
|
|
72
|
-
lines,
|
|
73
|
-
changed: comparison.changes.length
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function printPlan(value) {
|
|
77
|
-
return Effect.gen(function* () {
|
|
78
|
-
for (const [action, entries] of [
|
|
79
|
-
["create", value.creates],
|
|
80
|
-
["update", value.updates],
|
|
81
|
-
["publish", value.publications],
|
|
82
|
-
["unpublish", value.unpublications],
|
|
83
|
-
["unchanged", value.unchanged],
|
|
84
|
-
["conflict", value.conflicts]
|
|
85
|
-
]) for (const entry of entries) yield* Console.log(`${action.padEnd(9)} ${entry.filePath}`);
|
|
86
|
-
for (const issue of value.issues) yield* Console.error(`${issue.severity}: ${issue.documentId ?? ""} ${issue.message}`);
|
|
87
|
-
yield* Console.log(value.valid ? `Ready at generation ${value.generation}` : "Plan has conflicts or validation errors.");
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
function attempt(operation) {
|
|
91
|
-
return Effect.tryPromise({
|
|
92
|
-
try: () => Promise.resolve(operation()),
|
|
93
|
-
catch: (cause) => {
|
|
94
|
-
return userError(cause instanceof CmsContentError ? `${cause.code}: ${cause.message}` : String(cause));
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
//#endregion
|
|
100
|
-
export { applyContent, describeContentDiff, diffContent, exportContent, planContent, readSources };
|
|
101
|
-
//# sourceMappingURL=content.js.map
|
package/src/cli/content.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","names":[],"sources":["../../../../src/cli/content.ts"],"sourcesContent":["import type { ContentSource } from '@internal/protocol/ContentTransfer'\nimport { CmsContentError, createCmsContentClient, diffCmsContentSources, readCmsContentDirectory } from '../Content'\nimport type { CmsContentDiff, CmsContentPlan } from '../Content'\nimport { Config, Console, Effect, Option, Redacted } from 'effect'\nimport { CliError, Prompt } from 'effect/unstable/cli'\nimport { createTwoFilesPatch } from 'diff'\n\nexport interface ConnectionOptions {\n readonly url: string\n readonly email: string\n}\n\nexport interface ImportOptions {\n readonly overwrite: boolean\n readonly publish: boolean\n}\n\nfunction userError(message: string) {\n return new CliError.UserError({ cause: new Error(message), userMessage: message })\n}\n\nconst client = Effect.fn('CmsCli.content.client')(function* (options: ConnectionOptions) {\n const baseUrl =\n options.url ||\n (yield* Config.String('CMS_URL').pipe(Config.withDefault(''))) ||\n (yield* Prompt.String({ message: 'CMS URL' }))\n\n const email =\n options.email ||\n (yield* Config.String('CMS_EMAIL').pipe(Config.withDefault(''))) ||\n (yield* Prompt.String({ message: 'Administrator email' }))\n\n if (!baseUrl || !email) return yield* userError('CMS URL and administrator email are required.')\n const configured = yield* Config.Redacted('CMS_PASSWORD').pipe(Config.option)\n\n const password = Option.isSome(configured)\n ? Redacted.value(configured.value)\n : Redacted.value(yield* Prompt.Password({ message: `Password for ${email} at ${baseUrl}` }))\n\n return yield* attempt(() => createCmsContentClient({ baseUrl, credentials: { email, password } }))\n})\n\nexport const readSources = Effect.fn('CmsCli.content.readSources')(function* (directory: string) {\n return (yield* attempt(() => readCmsContentDirectory(directory))).sources\n})\n\nexport const exportContent = Effect.fn('CmsCli.content.export')(function* (\n connection: ConnectionOptions,\n directory: string,\n) {\n const content = yield* client(connection)\n const source = yield* attempt(() => content.export({ directory }))\n yield* Console.log(`Exported ${source.sources.length} documents to ${directory}`)\n})\n\nconst preparePlan = Effect.fn('CmsCli.content.preparePlan')(function* (\n connection: ConnectionOptions,\n directory: string,\n options: ImportOptions,\n) {\n const source = yield* attempt(() => readCmsContentDirectory(directory))\n const content = yield* client(connection)\n const plan = yield* attempt(() => content.plan(source, options))\n yield* printPlan(plan)\n\n if (!plan.valid) return yield* userError('Content plan is not ready to apply.')\n\n return { content, plan }\n})\n\nexport const planContent = Effect.fn('CmsCli.content.planCommand')(function* (\n connection: ConnectionOptions,\n directory: string,\n options: ImportOptions,\n) {\n yield* preparePlan(connection, directory, options)\n})\n\nexport const applyContent = Effect.fn('CmsCli.content.apply')(function* (\n connection: ConnectionOptions,\n directory: string,\n options: ImportOptions,\n) {\n const { content, plan } = yield* preparePlan(connection, directory, options)\n const result = yield* attempt(() => content.apply(plan))\n yield* Console.log(\n `Applied: ${result.created} created, ${result.updated} updated, ${result.published} published, ${result.unchanged} unchanged.`,\n )\n})\n\nexport const diffContent = Effect.fn('CmsCli.content.diff')(function* (\n connection: ConnectionOptions,\n directory: string,\n) {\n const source = yield* attempt(() => readCmsContentDirectory(directory))\n const content = yield* client(connection)\n const comparison = describeContentDiffResult(yield* attempt(() => content.diff(source)))\n\n for (const line of comparison.lines) yield* Console.log(line)\n\n yield* Console.log(\n `${comparison.changed} local document${comparison.changed === 1 ? ' differs' : 's differ'} from the CMS.`,\n )\n})\n\nexport function describeContentDiff(local: ReadonlyArray<ContentSource>, remote: ReadonlyArray<ContentSource>) {\n return describeContentDiffResult(diffCmsContentSources(local, remote))\n}\n\nfunction describeContentDiffResult(comparison: CmsContentDiff) {\n const lines: string[] = []\n\n for (const change of comparison.changes) {\n if (change.markdownChanged && change.local) {\n lines.push(\n createTwoFilesPatch(\n `remote/${change.filePath}`,\n `local/${change.filePath}`,\n change.target?.markdown ?? '',\n change.local.markdown,\n ).trimEnd(),\n )\n }\n\n if (change.publicationChanged && change.local && change.target)\n lines.push(\n `Publication ${change.filePath}: CMS ${change.target.published ? 'published' : 'draft'}, local ${change.local.published ? 'published (use --publish to apply)' : 'draft (use --publish to apply)'}`,\n )\n }\n\n for (const source of comparison.targetOnly)\n lines.push(\n `Remote only: ${source.identity ? `${source.identity.collection}/${source.identity.documentId}` : 'filePath' in source ? source.filePath : 'document'}`,\n )\n\n return { lines, changed: comparison.changes.length }\n}\n\nfunction printPlan(value: CmsContentPlan) {\n return Effect.gen(function* () {\n for (const [action, entries] of [\n ['create', value.creates],\n ['update', value.updates],\n ['publish', value.publications],\n ['unpublish', value.unpublications],\n ['unchanged', value.unchanged],\n ['conflict', value.conflicts],\n ] as const)\n for (const entry of entries) yield* Console.log(`${action.padEnd(9)} ${entry.filePath}`)\n\n for (const issue of value.issues)\n yield* Console.error(`${issue.severity}: ${issue.documentId ?? ''} ${issue.message}`)\n\n yield* Console.log(\n value.valid ? `Ready at generation ${value.generation}` : 'Plan has conflicts or validation errors.',\n )\n })\n}\n\nfunction attempt<Value>(operation: () => Value | PromiseLike<Value>) {\n return Effect.tryPromise({\n try: () => Promise.resolve(operation()),\n catch: (cause) => {\n const message = cause instanceof CmsContentError ? `${cause.code}: ${cause.message}` : String(cause)\n\n return userError(message)\n },\n })\n}\n"],"mappings":"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"}
|
package/src/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["packageManifest.version"],"sources":["../../../package.json","../../../src/cli.ts"],"sourcesContent":["","import {\n NodeChildProcessSpawner,\n NodeCrypto,\n NodeFileSystem,\n NodePath,\n NodeRuntime,\n NodeStdio,\n NodeTerminal,\n} from '@effect/platform-node-shared'\nimport { Config, Console, Effect, Layer, Match, Option, Redacted, Runtime, Schema } from 'effect'\nimport { Argument, CliError, Command, Flag, Prompt } from 'effect/unstable/cli'\nimport { FetchHttpClient } from 'effect/unstable/http'\nimport packageManifest from '../package.json' with { type: 'json' }\nimport { applyContent, diffContent, exportContent, planContent } from './cli/content'\nimport {\n bootstrapCmsDevelopment,\n checkCmsConfiguration,\n doctorCmsDevelopment,\n loadCmsProjectEnvironment,\n resetCmsDevelopment,\n} from './internal/dev-lifecycle'\nimport { diagnosticFromCause, renderDiagnostic } from './internal/diagnostics'\nimport { renderConfigurationReport } from '@internal/server/ConfigurationChanges'\n\nconst rootDirectory = Flag.String('root').pipe(Flag.withDefault('.'))\n\nconst envFile = Flag.String('env-file').pipe(Flag.withDefault(''))\n\nconst verbose = Flag.Boolean('verbose').pipe(Flag.withDefault(false))\n\nconst json = Flag.Boolean('json').pipe(Flag.withDefault(false))\n\nconst root = Command.make('cms').pipe(\n Command.withSharedFlags({\n url: Flag.String('url').pipe(Flag.withDefault('')),\n email: Flag.String('email').pipe(Flag.withDefault('')),\n rootDirectory,\n envFile,\n verbose,\n json,\n }),\n)\n\nconst directory = Argument.String('directory')\n\nconst overwrite = Flag.Boolean('overwrite').pipe(Flag.withDefault(false))\n\nconst publish = Flag.Boolean('publish').pipe(Flag.withDefault(false))\n\nconst exportCommand = Command.make('export', { directory }, ({ directory }) =>\n Effect.gen(function* () {\n const { url, email } = yield* root\n\n return yield* exportContent({ url, email }, directory)\n }),\n).pipe(Command.withDescription('Export authored Markdown from a CMS installation'))\n\nconst diffCommand = Command.make('diff', { directory }, ({ directory }) =>\n Effect.gen(function* () {\n const { url, email } = yield* root\n\n return yield* diffContent({ url, email }, directory)\n }),\n).pipe(Command.withDescription('Compare local Markdown with the current CMS content'))\n\nconst planCommand = Command.make('plan', { directory, overwrite, publish }, ({ directory, overwrite, publish }) =>\n Effect.gen(function* () {\n const { url, email } = yield* root\n\n return yield* planContent({ url, email }, directory, { overwrite, publish })\n }),\n).pipe(Command.withDescription('Preview content changes without writing to the CMS'))\n\nconst applyCommand = Command.make('apply', { directory, overwrite, publish }, ({ directory, overwrite, publish }) =>\n Effect.gen(function* () {\n const { url, email } = yield* root\n\n return yield* applyContent({ url, email }, directory, { overwrite, publish })\n }),\n).pipe(Command.withDescription('Apply a validated content plan to the CMS'))\n\nconst content = Command.make('content').pipe(\n Command.withSubcommands([exportCommand, diffCommand, planCommand, applyCommand]),\n)\n\nconst configurationCheckCommand = Command.make('check', {}, () =>\n Effect.gen(function* () {\n const options = yield* root\n\n const report = yield* attempt('configuration.check', options, () =>\n checkCmsConfiguration(options.rootDirectory, options.envFile || undefined, options.verbose),\n )\n\n if (options.json) {\n // oxlint-disable-next-line effecttsgo/prefer-schema-over-json -- The report schema is the stable machine-readable CLI contract.\n yield* Console.log(JSON.stringify(report))\n } else yield* Console.log(renderConfigurationReport(report))\n\n if (!report.compatible)\n return yield* options.json\n ? new JsonCommandFailed({})\n : cliError('The candidate CMS configuration is incompatible with stored content.')\n }),\n).pipe(Command.withDescription('Compare the candidate configuration with the accepted catalog and stored content'))\n\nconst configuration = Command.make('configuration').pipe(Command.withSubcommands([configurationCheckCommand]))\n\nconst full = Flag.Boolean('full').pipe(Flag.withDefault(false))\n\nconst contentDirectory = Flag.String('content').pipe(Flag.withDefault(''))\n\nconst administratorName = Flag.String('name').pipe(Flag.withDefault(''))\n\nconst database = Flag.Boolean('database').pipe(Flag.withDefault(false))\n\nconst media = Flag.Boolean('media').pipe(Flag.withDefault(false))\n\nconst bootstrap = Flag.Boolean('bootstrap').pipe(Flag.withDefault(false))\n\nconst yes = Flag.Boolean('yes').pipe(Flag.withDefault(false))\n\nconst doctorCommand = Command.make('doctor', { full }, ({ full }) =>\n Effect.gen(function* () {\n const options = yield* root\n\n const report = yield* attempt('doctor.configuration', options, () =>\n doctorCmsDevelopment(options.rootDirectory, full, options.envFile || undefined),\n )\n\n if (options.json) {\n // oxlint-disable-next-line effecttsgo/prefer-schema-over-json -- This flag intentionally emits the report's exact JSON representation.\n yield* Console.log(JSON.stringify(report))\n } else\n for (const check of report.checks) {\n const icon = Match.value(check.status).pipe(\n Match.when('pass', () => '✓'),\n Match.when('fail', () => '✗'),\n Match.when('not-verified', () => '−'),\n Match.exhaustive,\n )\n\n yield* Console.log(`${icon} ${check.label}${check.detail ? `\\n\\n ${check.detail}` : ''}`)\n }\n\n if (!report.ok)\n return yield* options.json ? new JsonCommandFailed({}) : cliError('One or more CMS development checks failed.')\n }),\n).pipe(Command.withDescription('Check local CMS configuration and infrastructure'))\n\nconst bootstrapCommand = Command.make(\n 'bootstrap',\n { contentDirectory, administratorName, publish },\n ({ contentDirectory, administratorName, publish }) =>\n Effect.gen(function* () {\n const options = yield* root\n yield* attempt('bootstrap.environment', options, () =>\n loadCmsProjectEnvironment(options.rootDirectory, options.envFile || undefined),\n )\n\n const administrator = yield* administratorOptions(\n administratorName,\n contentDirectory,\n publish,\n options,\n 'bootstrap.credentials',\n )\n\n const result = yield* attempt('bootstrap.installation', options, () =>\n bootstrapCmsDevelopment({\n rootDir: options.rootDirectory,\n envFile: options.envFile || undefined,\n verbose: options.verbose,\n ...administrator,\n }),\n )\n\n if (options.json) {\n // oxlint-disable-next-line effecttsgo/prefer-schema-over-json -- This flag intentionally emits the report's exact JSON representation.\n yield* Console.log(JSON.stringify(result))\n } else\n yield* Console.log(\n `Bootstrap complete: administrator ${result.administrator}${result.contentApplied ? ', content applied' : ''}.`,\n )\n }),\n).pipe(Command.withDescription('Provision and initialize a local CMS installation'))\n\nconst resetCommand = Command.make(\n 'reset',\n { bootstrap, contentDirectory, database, media, publish, yes },\n ({ bootstrap, contentDirectory, database, media, publish, yes }) =>\n Effect.gen(function* () {\n const options = yield* root\n\n if (!database && !media)\n return yield* commandFailure('reset.arguments', options, new Error('Choose --database, --media, or both.'))\n\n if (bootstrap && yes)\n yield* attempt('reset.environment', options, () =>\n loadCmsProjectEnvironment(options.rootDirectory, options.envFile || undefined),\n )\n\n const administrator =\n bootstrap && yes\n ? yield* administratorOptions('', contentDirectory, publish, options, 'reset.credentials')\n : undefined\n\n const result = yield* attempt('reset.installation', options, () =>\n resetCmsDevelopment({\n rootDir: options.rootDirectory,\n envFile: options.envFile || undefined,\n database,\n media,\n yes,\n verbose: options.verbose,\n bootstrap: administrator,\n }),\n )\n\n if (options.json) {\n // oxlint-disable-next-line effecttsgo/prefer-schema-over-json -- This flag intentionally emits the report's exact JSON representation.\n return yield* Console.log(JSON.stringify(result))\n }\n\n for (const target of result.targets)\n yield* Console.log(`${result.executed ? '✓ Reset' : 'Would reset'} ${target}`)\n\n if (!result.executed) yield* Console.log('Dry run only. Add --yes to execute these exact targets.')\n }),\n).pipe(Command.withDescription('Reset CMS-owned local data with a dry-run default'))\n\nconst dev = Command.make('dev').pipe(Command.withSubcommands([doctorCommand, bootstrapCommand, resetCommand]))\n\nconst administratorOptions = Effect.fn('CmsCli.dev.administratorOptions')(function* (\n name: string,\n content: string,\n publishContent: boolean,\n options: { readonly json: boolean; readonly verbose: boolean },\n phase: string,\n) {\n const email = yield* Config.String('CMS_EMAIL').pipe(Config.withDefault(''))\n const configuredPassword = yield* Config.Redacted('CMS_PASSWORD').pipe(Config.option)\n\n if (!email) return yield* commandFailure(phase, options, new Error('CMS_EMAIL is required.'))\n\n if (Option.isNone(configuredPassword) && options.json)\n return yield* commandFailure(phase, options, new Error('CMS_PASSWORD is required.'))\n\n const password = Option.isSome(configuredPassword)\n ? Redacted.value(configuredPassword.value)\n : Redacted.value(yield* Prompt.Password({ message: `Password for ${email}` }))\n\n if (!password) return yield* commandFailure(phase, options, new Error('CMS_PASSWORD is required.'))\n\n return {\n content: content || undefined,\n email,\n name: name || (yield* Config.String('CMS_NAME').pipe(Config.withDefault('Administrator'))),\n password,\n publish: publishContent,\n }\n})\n\nfunction cliError(message: string) {\n return new CliError.UserError({ cause: new Error(message), userMessage: message })\n}\n\nclass CliOperationFailed extends Schema.TaggedError<CliOperationFailed>()('CliOperationFailed', {\n cause: Schema.Defect(),\n}) {}\n\nclass JsonCommandFailed extends Schema.TaggedError<JsonCommandFailed>()('JsonCommandFailed', {}) {\n override readonly [Runtime.errorExitCode] = 1\n override [Runtime.errorReported] = false\n}\n\nfunction attempt<Value>(\n phase: string,\n options: { readonly json: boolean; readonly verbose: boolean },\n operation: () => Value | PromiseLike<Value>,\n) {\n return Effect.tryPromise({\n try: () => Promise.resolve(operation()),\n catch: (cause) => new CliOperationFailed({ cause }),\n }).pipe(Effect.catch((failure) => commandFailure(phase, options, failure.cause)))\n}\n\nfunction commandFailure(phase: string, options: { readonly json: boolean; readonly verbose: boolean }, cause: unknown) {\n return Effect.gen(function* () {\n const diagnostic = diagnosticFromCause(phase, cause)\n\n if (!options.json) return yield* cliError(renderDiagnostic(diagnostic, options.verbose))\n\n const { details: _details, ...output } = diagnostic\n\n // oxlint-disable-next-line effecttsgo/prefer-schema-over-json -- CLI JSON is an intentionally stable plain object.\n yield* Console.log(JSON.stringify(output))\n\n return yield* new JsonCommandFailed({})\n })\n}\n\nroot.pipe(\n Command.withSubcommands([configuration, content, dev]),\n Command.run({ version: packageManifest.version }),\n Effect.provide(\n Layer.mergeAll(\n NodeFileSystem.layer,\n NodePath.layer,\n NodeCrypto.layer,\n NodeTerminal.layer,\n NodeStdio.layer,\n NodeChildProcessSpawner.layer.pipe(Layer.provide(Layer.merge(NodeFileSystem.layer, NodePath.layer))),\n FetchHttpClient.layer,\n ),\n ),\n NodeRuntime.runMain,\n)\n"],"mappings":"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"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { n as DocumentPreviewMessage, o as isDocumentPreviewMessage, t as DOCUMENT_PREVIEW_CHANNEL } from "./models-5j67LMqW.js";
|
|
2
|
-
import { Effect, Exit, Result, Schedule, Schema, Scope } from "effect";
|
|
3
|
-
|
|
4
|
-
//#region ../protocol/src/internal/preview/bridge.ts
|
|
5
|
-
function makePreviewSiteBridge(options) {
|
|
6
|
-
return Effect.acquireRelease(Effect.sync(() => createPreviewSiteBridge(options)), (bridge) => Effect.sync(() => bridge.close())).pipe(Effect.map(({ close: _close, ...bridge }) => bridge));
|
|
7
|
-
}
|
|
8
|
-
function createPreviewSiteBridge(options) {
|
|
9
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
10
|
-
let active = false;
|
|
11
|
-
let closed = false;
|
|
12
|
-
const post = (payload) => {
|
|
13
|
-
if (!active || closed) return false;
|
|
14
|
-
options.parent.postMessage(envelope(options.sessionId, payload), options.parentOrigin);
|
|
15
|
-
return true;
|
|
16
|
-
};
|
|
17
|
-
const receive = (event) => {
|
|
18
|
-
if (closed) return;
|
|
19
|
-
const message = receivePreviewMessage(event, options.parent, options.parentOrigin, options.sessionId);
|
|
20
|
-
if (!message || !isStudioPreviewMessage(message)) return;
|
|
21
|
-
if (message.type === "studio:connect") {
|
|
22
|
-
active = true;
|
|
23
|
-
post(options.route);
|
|
24
|
-
}
|
|
25
|
-
for (const listener of listeners) listener(message);
|
|
26
|
-
};
|
|
27
|
-
const close = () => {
|
|
28
|
-
if (closed) return;
|
|
29
|
-
closed = true;
|
|
30
|
-
active = false;
|
|
31
|
-
options.view.removeEventListener("message", receive);
|
|
32
|
-
listeners.clear();
|
|
33
|
-
};
|
|
34
|
-
options.view.addEventListener("message", receive);
|
|
35
|
-
return {
|
|
36
|
-
close,
|
|
37
|
-
send: post,
|
|
38
|
-
subscribe: (listener) => {
|
|
39
|
-
listeners.add(listener);
|
|
40
|
-
return () => listeners.delete(listener);
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function envelope(sessionId, payload) {
|
|
45
|
-
return Result.getOrThrow(Schema.decodeResult(Schema.toType(DocumentPreviewMessage))({
|
|
46
|
-
channel: DOCUMENT_PREVIEW_CHANNEL,
|
|
47
|
-
sessionId,
|
|
48
|
-
...payload
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
function receivePreviewMessage(event, source, origin, sessionId) {
|
|
52
|
-
if (event.origin !== origin || event.source !== source || !isDocumentPreviewMessage(event.data)) return void 0;
|
|
53
|
-
return event.data.sessionId === sessionId ? event.data : void 0;
|
|
54
|
-
}
|
|
55
|
-
function isStudioPreviewMessage(message) {
|
|
56
|
-
return message.type.startsWith("studio:");
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
//#endregion
|
|
60
|
-
//#region src/runtime/preview/connection.ts
|
|
61
|
-
async function openSitePreviewConnection(options) {
|
|
62
|
-
const scope = await Effect.runPromise(Scope.make());
|
|
63
|
-
try {
|
|
64
|
-
const bridge = await Effect.runPromise(makePreviewSiteBridge({
|
|
65
|
-
parent: window.parent,
|
|
66
|
-
parentOrigin: options.editorOrigin,
|
|
67
|
-
route: {
|
|
68
|
-
path: options.route,
|
|
69
|
-
type: "preview:ready"
|
|
70
|
-
},
|
|
71
|
-
sessionId: options.sessionId,
|
|
72
|
-
view: window
|
|
73
|
-
}).pipe(Effect.provideService(Scope.Scope, scope)));
|
|
74
|
-
let closed = false;
|
|
75
|
-
return {
|
|
76
|
-
async close() {
|
|
77
|
-
if (closed) return;
|
|
78
|
-
closed = true;
|
|
79
|
-
await Effect.runPromise(Scope.close(scope, Exit.void));
|
|
80
|
-
},
|
|
81
|
-
send: bridge.send,
|
|
82
|
-
subscribe: bridge.subscribe
|
|
83
|
-
};
|
|
84
|
-
} catch (cause) {
|
|
85
|
-
await Effect.runPromise(Scope.close(scope, Exit.fail(cause)));
|
|
86
|
-
throw cause;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
//#endregion
|
|
91
|
-
export { openSitePreviewConnection as t };
|
|
92
|
-
//# sourceMappingURL=connection-BP80q4d-.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection-BP80q4d-.js","names":["DocumentPreviewMessageSchema"],"sources":["../../../../protocol/src/internal/preview/bridge.ts","../../../src/runtime/preview/connection.ts"],"sourcesContent":["import type {\n DocumentPreviewMessage,\n PreviewOrigin,\n PreviewSessionId,\n PreviewSitePayload,\n StudioPreviewPayload,\n} from './models'\nimport type { Scope } from 'effect'\nimport { Effect, Result, Schedule, Schema } from 'effect'\nimport {\n DOCUMENT_PREVIEW_CHANNEL,\n DocumentPreviewMessage as DocumentPreviewMessageSchema,\n isDocumentPreviewMessage,\n} from './models'\n\nexport interface PreviewMessageEvent {\n readonly data: unknown\n readonly origin: string\n readonly source: object | null\n}\n\nexport interface PreviewMessageSource {\n readonly addEventListener: (type: 'message', listener: (event: PreviewMessageEvent) => void) => void\n readonly removeEventListener: (type: 'message', listener: (event: PreviewMessageEvent) => void) => void\n}\n\nexport interface PreviewMessageTarget {\n readonly postMessage: (message: DocumentPreviewMessage, targetOrigin: string) => void\n}\n\nexport type PreviewBridgeState = 'closed' | 'connecting' | 'ready'\n\nexport interface PreviewHostBridge {\n readonly reconnect: () => void\n readonly send: (payload: Exclude<StudioPreviewPayload, { readonly type: 'studio:connect' }>) => boolean\n readonly state: () => PreviewBridgeState\n readonly subscribe: (listener: (message: PreviewSitePayload) => void) => () => void\n}\n\nexport interface PreviewSiteBridge {\n readonly send: (payload: Exclude<PreviewSitePayload, { readonly type: 'preview:ready' }>) => boolean\n readonly subscribe: (listener: (message: StudioPreviewPayload) => void) => () => void\n}\n\nexport interface PreviewHostBridgeOptions {\n readonly handshakeIntervalMs?: number\n readonly sessionId: PreviewSessionId\n readonly target: () => PreviewMessageTarget | undefined\n readonly targetOrigin: PreviewOrigin\n readonly view: PreviewMessageSource\n}\n\nexport interface PreviewSiteBridgeOptions {\n readonly parent: PreviewMessageTarget\n readonly parentOrigin: PreviewOrigin\n readonly route: PreviewSitePayload & { readonly type: 'preview:ready' }\n readonly sessionId: PreviewSessionId\n readonly view: PreviewMessageSource\n}\n\nexport function makePreviewHostBridge(\n options: PreviewHostBridgeOptions,\n): Effect.Effect<PreviewHostBridge, never, Scope.Scope> {\n return Effect.acquireRelease(\n Effect.context<never>().pipe(\n Effect.map((context) => createPreviewHostBridge(options, Effect.runForkWith(context))),\n ),\n (bridge) => Effect.sync(() => bridge.close()),\n ).pipe(Effect.map(({ close: _close, ...bridge }) => bridge))\n}\n\nexport function makePreviewSiteBridge(\n options: PreviewSiteBridgeOptions,\n): Effect.Effect<PreviewSiteBridge, never, Scope.Scope> {\n return Effect.acquireRelease(\n Effect.sync(() => createPreviewSiteBridge(options)),\n (bridge) => Effect.sync(() => bridge.close()),\n ).pipe(Effect.map(({ close: _close, ...bridge }) => bridge))\n}\n\nfunction createPreviewHostBridge(options: PreviewHostBridgeOptions, runFork: typeof Effect.runFork) {\n const listeners = new Set<(message: PreviewSitePayload) => void>()\n let retry: ReturnType<typeof Effect.runFork> | undefined\n let state: PreviewBridgeState = 'connecting'\n\n const stopRetry = (): void => {\n if (retry === undefined) return\n retry.interruptUnsafe()\n retry = undefined\n }\n\n const post = (payload: StudioPreviewPayload): boolean => {\n const target = options.target()\n\n if (!target) return false\n target.postMessage(envelope(options.sessionId, payload), options.targetOrigin)\n\n return true\n }\n\n const connect = (): void => {\n post({ type: 'studio:connect' })\n }\n\n const reconnect = (): void => {\n if (state === 'closed') return\n state = 'connecting'\n stopRetry()\n const interval = options.handshakeIntervalMs ?? 250\n retry = runFork(Effect.sync(connect).pipe(Effect.repeat(Schedule.spaced(interval)), Effect.delay(interval)))\n connect()\n }\n\n const receive = (event: PreviewMessageEvent): void => {\n const target = options.target()\n\n if (!target) return\n const message = receivePreviewMessage(event, target, options.targetOrigin, options.sessionId)\n\n if (!message || !isPreviewSiteMessage(message)) return\n\n if (message.type === 'preview:ready') {\n state = 'ready'\n stopRetry()\n }\n\n for (const listener of listeners) listener(message)\n }\n\n const close = (): void => {\n if (state === 'closed') return\n state = 'closed'\n stopRetry()\n options.view.removeEventListener('message', receive)\n listeners.clear()\n }\n\n options.view.addEventListener('message', receive)\n reconnect()\n\n return {\n close,\n reconnect,\n send: (payload: Exclude<StudioPreviewPayload, { readonly type: 'studio:connect' }>) =>\n state === 'ready' && post(payload),\n state: () => state,\n subscribe: (listener: (message: PreviewSitePayload) => void) => {\n listeners.add(listener)\n\n return () => listeners.delete(listener)\n },\n }\n}\n\nfunction createPreviewSiteBridge(options: PreviewSiteBridgeOptions) {\n const listeners = new Set<(message: StudioPreviewPayload) => void>()\n let active = false\n let closed = false\n\n const post = (payload: PreviewSitePayload): boolean => {\n if (!active || closed) return false\n options.parent.postMessage(envelope(options.sessionId, payload), options.parentOrigin)\n\n return true\n }\n\n const receive = (event: PreviewMessageEvent): void => {\n if (closed) return\n const message = receivePreviewMessage(event, options.parent, options.parentOrigin, options.sessionId)\n\n if (!message || !isStudioPreviewMessage(message)) return\n\n if (message.type === 'studio:connect') {\n active = true\n post(options.route)\n }\n\n for (const listener of listeners) listener(message)\n }\n\n const close = (): void => {\n if (closed) return\n closed = true\n active = false\n options.view.removeEventListener('message', receive)\n listeners.clear()\n }\n\n options.view.addEventListener('message', receive)\n\n return {\n close,\n send: post,\n subscribe: (listener: (message: StudioPreviewPayload) => void) => {\n listeners.add(listener)\n\n return () => listeners.delete(listener)\n },\n }\n}\n\nfunction envelope(\n sessionId: PreviewSessionId,\n payload: PreviewSitePayload | StudioPreviewPayload,\n): DocumentPreviewMessage {\n return Result.getOrThrow(\n Schema.decodeResult(Schema.toType(DocumentPreviewMessageSchema))({\n channel: DOCUMENT_PREVIEW_CHANNEL,\n sessionId,\n ...payload,\n }),\n )\n}\n\nfunction receivePreviewMessage(\n event: PreviewMessageEvent,\n source: PreviewMessageTarget,\n origin: PreviewOrigin,\n sessionId: PreviewSessionId,\n): DocumentPreviewMessage | undefined {\n if (event.origin !== origin || event.source !== source || !isDocumentPreviewMessage(event.data)) return undefined\n\n return event.data.sessionId === sessionId ? event.data : undefined\n}\n\nfunction isPreviewSiteMessage(\n message: DocumentPreviewMessage,\n): message is Extract<DocumentPreviewMessage, { readonly type: `preview:${string}` }> {\n return message.type.startsWith('preview:')\n}\n\nfunction isStudioPreviewMessage(\n message: DocumentPreviewMessage,\n): message is Extract<DocumentPreviewMessage, { readonly type: `studio:${string}` }> {\n return message.type.startsWith('studio:')\n}\n","import type { PublicPath } from '@internal/protocol/Documents'\nimport type { PreviewOrigin, PreviewSessionId, PreviewSiteBridge } from '@internal/protocol/Preview'\nimport { makePreviewSiteBridge } from '@internal/protocol/Preview'\nimport { Effect, Exit, Scope } from 'effect'\n\nexport interface SitePreviewConnection extends PreviewSiteBridge {\n readonly close: () => Promise<void>\n}\n\n// oxlint-disable-next-line effecttsgo/async-function -- This browser adapter exposes the Effect-managed preview bridge through a Promise API consumed by Nuxt.\nexport async function openSitePreviewConnection(options: {\n readonly editorOrigin: PreviewOrigin\n readonly route: PublicPath\n readonly sessionId: PreviewSessionId\n}): Promise<SitePreviewConnection> {\n const scope = await Effect.runPromise(Scope.make())\n\n try {\n const bridge = await Effect.runPromise(\n makePreviewSiteBridge({\n parent: window.parent,\n parentOrigin: options.editorOrigin,\n route: { path: options.route, type: 'preview:ready' },\n sessionId: options.sessionId,\n view: window,\n }).pipe(Effect.provideService(Scope.Scope, scope)),\n )\n\n let closed = false\n\n return {\n // oxlint-disable-next-line effecttsgo/async-function -- Closing adapts Effect scope finalization to the connection's Promise contract.\n async close() {\n if (closed) return\n closed = true\n await Effect.runPromise(Scope.close(scope, Exit.void))\n },\n send: bridge.send,\n subscribe: bridge.subscribe,\n }\n } catch (cause) {\n await Effect.runPromise(Scope.close(scope, Exit.fail(cause)))\n throw cause\n }\n}\n"],"mappings":";;;;AAuEA,SAAgB,sBACd,SACsD;CACtD,OAAO,OAAO,eACZ,OAAO,WAAW,wBAAwB,OAAO,CAAC,IACjD,WAAW,OAAO,WAAW,OAAO,MAAM,CAAC,CAC9C,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,QAAQ,GAAG,aAAa,MAAM,CAAC;AAC7D;AA4EA,SAAS,wBAAwB,SAAmC;CAClE,MAAM,4BAAY,IAAI,IAA6C;CACnE,IAAI,SAAS;CACb,IAAI,SAAS;CAEb,MAAM,QAAQ,YAAyC;EACrD,IAAI,CAAC,UAAU,QAAQ,OAAO;EAC9B,QAAQ,OAAO,YAAY,SAAS,QAAQ,WAAW,OAAO,GAAG,QAAQ,YAAY;EAErF,OAAO;CACT;CAEA,MAAM,WAAW,UAAqC;EACpD,IAAI,QAAQ;EACZ,MAAM,UAAU,sBAAsB,OAAO,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,SAAS;EAEpG,IAAI,CAAC,WAAW,CAAC,uBAAuB,OAAO,GAAG;EAElD,IAAI,QAAQ,SAAS,kBAAkB;GACrC,SAAS;GACT,KAAK,QAAQ,KAAK;EACpB;EAEA,KAAK,MAAM,YAAY,WAAW,SAAS,OAAO;CACpD;CAEA,MAAM,cAAoB;EACxB,IAAI,QAAQ;EACZ,SAAS;EACT,SAAS;EACT,QAAQ,KAAK,oBAAoB,WAAW,OAAO;EACnD,UAAU,MAAM;CAClB;CAEA,QAAQ,KAAK,iBAAiB,WAAW,OAAO;CAEhD,OAAO;EACL;EACA,MAAM;EACN,YAAY,aAAsD;GAChE,UAAU,IAAI,QAAQ;GAEtB,aAAa,UAAU,OAAO,QAAQ;EACxC;CACF;AACF;AAEA,SAAS,SACP,WACA,SACwB;CACxB,OAAO,OAAO,WACZ,OAAO,aAAa,OAAO,OAAOA,sBAA4B,CAAC,CAAC,CAAC;EAC/D,SAAS;EACT;EACA,GAAG;CACL,CAAC,CACH;AACF;AAEA,SAAS,sBACP,OACA,QACA,QACA,WACoC;CACpC,IAAI,MAAM,WAAW,UAAU,MAAM,WAAW,UAAU,CAAC,yBAAyB,MAAM,IAAI,GAAG,OAAO;CAExG,OAAO,MAAM,KAAK,cAAc,YAAY,MAAM,OAAO;AAC3D;AAQA,SAAS,uBACP,SACmF;CACnF,OAAO,QAAQ,KAAK,WAAW,SAAS;AAC1C;;;;ACjOA,eAAsB,0BAA0B,SAIb;CACjC,MAAM,QAAQ,MAAM,OAAO,WAAW,MAAM,KAAK,CAAC;CAElD,IAAI;EACF,MAAM,SAAS,MAAM,OAAO,WAC1B,sBAAsB;GACpB,QAAQ,OAAO;GACf,cAAc,QAAQ;GACtB,OAAO;IAAE,MAAM,QAAQ;IAAO,MAAM;GAAgB;GACpD,WAAW,QAAQ;GACnB,MAAM;EACR,CAAC,CAAC,CAAC,KAAK,OAAO,eAAe,MAAM,OAAO,KAAK,CAAC,CACnD;EAEA,IAAI,SAAS;EAEb,OAAO;GAEL,MAAM,QAAQ;IACZ,IAAI,QAAQ;IACZ,SAAS;IACT,MAAM,OAAO,WAAW,MAAM,MAAM,OAAO,KAAK,IAAI,CAAC;GACvD;GACA,MAAM,OAAO;GACb,WAAW,OAAO;EACpB;CACF,SAAS,OAAO;EACd,MAAM,OAAO,WAAW,MAAM,MAAM,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC;EAC5D,MAAM;CACR;AACF"}
|