@velastack/cms 0.1.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 +21 -0
- package/README.md +644 -0
- package/dist/cms.d.ts +6 -0
- package/dist/cms.js +30 -0
- package/dist/components/admin-bar/admin-bar-internal.svelte +1697 -0
- package/dist/components/admin-bar/admin-bar-internal.svelte.d.ts +12 -0
- package/dist/components/admin-bar/admin-bar.css +5 -0
- package/dist/components/admin-bar/admin-bar.svelte +355 -0
- package/dist/components/admin-bar/admin-bar.svelte.d.ts +7 -0
- package/dist/components/admin-bar/click-outside.d.ts +8 -0
- package/dist/components/admin-bar/click-outside.js +17 -0
- package/dist/components/admin-bar/css-root.svelte +23 -0
- package/dist/components/admin-bar/css-root.svelte.d.ts +19 -0
- package/dist/components/admin-bar/delete-page-dialog.svelte +326 -0
- package/dist/components/admin-bar/delete-page-dialog.svelte.d.ts +32 -0
- package/dist/components/admin-bar/history-panel.svelte +264 -0
- package/dist/components/admin-bar/history-panel.svelte.d.ts +8 -0
- package/dist/components/admin-bar/icons/bold.svelte +13 -0
- package/dist/components/admin-bar/icons/bold.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/check.svelte +11 -0
- package/dist/components/admin-bar/icons/check.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/chevron-down.svelte +11 -0
- package/dist/components/admin-bar/icons/chevron-down.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/chevron-right.svelte +11 -0
- package/dist/components/admin-bar/icons/chevron-right.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/chevron-up.svelte +11 -0
- package/dist/components/admin-bar/icons/chevron-up.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/code.svelte +14 -0
- package/dist/components/admin-bar/icons/code.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/external-link.svelte +15 -0
- package/dist/components/admin-bar/icons/external-link.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/file.svelte +19 -0
- package/dist/components/admin-bar/icons/file.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/heading-2.svelte +16 -0
- package/dist/components/admin-bar/icons/heading-2.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/heading-3.svelte +17 -0
- package/dist/components/admin-bar/icons/heading-3.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/icon.svelte +41 -0
- package/dist/components/admin-bar/icons/icon.svelte.d.ts +21 -0
- package/dist/components/admin-bar/icons/images.svelte +16 -0
- package/dist/components/admin-bar/icons/images.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/italic.svelte +15 -0
- package/dist/components/admin-bar/icons/italic.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/link-2-off.svelte +16 -0
- package/dist/components/admin-bar/icons/link-2-off.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/link.svelte +14 -0
- package/dist/components/admin-bar/icons/link.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/list-ordered.svelte +18 -0
- package/dist/components/admin-bar/icons/list-ordered.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/list.svelte +18 -0
- package/dist/components/admin-bar/icons/list.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/loader-circle.svelte +11 -0
- package/dist/components/admin-bar/icons/loader-circle.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/minus.svelte +11 -0
- package/dist/components/admin-bar/icons/minus.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/quote.svelte +24 -0
- package/dist/components/admin-bar/icons/quote.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/search.svelte +14 -0
- package/dist/components/admin-bar/icons/search.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/trash-2.svelte +17 -0
- package/dist/components/admin-bar/icons/trash-2.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/triangle-alert.svelte +15 -0
- package/dist/components/admin-bar/icons/triangle-alert.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/types.d.ts +7 -0
- package/dist/components/admin-bar/icons/types.js +1 -0
- package/dist/components/admin-bar/icons/undo-2.svelte +14 -0
- package/dist/components/admin-bar/icons/undo-2.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/upload.svelte +15 -0
- package/dist/components/admin-bar/icons/upload.svelte.d.ts +3 -0
- package/dist/components/admin-bar/icons/x.svelte +14 -0
- package/dist/components/admin-bar/icons/x.svelte.d.ts +3 -0
- package/dist/components/admin-bar/keyboard-shortcuts-dialog.svelte +96 -0
- package/dist/components/admin-bar/keyboard-shortcuts-dialog.svelte.d.ts +7 -0
- package/dist/components/admin-bar/locales-panel.svelte +137 -0
- package/dist/components/admin-bar/locales-panel.svelte.d.ts +9 -0
- package/dist/components/admin-bar/media-panel.svelte +282 -0
- package/dist/components/admin-bar/media-panel.svelte.d.ts +7 -0
- package/dist/components/admin-bar/new-page-chooser-dialog.svelte +56 -0
- package/dist/components/admin-bar/new-page-chooser-dialog.svelte.d.ts +10 -0
- package/dist/components/admin-bar/new-page-dialog.svelte +126 -0
- package/dist/components/admin-bar/new-page-dialog.svelte.d.ts +14 -0
- package/dist/components/admin-bar/page-config.d.ts +61 -0
- package/dist/components/admin-bar/page-config.js +24 -0
- package/dist/components/admin-bar/pages-panel.svelte +639 -0
- package/dist/components/admin-bar/pages-panel.svelte.d.ts +13 -0
- package/dist/components/admin-bar/panel-footer.svelte +21 -0
- package/dist/components/admin-bar/panel-footer.svelte.d.ts +8 -0
- package/dist/components/admin-bar/panel-header.svelte +29 -0
- package/dist/components/admin-bar/panel-header.svelte.d.ts +10 -0
- package/dist/components/admin-bar/panel.svelte +41 -0
- package/dist/components/admin-bar/panel.svelte.d.ts +10 -0
- package/dist/components/admin-bar/publish-dialog.svelte +387 -0
- package/dist/components/admin-bar/publish-dialog.svelte.d.ts +16 -0
- package/dist/components/admin-bar/resolve-route.d.ts +20 -0
- package/dist/components/admin-bar/resolve-route.js +50 -0
- package/dist/components/admin-bar/seo-panel.svelte +387 -0
- package/dist/components/admin-bar/seo-panel.svelte.d.ts +7 -0
- package/dist/components/admin-bar/share-preview-link-dialog.svelte +97 -0
- package/dist/components/admin-bar/share-preview-link-dialog.svelte.d.ts +9 -0
- package/dist/components/admin-bar/site-settings-panel.svelte +225 -0
- package/dist/components/admin-bar/site-settings-panel.svelte.d.ts +7 -0
- package/dist/components/admin-bar/status-pill.svelte +49 -0
- package/dist/components/admin-bar/status-pill.svelte.d.ts +11 -0
- package/dist/components/admin-bar/theme.svelte.d.ts +16 -0
- package/dist/components/admin-bar/theme.svelte.js +39 -0
- package/dist/components/admin-bar/ui/badge/badge.svelte +57 -0
- package/dist/components/admin-bar/ui/badge/badge.svelte.d.ts +16 -0
- package/dist/components/admin-bar/ui/badge/index.d.ts +4 -0
- package/dist/components/admin-bar/ui/badge/index.js +4 -0
- package/dist/components/admin-bar/ui/button/button.svelte +73 -0
- package/dist/components/admin-bar/ui/button/button.svelte.d.ts +16 -0
- package/dist/components/admin-bar/ui/button/index.d.ts +4 -0
- package/dist/components/admin-bar/ui/button/index.js +4 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible-content.svelte +7 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible-content.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible-trigger.svelte +7 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible-trigger.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible.svelte +7 -0
- package/dist/components/admin-bar/ui/collapsible/collapsible.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/collapsible/index.d.ts +4 -0
- package/dist/components/admin-bar/ui/collapsible/index.js +6 -0
- package/dist/components/admin-bar/ui/dialog/dialog-close.svelte +7 -0
- package/dist/components/admin-bar/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/dialog/dialog-content.svelte +46 -0
- package/dist/components/admin-bar/ui/dialog/dialog-content.svelte.d.ts +11 -0
- package/dist/components/admin-bar/ui/dialog/dialog-description.svelte +17 -0
- package/dist/components/admin-bar/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/dialog/dialog-footer.svelte +23 -0
- package/dist/components/admin-bar/ui/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/admin-bar/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/admin-bar/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/dialog/dialog-portal.svelte +7 -0
- package/dist/components/admin-bar/ui/dialog/dialog-portal.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/admin-bar/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/dialog/dialog-trigger.svelte +7 -0
- package/dist/components/admin-bar/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/dialog/dialog.svelte +7 -0
- package/dist/components/admin-bar/ui/dialog/dialog.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/dialog/index.d.ts +11 -0
- package/dist/components/admin-bar/ui/dialog/index.js +13 -0
- package/dist/components/admin-bar/ui/input/index.d.ts +3 -0
- package/dist/components/admin-bar/ui/input/index.js +3 -0
- package/dist/components/admin-bar/ui/input/input.svelte +24 -0
- package/dist/components/admin-bar/ui/input/input.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/kbd/index.d.ts +4 -0
- package/dist/components/admin-bar/ui/kbd/index.js +6 -0
- package/dist/components/admin-bar/ui/kbd/kbd-group.svelte +20 -0
- package/dist/components/admin-bar/ui/kbd/kbd-group.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/kbd/kbd-shortcut.svelte +52 -0
- package/dist/components/admin-bar/ui/kbd/kbd-shortcut.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/kbd/kbd.svelte +27 -0
- package/dist/components/admin-bar/ui/kbd/kbd.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/label/index.d.ts +3 -0
- package/dist/components/admin-bar/ui/label/index.js +3 -0
- package/dist/components/admin-bar/ui/label/label.svelte +20 -0
- package/dist/components/admin-bar/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/index.d.ts +18 -0
- package/dist/components/admin-bar/ui/menubar/index.js +20 -0
- package/dist/components/admin-bar/ui/menubar/menubar-checkbox-item.svelte +46 -0
- package/dist/components/admin-bar/ui/menubar/menubar-checkbox-item.svelte.d.ts +10 -0
- package/dist/components/admin-bar/ui/menubar/menubar-content.svelte +28 -0
- package/dist/components/admin-bar/ui/menubar/menubar-content.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar-group-heading.svelte +25 -0
- package/dist/components/admin-bar/ui/menubar/menubar-group-heading.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/menubar/menubar-group.svelte +12 -0
- package/dist/components/admin-bar/ui/menubar/menubar-group.svelte.d.ts +7 -0
- package/dist/components/admin-bar/ui/menubar/menubar-item.svelte +27 -0
- package/dist/components/admin-bar/ui/menubar/menubar-item.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/menubar/menubar-label.svelte +25 -0
- package/dist/components/admin-bar/ui/menubar/menubar-label.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/menubar/menubar-menu.svelte +7 -0
- package/dist/components/admin-bar/ui/menubar/menubar-menu.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/menubar/menubar-portal.svelte +7 -0
- package/dist/components/admin-bar/ui/menubar/menubar-portal.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/menubar/menubar-radio-group.svelte +11 -0
- package/dist/components/admin-bar/ui/menubar/menubar-radio-group.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar-radio-item.svelte +37 -0
- package/dist/components/admin-bar/ui/menubar/menubar-radio-item.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/menubar/menubar-separator.svelte +17 -0
- package/dist/components/admin-bar/ui/menubar/menubar-separator.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar-shortcut.svelte +23 -0
- package/dist/components/admin-bar/ui/menubar/menubar-shortcut.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub-content.svelte +20 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub-content.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub-trigger.svelte +29 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub-trigger.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub.svelte +7 -0
- package/dist/components/admin-bar/ui/menubar/menubar-sub.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar-trigger.svelte +20 -0
- package/dist/components/admin-bar/ui/menubar/menubar-trigger.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/menubar/menubar.svelte +20 -0
- package/dist/components/admin-bar/ui/menubar/menubar.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/select/index.d.ts +12 -0
- package/dist/components/admin-bar/ui/select/index.js +14 -0
- package/dist/components/admin-bar/ui/select/select-content.svelte +45 -0
- package/dist/components/admin-bar/ui/select/select-content.svelte.d.ts +11 -0
- package/dist/components/admin-bar/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/admin-bar/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/admin-bar/ui/select/select-group.svelte +17 -0
- package/dist/components/admin-bar/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/select/select-item.svelte +40 -0
- package/dist/components/admin-bar/ui/select/select-item.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/select/select-label.svelte +20 -0
- package/dist/components/admin-bar/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/admin-bar/ui/select/select-portal.svelte +7 -0
- package/dist/components/admin-bar/ui/select/select-portal.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/select/select-scroll-down-button.svelte +23 -0
- package/dist/components/admin-bar/ui/select/select-scroll-down-button.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/select/select-scroll-up-button.svelte +23 -0
- package/dist/components/admin-bar/ui/select/select-scroll-up-button.svelte.d.ts +5 -0
- package/dist/components/admin-bar/ui/select/select-separator.svelte +21 -0
- package/dist/components/admin-bar/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/select/select-trigger.svelte +31 -0
- package/dist/components/admin-bar/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/admin-bar/ui/select/select.svelte +11 -0
- package/dist/components/admin-bar/ui/select/select.svelte.d.ts +3 -0
- package/dist/components/admin-bar/ui/separator/index.d.ts +2 -0
- package/dist/components/admin-bar/ui/separator/index.js +4 -0
- package/dist/components/admin-bar/ui/separator/separator.svelte +21 -0
- package/dist/components/admin-bar/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/admin-bar/ui/textarea/index.d.ts +3 -0
- package/dist/components/admin-bar/ui/textarea/index.js +3 -0
- package/dist/components/admin-bar/ui/textarea/textarea.svelte +21 -0
- package/dist/components/admin-bar/ui/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/admin-bar/user-avatar.svelte +29 -0
- package/dist/components/admin-bar/user-avatar.svelte.d.ts +7 -0
- package/dist/components/admin-bar/utils.d.ts +10 -0
- package/dist/components/admin-bar/utils.js +46 -0
- package/dist/components/admin-bar/variants.d.ts +20 -0
- package/dist/components/admin-bar/variants.js +14 -0
- package/dist/components/cms/cms-boolean.svelte +102 -0
- package/dist/components/cms/cms-boolean.svelte.d.ts +10 -0
- package/dist/components/cms/cms-date-time-editable.svelte +66 -0
- package/dist/components/cms/cms-date-time-editable.svelte.d.ts +11 -0
- package/dist/components/cms/cms-date-time.svelte +67 -0
- package/dist/components/cms/cms-date-time.svelte.d.ts +19 -0
- package/dist/components/cms/cms-entries.svelte +24 -0
- package/dist/components/cms/cms-entries.svelte.d.ts +31 -0
- package/dist/components/cms/cms-image-editable.svelte +439 -0
- package/dist/components/cms/cms-image-editable.svelte.d.ts +11 -0
- package/dist/components/cms/cms-image.svelte +78 -0
- package/dist/components/cms/cms-image.svelte.d.ts +18 -0
- package/dist/components/cms/cms-link-editable.svelte +429 -0
- package/dist/components/cms/cms-link-editable.svelte.d.ts +13 -0
- package/dist/components/cms/cms-link.svelte +92 -0
- package/dist/components/cms/cms-link.svelte.d.ts +25 -0
- package/dist/components/cms/cms-markdown-editable.svelte +74 -0
- package/dist/components/cms/cms-markdown-editable.svelte.d.ts +9 -0
- package/dist/components/cms/cms-markdown.svelte +56 -0
- package/dist/components/cms/cms-markdown.svelte.d.ts +10 -0
- package/dist/components/cms/cms-media-picker.svelte +150 -0
- package/dist/components/cms/cms-media-picker.svelte.d.ts +8 -0
- package/dist/components/cms/cms-number-editable.svelte +77 -0
- package/dist/components/cms/cms-number-editable.svelte.d.ts +13 -0
- package/dist/components/cms/cms-number.svelte +63 -0
- package/dist/components/cms/cms-number.svelte.d.ts +16 -0
- package/dist/components/cms/cms-repeater-editable.svelte +137 -0
- package/dist/components/cms/cms-repeater-editable.svelte.d.ts +31 -0
- package/dist/components/cms/cms-repeater.svelte +55 -0
- package/dist/components/cms/cms-repeater.svelte.d.ts +30 -0
- package/dist/components/cms/cms-rich-text-editable.svelte +101 -0
- package/dist/components/cms/cms-rich-text-editable.svelte.d.ts +9 -0
- package/dist/components/cms/cms-rich-text-toolbar.svelte +246 -0
- package/dist/components/cms/cms-rich-text-toolbar.svelte.d.ts +9 -0
- package/dist/components/cms/cms-rich-text.svelte +74 -0
- package/dist/components/cms/cms-rich-text.svelte.d.ts +10 -0
- package/dist/components/cms/cms-store.svelte.d.ts +294 -0
- package/dist/components/cms/cms-store.svelte.js +625 -0
- package/dist/components/cms/cms-text.svelte +131 -0
- package/dist/components/cms/cms-text.svelte.d.ts +11 -0
- package/dist/components/cms/index.d.ts +13 -0
- package/dist/components/cms/index.js +11 -0
- package/dist/components/cms/install-scope.svelte.d.ts +7 -0
- package/dist/components/cms/install-scope.svelte.js +33 -0
- package/dist/components/cms/locale-merge.d.ts +41 -0
- package/dist/components/cms/locale-merge.js +77 -0
- package/dist/components/cms/overlay-sync.d.ts +82 -0
- package/dist/components/cms/overlay-sync.js +76 -0
- package/dist/components/cms/path.d.ts +30 -0
- package/dist/components/cms/path.js +156 -0
- package/dist/components/cms/scope.d.ts +120 -0
- package/dist/components/cms/scope.js +23 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +28 -0
- package/dist/srv/README.md +341 -0
- package/dist/srv/api-adapter.d.ts +20 -0
- package/dist/srv/api-adapter.js +178 -0
- package/dist/srv/cms.d.ts +62 -0
- package/dist/srv/cms.js +35 -0
- package/dist/srv/index.d.ts +5 -0
- package/dist/srv/index.js +4 -0
- package/dist/srv/load-cms.d.ts +105 -0
- package/dist/srv/load-cms.js +227 -0
- package/dist/srv/mock-adapter.d.ts +96 -0
- package/dist/srv/mock-adapter.js +171 -0
- package/dist/srv/types.d.ts +114 -0
- package/dist/srv/types.js +1 -0
- package/package.json +116 -0
- package/plugin/README.md +137 -0
- package/plugin/dist/adapter.d.ts +35 -0
- package/plugin/dist/adapter.js +346 -0
- package/plugin/dist/adapter.js.map +1 -0
- package/plugin/dist/build-state.d.ts +10 -0
- package/plugin/dist/build-state.js +26 -0
- package/plugin/dist/build-state.js.map +1 -0
- package/plugin/dist/fallback-shim.js +194 -0
- package/plugin/dist/index.d.ts +56 -0
- package/plugin/dist/index.js +396 -0
- package/plugin/dist/index.js.map +1 -0
- package/plugin/dist/manifest.d.ts +76 -0
- package/plugin/dist/manifest.js +367 -0
- package/plugin/dist/manifest.js.map +1 -0
- package/plugin/dist/media.d.ts +36 -0
- package/plugin/dist/media.js +153 -0
- package/plugin/dist/media.js.map +1 -0
- package/plugin/dist/parse-svelte.d.ts +35 -0
- package/plugin/dist/parse-svelte.js +120 -0
- package/plugin/dist/parse-svelte.js.map +1 -0
- package/plugin/dist/route-tree.d.ts +27 -0
- package/plugin/dist/route-tree.js +69 -0
- package/plugin/dist/route-tree.js.map +1 -0
- package/plugin/dist/transforms.d.ts +42 -0
- package/plugin/dist/transforms.js +95 -0
- package/plugin/dist/transforms.js.map +1 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve, sep } from 'node:path';
|
|
3
|
+
import { parseAstAsync } from 'vite';
|
|
4
|
+
import { parseSvelteFile } from './parse-svelte.js';
|
|
5
|
+
import { ancestorRouteIds, discoverRoutes, extractRouteParams } from './route-tree.js';
|
|
6
|
+
/**
|
|
7
|
+
* Default page-metadata paths surfaced to the editor when a route has no
|
|
8
|
+
* explicit schema. Always live under the `metadata` branch.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_PAGE_METADATA_PATHS = [
|
|
11
|
+
'metadata.title',
|
|
12
|
+
'metadata.description',
|
|
13
|
+
'metadata.canonical',
|
|
14
|
+
'metadata.robots'
|
|
15
|
+
];
|
|
16
|
+
const tryStatFile = (path) => {
|
|
17
|
+
try {
|
|
18
|
+
return existsSync(path) && statSync(path).isFile();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Parse a `page.cms.ts` file and return whether its default export declares
|
|
26
|
+
* `creatable: true`. Robust against `satisfies`/`as` type assertions and the
|
|
27
|
+
* `definePage(...)` wrapper form. Returns `false` on parse failure or when
|
|
28
|
+
* the export is shaped in a way we don't recognize — the static-adapter
|
|
29
|
+
* post-pass treats `false` as "not in the manifest", which is the safe
|
|
30
|
+
* default.
|
|
31
|
+
*/
|
|
32
|
+
const parsePageCmsCreatable = async (filePath) => {
|
|
33
|
+
let source;
|
|
34
|
+
try {
|
|
35
|
+
source = readFileSync(filePath, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
let program;
|
|
41
|
+
try {
|
|
42
|
+
program = (await parseAstAsync(source, { lang: 'ts' }));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const defaultExport = program.body.find((n) => n.type === 'ExportDefaultDeclaration');
|
|
48
|
+
if (!defaultExport)
|
|
49
|
+
return false;
|
|
50
|
+
let expr = defaultExport.declaration;
|
|
51
|
+
for (let i = 0; i < 8 && expr; i++) {
|
|
52
|
+
if (expr.type === 'TSSatisfiesExpression' ||
|
|
53
|
+
expr.type === 'TSAsExpression' ||
|
|
54
|
+
expr.type === 'TSTypeAssertion' ||
|
|
55
|
+
expr.type === 'ParenthesizedExpression') {
|
|
56
|
+
expr = expr.expression;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (expr.type === 'CallExpression' && expr.arguments && expr.arguments.length > 0) {
|
|
60
|
+
expr = expr.arguments[0];
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
if (!expr || expr.type !== 'ObjectExpression' || !expr.properties)
|
|
66
|
+
return false;
|
|
67
|
+
for (const prop of expr.properties) {
|
|
68
|
+
if (prop.type !== 'Property')
|
|
69
|
+
continue;
|
|
70
|
+
const k = prop.key;
|
|
71
|
+
const isCreatableKey = (k?.type === 'Identifier' && k.name === 'creatable') ||
|
|
72
|
+
(k?.type === 'Literal' && k.value === 'creatable');
|
|
73
|
+
if (!isCreatableKey)
|
|
74
|
+
continue;
|
|
75
|
+
if (prop.value?.type === 'Literal' && prop.value.value === true)
|
|
76
|
+
return true;
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Synchronous resolver for `$lib/...` and relative specifiers — the in-tree
|
|
83
|
+
* paths the plugin handles without any bundler context. Returns `null` for
|
|
84
|
+
* bare specifiers; callers fall through to the external resolver.
|
|
85
|
+
*/
|
|
86
|
+
const resolveLocal = (source, fromFile, libDir) => {
|
|
87
|
+
let base;
|
|
88
|
+
if (source.startsWith('$lib/'))
|
|
89
|
+
base = join(libDir, source.slice(5));
|
|
90
|
+
else if (source === '$lib')
|
|
91
|
+
base = libDir;
|
|
92
|
+
else if (source.startsWith('./') || source.startsWith('../'))
|
|
93
|
+
base = resolve(dirname(fromFile), source);
|
|
94
|
+
else
|
|
95
|
+
return null;
|
|
96
|
+
const candidates = [
|
|
97
|
+
base,
|
|
98
|
+
base.replace(/\.js$/, '.ts'),
|
|
99
|
+
base + '.svelte',
|
|
100
|
+
base + '.ts',
|
|
101
|
+
base + '.js',
|
|
102
|
+
join(base, 'index.ts'),
|
|
103
|
+
join(base, 'index.js'),
|
|
104
|
+
join(base, 'index.svelte')
|
|
105
|
+
];
|
|
106
|
+
for (const c of candidates) {
|
|
107
|
+
if (tryStatFile(c))
|
|
108
|
+
return c;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
};
|
|
112
|
+
const isCmsBarrelPath = (libDir, path) => {
|
|
113
|
+
const barrel = join(libDir, 'components', 'cms');
|
|
114
|
+
return path === join(barrel, 'index.ts') || path === join(barrel, 'index.js') || path === barrel;
|
|
115
|
+
};
|
|
116
|
+
const isCmsComponentFile = (libDir, path) => {
|
|
117
|
+
const dir = join(libDir, 'components', 'cms');
|
|
118
|
+
const rel = path.slice(dir.length + 1);
|
|
119
|
+
// Any .svelte file directly under <libDir>/components/cms/ — no allowlist of names.
|
|
120
|
+
return rel.length > 0 && !rel.includes(sep) && rel.endsWith('.svelte');
|
|
121
|
+
};
|
|
122
|
+
const isInVelacmsPackage = (path, roots) => {
|
|
123
|
+
for (const root of roots) {
|
|
124
|
+
const prefix = root.endsWith(sep) ? root : root + sep;
|
|
125
|
+
if (path === root || path.startsWith(prefix))
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
};
|
|
130
|
+
const matchTraverse = (source, patterns) => {
|
|
131
|
+
for (const pattern of patterns) {
|
|
132
|
+
if (typeof pattern === 'string') {
|
|
133
|
+
if (source === pattern || source.startsWith(pattern + '/'))
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
else if (pattern.test(source)) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Try local resolution first, then fall back to the external resolver if the
|
|
144
|
+
* source matches a `traverse` pattern. Returns `null` when neither succeeds.
|
|
145
|
+
*/
|
|
146
|
+
const resolveOrExternal = async (source, fromFile, libDir, resolveExternal, traversePatterns) => {
|
|
147
|
+
const local = resolveLocal(source, fromFile, libDir);
|
|
148
|
+
if (local)
|
|
149
|
+
return local;
|
|
150
|
+
if (!resolveExternal)
|
|
151
|
+
return null;
|
|
152
|
+
if (!matchTraverse(source, traversePatterns))
|
|
153
|
+
return null;
|
|
154
|
+
return resolveExternal(source, fromFile);
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Walk one entrypoint's static import graph (only `.svelte` files), collecting
|
|
158
|
+
* field names referenced by CMS component usages plus any `routeId=` literals
|
|
159
|
+
* that `<CmsEntries>`-shaped components carry. Classification iterates three
|
|
160
|
+
* rule sets per import: in-tree barrel/file, velacms package, then
|
|
161
|
+
* user-supplied spec map.
|
|
162
|
+
*/
|
|
163
|
+
const collectFieldsForEntry = async (entry, options) => {
|
|
164
|
+
const { libDir, velacmsRoots, specByResolvedPath, specBySource, traversePatterns, resolveExternal, cache, allVisited } = options;
|
|
165
|
+
const visited = new Set();
|
|
166
|
+
const fields = [];
|
|
167
|
+
const entriesRouteIds = [];
|
|
168
|
+
const classify = (spec, bindings, cmsLocals) => {
|
|
169
|
+
if ('default' in spec && spec.default) {
|
|
170
|
+
for (const b of bindings) {
|
|
171
|
+
if (b.imported === 'default')
|
|
172
|
+
cmsLocals.add(b.local);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if ('names' in spec) {
|
|
176
|
+
const set = new Set(spec.names);
|
|
177
|
+
for (const b of bindings) {
|
|
178
|
+
if (b.imported !== 'default' && set.has(b.imported))
|
|
179
|
+
cmsLocals.add(b.local);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
const walk = async (filePath) => {
|
|
184
|
+
if (visited.has(filePath))
|
|
185
|
+
return;
|
|
186
|
+
visited.add(filePath);
|
|
187
|
+
allVisited.add(filePath);
|
|
188
|
+
let parsed = cache.get(filePath);
|
|
189
|
+
if (!parsed) {
|
|
190
|
+
parsed = parseSvelteFile(filePath);
|
|
191
|
+
cache.set(filePath, parsed);
|
|
192
|
+
}
|
|
193
|
+
const resolvedByImport = new Map();
|
|
194
|
+
for (let i = 0; i < parsed.imports.length; i++) {
|
|
195
|
+
const imp = parsed.imports[i];
|
|
196
|
+
resolvedByImport.set(i, await resolveOrExternal(imp.source, filePath, libDir, resolveExternal, traversePatterns));
|
|
197
|
+
}
|
|
198
|
+
const cmsLocals = new Set();
|
|
199
|
+
for (let i = 0; i < parsed.imports.length; i++) {
|
|
200
|
+
const imp = parsed.imports[i];
|
|
201
|
+
const resolved = resolvedByImport.get(i) ?? null;
|
|
202
|
+
// Rule 1 + 2: in-tree barrel & files under <libDir>/components/cms/.
|
|
203
|
+
if (resolved && isCmsBarrelPath(libDir, resolved)) {
|
|
204
|
+
for (const b of imp.bindings) {
|
|
205
|
+
if (b.imported !== 'default')
|
|
206
|
+
cmsLocals.add(b.local);
|
|
207
|
+
}
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (resolved && isCmsComponentFile(libDir, resolved)) {
|
|
211
|
+
for (const b of imp.bindings) {
|
|
212
|
+
if (b.imported === 'default')
|
|
213
|
+
cmsLocals.add(b.local);
|
|
214
|
+
}
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
// Rule 3: any import resolving inside the velacms package itself.
|
|
218
|
+
if (resolved && velacmsRoots.length > 0 && isInVelacmsPackage(resolved, velacmsRoots)) {
|
|
219
|
+
for (const b of imp.bindings) {
|
|
220
|
+
if (b.imported === 'default') {
|
|
221
|
+
if (resolved.endsWith('.svelte'))
|
|
222
|
+
cmsLocals.add(b.local);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
cmsLocals.add(b.local);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
// Rule 4: user-supplied spec — match by resolved path first, then raw source.
|
|
231
|
+
let spec = resolved ? specByResolvedPath.get(resolved) : undefined;
|
|
232
|
+
if (!spec)
|
|
233
|
+
spec = specBySource.get(imp.source);
|
|
234
|
+
if (spec)
|
|
235
|
+
classify(spec, imp.bindings, cmsLocals);
|
|
236
|
+
}
|
|
237
|
+
for (const usage of parsed.componentUsages) {
|
|
238
|
+
if (!cmsLocals.has(usage.componentName))
|
|
239
|
+
continue;
|
|
240
|
+
if (usage.routeIdAttr)
|
|
241
|
+
entriesRouteIds.push(usage.routeIdAttr);
|
|
242
|
+
if (usage.hasValueAttr || !usage.fieldName)
|
|
243
|
+
continue;
|
|
244
|
+
fields.push(usage.fieldName);
|
|
245
|
+
}
|
|
246
|
+
for (let i = 0; i < parsed.imports.length; i++) {
|
|
247
|
+
const resolved = resolvedByImport.get(i) ?? null;
|
|
248
|
+
if (resolved && resolved.endsWith('.svelte'))
|
|
249
|
+
await walk(resolved);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
await walk(entry);
|
|
253
|
+
return {
|
|
254
|
+
fields: [...new Set(fields)],
|
|
255
|
+
entriesRouteIds: [...new Set(entriesRouteIds)]
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
const buildScopeChain = async (leaf, byRouteId, collectOptions) => {
|
|
259
|
+
const scopes = [];
|
|
260
|
+
const entriesRouteIds = [];
|
|
261
|
+
for (const dir of ancestorRouteIds(leaf.routeId)) {
|
|
262
|
+
const dirNode = byRouteId.get(dir);
|
|
263
|
+
if (!dirNode?.layoutPath)
|
|
264
|
+
continue;
|
|
265
|
+
const collected = await collectFieldsForEntry(dirNode.layoutPath, collectOptions);
|
|
266
|
+
entriesRouteIds.push(...collected.entriesRouteIds);
|
|
267
|
+
scopes.push({
|
|
268
|
+
scopeId: 'layout:' + dir,
|
|
269
|
+
kind: 'layout',
|
|
270
|
+
routeId: dir,
|
|
271
|
+
ownedParams: extractRouteParams(dir),
|
|
272
|
+
fields: collected.fields
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
const pageCollected = await collectFieldsForEntry(leaf.pagePath, collectOptions);
|
|
276
|
+
entriesRouteIds.push(...pageCollected.entriesRouteIds);
|
|
277
|
+
const fieldsWithDefaults = Array.from(new Set([...pageCollected.fields, ...DEFAULT_PAGE_METADATA_PATHS]));
|
|
278
|
+
scopes.push({
|
|
279
|
+
scopeId: 'page:' + leaf.routeId,
|
|
280
|
+
kind: 'page',
|
|
281
|
+
routeId: leaf.routeId,
|
|
282
|
+
ownedParams: extractRouteParams(leaf.routeId),
|
|
283
|
+
fields: fieldsWithDefaults
|
|
284
|
+
});
|
|
285
|
+
const seen = new Set();
|
|
286
|
+
for (const scope of scopes) {
|
|
287
|
+
const owned = scope.ownedParams.filter((p) => !seen.has(p));
|
|
288
|
+
scope.ownedParams = owned;
|
|
289
|
+
for (const p of owned)
|
|
290
|
+
seen.add(p);
|
|
291
|
+
}
|
|
292
|
+
return { scopes, entriesRouteIds: [...new Set(entriesRouteIds)] };
|
|
293
|
+
};
|
|
294
|
+
export const buildManifest = async (options) => {
|
|
295
|
+
const { routesDir, libDir, velacmsRoots = [], components = [], traverse = [], resolveExternal } = options;
|
|
296
|
+
const nodes = discoverRoutes(routesDir);
|
|
297
|
+
const byRouteId = new Map(nodes.map((n) => [n.routeId, n]));
|
|
298
|
+
const cache = new Map();
|
|
299
|
+
const visitedFiles = new Set();
|
|
300
|
+
const scopeByEntryPath = new Map();
|
|
301
|
+
const routeIdByScriptPath = new Map();
|
|
302
|
+
// Auto-register every `components[].source` for traversal so users don't
|
|
303
|
+
// have to repeat themselves.
|
|
304
|
+
const traversePatterns = [...traverse, ...components.map((c) => c.source)];
|
|
305
|
+
// Pre-resolve user spec sources once. Build two lookup maps: by canonical
|
|
306
|
+
// resolved path (preferred) and by raw source string (fallback).
|
|
307
|
+
const specByResolvedPath = new Map();
|
|
308
|
+
const specBySource = new Map();
|
|
309
|
+
for (const spec of components) {
|
|
310
|
+
specBySource.set(spec.source, spec);
|
|
311
|
+
if (resolveExternal) {
|
|
312
|
+
const resolved = await resolveExternal(spec.source, undefined);
|
|
313
|
+
if (resolved)
|
|
314
|
+
specByResolvedPath.set(resolved, spec);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
const collectOptions = {
|
|
318
|
+
libDir,
|
|
319
|
+
velacmsRoots,
|
|
320
|
+
specByResolvedPath,
|
|
321
|
+
specBySource,
|
|
322
|
+
traversePatterns,
|
|
323
|
+
resolveExternal,
|
|
324
|
+
cache,
|
|
325
|
+
allVisited: visitedFiles
|
|
326
|
+
};
|
|
327
|
+
const routes = {};
|
|
328
|
+
const pageCmsModules = [];
|
|
329
|
+
for (const node of nodes) {
|
|
330
|
+
if (!node.pagePath)
|
|
331
|
+
continue;
|
|
332
|
+
const { scopes, entriesRouteIds } = await buildScopeChain(node, byRouteId, collectOptions);
|
|
333
|
+
routes[node.routeId] = { scopes, entriesRouteIds };
|
|
334
|
+
// Index every entry path encountered while walking this leaf's chain so
|
|
335
|
+
// the transform hook can look up scope info by file path. Layouts may be
|
|
336
|
+
// indexed multiple times via different leaves — same scope, same entry,
|
|
337
|
+
// so the writes are idempotent.
|
|
338
|
+
for (const scope of scopes) {
|
|
339
|
+
const entryNode = byRouteId.get(scope.routeId);
|
|
340
|
+
const entryPath = scope.kind === 'layout' ? entryNode?.layoutPath : entryNode?.pagePath;
|
|
341
|
+
if (!entryPath)
|
|
342
|
+
continue;
|
|
343
|
+
scopeByEntryPath.set(entryPath, {
|
|
344
|
+
scopeId: scope.scopeId,
|
|
345
|
+
kind: scope.kind,
|
|
346
|
+
routeId: scope.routeId,
|
|
347
|
+
ownedParams: scope.ownedParams
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
if (node.pageScriptPath)
|
|
351
|
+
routeIdByScriptPath.set(node.pageScriptPath, node.routeId);
|
|
352
|
+
if (node.pageServerScriptPath)
|
|
353
|
+
routeIdByScriptPath.set(node.pageServerScriptPath, node.routeId);
|
|
354
|
+
if (node.pageCmsPath) {
|
|
355
|
+
const creatable = await parsePageCmsCreatable(node.pageCmsPath);
|
|
356
|
+
pageCmsModules.push({ routeId: node.routeId, path: node.pageCmsPath, creatable });
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
manifest: { version: 1, routes },
|
|
361
|
+
visitedFiles: [...visitedFiles],
|
|
362
|
+
scopeByEntryPath,
|
|
363
|
+
routeIdByScriptPath,
|
|
364
|
+
pageCmsModules
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAElB,MAAM,iBAAiB,CAAC;AAczB;;;GAGG;AACH,MAAM,2BAA2B,GAAa;IAC7C,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;IACpB,iBAAiB;CACjB,CAAC;AAmEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE;IAC7C,IAAI,CAAC;QACJ,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,KAAK,EAAE,QAAgB,EAAoB,EAAE;IAC1E,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACJ,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,OAA4B,CAAC;IACjC,IAAI,CAAC;QACJ,OAAO,GAAG,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAwB,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAI,OAAO,CAAC,IAAgC,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CACJ,CAAC;IAC1C,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAajC,IAAI,IAAI,GAAG,aAAa,CAAC,WAAsB,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IACC,IAAI,CAAC,IAAI,KAAK,uBAAuB;YACrC,IAAI,CAAC,IAAI,KAAK,gBAAgB;YAC9B,IAAI,CAAC,IAAI,KAAK,iBAAiB;YAC/B,IAAI,CAAC,IAAI,KAAK,yBAAyB,EACtC,CAAC;YACF,IAAI,GAAG,IAAI,CAAC,UAAqB,CAAC;YAClC,SAAS;QACV,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnF,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS;QACV,CAAC;QACD,MAAM;IACP,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAEhF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,MAAM,cAAc,GACnB,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;YACpD,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc;YAAE,SAAS;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC7E,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAc,EAAiB,EAAE;IACxF,IAAI,IAAY,CAAC;IACjB,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAChE,IAAI,MAAM,KAAK,MAAM;QAAE,IAAI,GAAG,MAAM,CAAC;SACrC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC3D,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;;QACtC,OAAO,IAAI,CAAC;IAEjB,MAAM,UAAU,GAAG;QAClB,IAAI;QACJ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5B,IAAI,GAAG,SAAS;QAChB,IAAI,GAAG,KAAK;QACZ,IAAI,GAAG,KAAK;QACZ,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,IAAY,EAAW,EAAE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAW,EAAE;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,oFAAoF;IACpF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,KAAe,EAAW,EAAE;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;QACtD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAA6B,EAAW,EAAE;IAChF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACzE,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,iBAAiB,GAAG,KAAK,EAC9B,MAAc,EACd,QAAgB,EAChB,MAAc,EACd,eAA2C,EAC3C,gBAAqC,EACZ,EAAE;IAC3B,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,KAAK,EAClC,KAAa,EACb,OASC,EAC0D,EAAE;IAC7D,MAAM,EACL,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,KAAK,EACL,UAAU,EACV,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,CAChB,IAA8B,EAC9B,QAAqD,EACrD,SAAsB,EACf,EAAE;QACT,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;oBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;QACtD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,gBAAgB,CAAC,GAAG,CACnB,CAAC,EACD,MAAM,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAC,CACxF,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAEjD,qEAAqE;YACrE,IAAI,QAAQ,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACnD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;wBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACtD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;wBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,SAAS;YACV,CAAC;YAED,kEAAkE;YAClE,IAAI,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;gBACvF,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAC9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;4BAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC1D,CAAC;yBAAM,CAAC;wBACP,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACF,CAAC;gBACD,SAAS;YACV,CAAC;YAED,8EAA8E;YAC9E,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,CAAC,IAAI;gBAAE,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,IAAI;gBAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;gBAAE,SAAS;YAClD,IAAI,KAAK,CAAC,WAAW;gBAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,SAAS;YACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO;QACN,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;KAC9C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAC5B,IAAe,EACf,SAAiC,EACjC,cAA2D,EACU,EAAE;IACvE,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,UAAU;YAAE,SAAS;QACnC,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAClF,eAAe,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,SAAS,GAAG,GAAG;YACxB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC;YACpC,MAAM,EAAE,SAAS,CAAC,MAAM;SACxB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,QAAkB,EAAE,cAAc,CAAC,CAAC;IAC3F,eAAe,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACpC,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,2BAA2B,CAAC,CAAC,CAClE,CAAC;IACF,MAAM,CAAC,IAAI,CAAC;QACX,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO;QAC/B,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7C,MAAM,EAAE,kBAAkB;KAC1B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,OAA6B,EACE,EAAE;IACjC,MAAM,EACL,SAAS,EACT,MAAM,EACN,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,EAAE,EACf,QAAQ,GAAG,EAAE,EACb,eAAe,EACf,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,yEAAyE;IACzE,6BAA6B;IAC7B,MAAM,gBAAgB,GAAwB,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhG,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoC,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,eAAe,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,QAAQ;gBAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;IAED,MAAM,cAAc,GAAgD;QACnE,MAAM;QACN,YAAY;QACZ,kBAAkB;QAClB,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,KAAK;QACL,UAAU,EAAE,YAAY;KACxB,CAAC;IAEF,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,cAAc,GAA0C,EAAE,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,SAAS;QAC7B,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAEnD,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,gCAAgC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC;YACxF,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC9B,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,cAAc;YAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,oBAAoB;YAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChE,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;IACF,CAAC;IAED,OAAO;QACN,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAChC,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;QAC/B,gBAAgB;QAChB,mBAAmB;QACnB,cAAc;KACd,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend serves uploaded files at the endpoint origin (`/uploads/<filename>`)
|
|
3
|
+
* via SvelteKit's static handler — confirmed in `cms.velastack/_store.ts`. The
|
|
4
|
+
* project-scoped CMS endpoint (`/v1/projects/PID/cms`) only governs the API,
|
|
5
|
+
* not the upload path. So `uploadsBase` is the bare origin + `/uploads`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const deriveUploadsBase: (endpoint: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Walk an arbitrary deserialized JSON value and collect every media filename
|
|
10
|
+
* referenced as a string — either as a relative `/uploads/<file>` path or an
|
|
11
|
+
* absolute `<uploadsBase>/<file>` URL. Cycle-safe via a WeakSet.
|
|
12
|
+
*/
|
|
13
|
+
export declare const extractMediaUrls: (value: unknown, uploadsBase: string) => Set<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Deep-clone `value` and replace every recognized media URL string with
|
|
16
|
+
* `${mediaPrefix}/<filename>`. Returns the cloned tree; the input is left
|
|
17
|
+
* untouched. Cycle-safe (cycles are flattened to a fresh object — payloads
|
|
18
|
+
* passed through `devalue` won't have cycles, but defensive).
|
|
19
|
+
*/
|
|
20
|
+
export declare const rewriteMediaUrls: <T>(value: T, uploadsBase: string, mediaPrefix: string) => T;
|
|
21
|
+
export type DownloadResult = {
|
|
22
|
+
written: number;
|
|
23
|
+
skipped: number;
|
|
24
|
+
failed: Array<{
|
|
25
|
+
filename: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Download every filename in `filenames` from `${uploadsBase}/<filename>` into
|
|
31
|
+
* `destDir`. Files already on disk are skipped (no etag check — backend
|
|
32
|
+
* filenames are unique slugs, content is stable per name). Failures are
|
|
33
|
+
* logged and collected, never thrown — one missing image shouldn't break the
|
|
34
|
+
* build.
|
|
35
|
+
*/
|
|
36
|
+
export declare const downloadMedia: (filenames: Iterable<string>, uploadsBase: string, destDir: string) => Promise<DownloadResult>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Backend serves uploaded files at the endpoint origin (`/uploads/<filename>`)
|
|
5
|
+
* via SvelteKit's static handler — confirmed in `cms.velastack/_store.ts`. The
|
|
6
|
+
* project-scoped CMS endpoint (`/v1/projects/PID/cms`) only governs the API,
|
|
7
|
+
* not the upload path. So `uploadsBase` is the bare origin + `/uploads`.
|
|
8
|
+
*/
|
|
9
|
+
export const deriveUploadsBase = (endpoint) => {
|
|
10
|
+
const url = new URL(endpoint);
|
|
11
|
+
return `${url.origin}/uploads`;
|
|
12
|
+
};
|
|
13
|
+
const RELATIVE_UPLOADS_RE = /^\/uploads\/([^/?#]+)$/;
|
|
14
|
+
/**
|
|
15
|
+
* Walk an arbitrary deserialized JSON value and collect every media filename
|
|
16
|
+
* referenced as a string — either as a relative `/uploads/<file>` path or an
|
|
17
|
+
* absolute `<uploadsBase>/<file>` URL. Cycle-safe via a WeakSet.
|
|
18
|
+
*/
|
|
19
|
+
export const extractMediaUrls = (value, uploadsBase) => {
|
|
20
|
+
const out = new Set();
|
|
21
|
+
const seen = new WeakSet();
|
|
22
|
+
const prefix = `${uploadsBase}/`;
|
|
23
|
+
const walk = (v) => {
|
|
24
|
+
if (typeof v === 'string') {
|
|
25
|
+
const m = RELATIVE_UPLOADS_RE.exec(v);
|
|
26
|
+
if (m) {
|
|
27
|
+
out.add(m[1]);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (v.startsWith(prefix)) {
|
|
31
|
+
const rest = v.slice(prefix.length).split(/[?#]/)[0];
|
|
32
|
+
if (rest && !rest.includes('/'))
|
|
33
|
+
out.add(rest);
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!v || typeof v !== 'object')
|
|
38
|
+
return;
|
|
39
|
+
if (seen.has(v))
|
|
40
|
+
return;
|
|
41
|
+
seen.add(v);
|
|
42
|
+
if (Array.isArray(v)) {
|
|
43
|
+
for (const x of v)
|
|
44
|
+
walk(x);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
for (const k of Object.keys(v)) {
|
|
48
|
+
walk(v[k]);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
walk(value);
|
|
52
|
+
return out;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Deep-clone `value` and replace every recognized media URL string with
|
|
56
|
+
* `${mediaPrefix}/<filename>`. Returns the cloned tree; the input is left
|
|
57
|
+
* untouched. Cycle-safe (cycles are flattened to a fresh object — payloads
|
|
58
|
+
* passed through `devalue` won't have cycles, but defensive).
|
|
59
|
+
*/
|
|
60
|
+
export const rewriteMediaUrls = (value, uploadsBase, mediaPrefix) => {
|
|
61
|
+
const seen = new WeakMap();
|
|
62
|
+
const prefix = `${uploadsBase}/`;
|
|
63
|
+
const normalizedMediaPrefix = mediaPrefix.replace(/\/$/, '');
|
|
64
|
+
const walk = (v) => {
|
|
65
|
+
if (typeof v === 'string') {
|
|
66
|
+
const m = RELATIVE_UPLOADS_RE.exec(v);
|
|
67
|
+
if (m)
|
|
68
|
+
return `${normalizedMediaPrefix}/${m[1]}`;
|
|
69
|
+
if (v.startsWith(prefix)) {
|
|
70
|
+
const rest = v.slice(prefix.length).split(/[?#]/)[0];
|
|
71
|
+
if (rest && !rest.includes('/'))
|
|
72
|
+
return `${normalizedMediaPrefix}/${rest}`;
|
|
73
|
+
}
|
|
74
|
+
return v;
|
|
75
|
+
}
|
|
76
|
+
if (!v || typeof v !== 'object')
|
|
77
|
+
return v;
|
|
78
|
+
const cached = seen.get(v);
|
|
79
|
+
if (cached !== undefined)
|
|
80
|
+
return cached;
|
|
81
|
+
if (Array.isArray(v)) {
|
|
82
|
+
const arr = [];
|
|
83
|
+
seen.set(v, arr);
|
|
84
|
+
for (const x of v)
|
|
85
|
+
arr.push(walk(x));
|
|
86
|
+
return arr;
|
|
87
|
+
}
|
|
88
|
+
const obj = {};
|
|
89
|
+
seen.set(v, obj);
|
|
90
|
+
for (const k of Object.keys(v)) {
|
|
91
|
+
obj[k] = walk(v[k]);
|
|
92
|
+
}
|
|
93
|
+
return obj;
|
|
94
|
+
};
|
|
95
|
+
return walk(value);
|
|
96
|
+
};
|
|
97
|
+
const fileExists = (p) => {
|
|
98
|
+
try {
|
|
99
|
+
fs.accessSync(p, fs.constants.F_OK);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const CONCURRENCY = 8;
|
|
107
|
+
/**
|
|
108
|
+
* Download every filename in `filenames` from `${uploadsBase}/<filename>` into
|
|
109
|
+
* `destDir`. Files already on disk are skipped (no etag check — backend
|
|
110
|
+
* filenames are unique slugs, content is stable per name). Failures are
|
|
111
|
+
* logged and collected, never thrown — one missing image shouldn't break the
|
|
112
|
+
* build.
|
|
113
|
+
*/
|
|
114
|
+
export const downloadMedia = async (filenames, uploadsBase, destDir) => {
|
|
115
|
+
const list = [...new Set(filenames)];
|
|
116
|
+
const result = { written: 0, skipped: 0, failed: [] };
|
|
117
|
+
if (list.length === 0)
|
|
118
|
+
return result;
|
|
119
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
120
|
+
let cursor = 0;
|
|
121
|
+
const workers = [];
|
|
122
|
+
const next = async () => {
|
|
123
|
+
while (cursor < list.length) {
|
|
124
|
+
const filename = list[cursor++];
|
|
125
|
+
const target = path.join(destDir, filename);
|
|
126
|
+
if (fileExists(target)) {
|
|
127
|
+
result.skipped++;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const res = await fetch(`${uploadsBase}/${filename}`);
|
|
132
|
+
if (!res.ok) {
|
|
133
|
+
result.failed.push({ filename, reason: `HTTP ${res.status}` });
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
137
|
+
fs.writeFileSync(target, buf);
|
|
138
|
+
result.written++;
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
result.failed.push({
|
|
142
|
+
filename,
|
|
143
|
+
reason: e instanceof Error ? e.message : String(e)
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
for (let i = 0; i < Math.min(CONCURRENCY, list.length); i++)
|
|
149
|
+
workers.push(next());
|
|
150
|
+
await Promise.all(workers);
|
|
151
|
+
return result;
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,GAAG,GAAG,CAAC,MAAM,UAAU,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAE,WAAmB,EAAe,EAAE;IACpF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,CAAU,EAAQ,EAAE;QACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACd,OAAO;YACR,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;YACD,OAAO;QACR,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO;QACxC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAW,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;QACtB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACF,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAI,KAAQ,EAAE,WAAmB,EAAE,WAAmB,EAAK,EAAE;IAC5F,MAAM,IAAI,GAAG,IAAI,OAAO,EAAmB,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC;IACjC,MAAM,qBAAqB,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,CAAC,CAAU,EAAW,EAAE;QACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC;gBAAE,OAAO,GAAG,qBAAqB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,qBAAqB,IAAI,IAAI,EAAE,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,CAAW,EAAE,GAAG,CAAC,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,CAAW,EAAE,GAAG,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAM,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAS,EAAW,EAAE;IACzC,IAAI,CAAC;QACJ,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC;AAQtB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,SAA2B,EAC3B,WAAmB,EACnB,OAAe,EACW,EAAE;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAErC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACtC,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,SAAS;YACV,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACtD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC/D,SAAS;gBACV,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBAClB,QAAQ;oBACR,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBAClD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type ParsedImport = {
|
|
2
|
+
source: string;
|
|
3
|
+
bindings: Array<{
|
|
4
|
+
imported: string;
|
|
5
|
+
local: string;
|
|
6
|
+
}>;
|
|
7
|
+
};
|
|
8
|
+
export type ComponentUsage = {
|
|
9
|
+
/** Local binding name as used in the template, e.g. `CmsText` or `Title`. */
|
|
10
|
+
componentName: string;
|
|
11
|
+
/** Static value of the `name=` prop, or `null` if absent / non-static. */
|
|
12
|
+
fieldName: string | null;
|
|
13
|
+
/** Whether a `value=` prop was present (marks per-item overrides). */
|
|
14
|
+
hasValueAttr: boolean;
|
|
15
|
+
/** Static value of the `routeId=` prop, or `null` if absent / non-static. */
|
|
16
|
+
routeIdAttr: string | null;
|
|
17
|
+
};
|
|
18
|
+
export type InstanceScriptRange = {
|
|
19
|
+
/** Source offset where the inner script content begins (just after `<script ...>`). */
|
|
20
|
+
contentStart: number;
|
|
21
|
+
/** Source offset where the inner script content ends (just before `</script>`). */
|
|
22
|
+
contentEnd: number;
|
|
23
|
+
};
|
|
24
|
+
export type ParsedSvelte = {
|
|
25
|
+
/** Static imports declared in `<script>` / `<script context="module">`. */
|
|
26
|
+
imports: ParsedImport[];
|
|
27
|
+
/** Every `<Component>` usage in the template (CMS or otherwise). */
|
|
28
|
+
componentUsages: ComponentUsage[];
|
|
29
|
+
/** Position of the instance `<script>` block, or `null` if absent. */
|
|
30
|
+
instanceScript: InstanceScriptRange | null;
|
|
31
|
+
/** Source length, so callers don't have to keep the raw text around. */
|
|
32
|
+
sourceLength: number;
|
|
33
|
+
};
|
|
34
|
+
export declare const parseSvelteSource: (code: string, filename?: string) => ParsedSvelte;
|
|
35
|
+
export declare const parseSvelteFile: (filePath: string) => ParsedSvelte;
|