UNPKG

astro-tractstack

Version:

Astro integration for TractStack - redeeming the web from boring experiences

1,611 lines (1,576 loc) 68.3 kB
import { copyFileSync, existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { dirname } from 'node:path'; import type { AstroIntegrationLogger } from '@/types/astro'; interface InjectFilesConfig { includeExamples?: boolean; enableMultiTenant?: boolean; } /** * Injects template files into the project directory, organizing them into functional groups. * Skips or overwrites files based on configuration and protection status. * @param resolve - Function to resolve template file paths * @param logger - Astro integration logger for logging operations * @param config - Configuration options for including examples and enabling multi-tenant features */ export async function injectTemplateFiles( resolve: (path: string) => string, logger: AstroIntegrationLogger, config?: InjectFilesConfig ): Promise<void> { logger.info('TractStack: Injecting template files'); // File groupings organized by functionality const templateFiles = [ // Core Configuration { src: resolve('../templates/env.example'), dest: 'env.example', }, { src: resolve('../templates/prettierrc'), dest: '.prettierrc', }, { src: resolve('../templates/prettierignore'), dest: '.prettierignore', }, { src: resolve('../templates/gitignore'), dest: '.gitignore', }, { src: resolve('../templates/tailwind.config.cjs'), dest: 'tailwind.config.cjs', }, { src: resolve('../templates/src/constants.ts'), dest: 'src/constants.ts', }, { src: resolve('../templates/src/constants/stopWords.ts'), dest: 'src/constants/stopWords.ts', }, { src: resolve('../templates/src/pages/media/[...slug].astro'), dest: 'src/pages/media/[...slug].astro', }, // Types { src: resolve('../templates/src/types/astro.ts'), dest: 'src/types/astro.ts', }, { src: resolve('../astro.d.ts'), dest: 'astro.d.ts', }, { src: resolve('../templates/src/types/tractstack.ts'), dest: 'src/types/tractstack.ts', }, // Compositor types { src: resolve('../templates/src/types/compositorTypes.ts'), dest: 'src/types/compositorTypes.ts', }, { src: resolve('../templates/src/types/nodeProps.ts'), dest: 'src/types/nodeProps.ts', }, // Compositor components { src: resolve('../templates/src/components/compositor/Compositor.tsx'), dest: 'src/components/compositor/Compositor.tsx', }, { src: resolve( '../templates/src/components/compositor/PanelVisibilityWrapper.tsx' ), dest: 'src/components/compositor/PanelVisibilityWrapper.tsx', }, { src: resolve('../templates/src/components/compositor/Node.tsx'), dest: 'src/components/compositor/Node.tsx', }, { src: resolve('../templates/src/components/compositor/NodeWithGuid.tsx'), dest: 'src/components/compositor/NodeWithGuid.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/RenderChildren.tsx' ), dest: 'src/components/compositor/nodes/RenderChildren.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/GhostInsertBlock.tsx' ), dest: 'src/components/compositor/nodes/GhostInsertBlock.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/StoryFragment.tsx' ), dest: 'src/components/compositor/nodes/StoryFragment.tsx', }, { src: resolve('../templates/src/components/compositor/nodes/Pane.tsx'), dest: 'src/components/compositor/nodes/Pane.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/Pane_eraser.tsx' ), dest: 'src/components/compositor/nodes/Pane_eraser.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/Pane_layout.tsx' ), dest: 'src/components/compositor/nodes/Pane_layout.tsx', }, { src: resolve('../templates/src/components/compositor/nodes/Markdown.tsx'), dest: 'src/components/compositor/nodes/Markdown.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/BgPaneWrapper.tsx' ), dest: 'src/components/compositor/nodes/BgPaneWrapper.tsx', }, { src: resolve('../templates/src/components/compositor/nodes/Widget.tsx'), dest: 'src/components/compositor/nodes/Widget.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/TagElement.tsx' ), dest: 'src/components/compositor/nodes/TagElement.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/TabIndicator.tsx' ), dest: 'src/components/compositor/nodes/tagElements/TabIndicator.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeBasicTag.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeBasicTag.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeBasicTag_insert.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeBasicTag_insert.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeBasicTag_eraser.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeBasicTag_eraser.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeBasicTag_settings.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeBasicTag_settings.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeText.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeText.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeAnchorComponent.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeAnchorComponent.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeA.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeA.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeA_eraser.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeA_eraser.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeButton.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeButton.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeButton_eraser.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeButton_eraser.tsx', }, { src: resolve( '../templates/src/components/compositor/nodes/tagElements/NodeImg.tsx' ), dest: 'src/components/compositor/nodes/tagElements/NodeImg.tsx', }, // Edit widgets { src: resolve('../templates/src/components/edit/widgets/BeliefWidget.tsx'), dest: 'src/components/edit/widgets/BeliefWidget.tsx', }, { src: resolve( '../templates/src/components/edit/widgets/IdentifyAsWidget.tsx' ), dest: 'src/components/edit/widgets/IdentifyAsWidget.tsx', }, { src: resolve('../templates/src/components/edit/widgets/ToggleWidget.tsx'), dest: 'src/components/edit/widgets/ToggleWidget.tsx', }, { src: resolve('../templates/src/components/edit/widgets/BunnyWidget.tsx'), dest: 'src/components/edit/widgets/BunnyWidget.tsx', }, { src: resolve('../templates/src/components/edit/widgets/SignupWidget.tsx'), dest: 'src/components/edit/widgets/SignupWidget.tsx', }, { src: resolve( '../templates/src/components/edit/widgets/YouTubeWidget.tsx' ), dest: 'src/components/edit/widgets/YouTubeWidget.tsx', }, // Compositor fields { src: resolve('../templates/src/components/fields/SingleParam.tsx'), dest: 'src/components/fields/SingleParam.tsx', }, { src: resolve('../templates/src/components/fields/BooleanParam.tsx'), dest: 'src/components/fields/BooleanParam.tsx', }, { src: resolve('../templates/src/components/fields/MultiParam.tsx'), dest: 'src/components/fields/MultiParam.tsx', }, { src: resolve('../templates/src/components/fields/ImageUpload.tsx'), dest: 'src/components/fields/ImageUpload.tsx', }, { src: resolve('../templates/src/components/fields/ArtpackImage.tsx'), dest: 'src/components/fields/ArtpackImage.tsx', }, { src: resolve('../templates/src/components/fields/BackgroundImage.tsx'), dest: 'src/components/fields/BackgroundImage.tsx', }, { src: resolve( '../templates/src/components/fields/BackgroundImageWrapper.tsx' ), dest: 'src/components/fields/BackgroundImageWrapper.tsx', }, { src: resolve('../templates/src/components/fields/ColorPickerCombo.tsx'), dest: 'src/components/fields/ColorPickerCombo.tsx', }, { src: resolve( '../templates/src/components/fields/PaneBreakCollectionSelector.tsx' ), dest: 'src/components/fields/PaneBreakCollectionSelector.tsx', }, { src: resolve( '../templates/src/components/fields/PaneBreakShapeSelector.tsx' ), dest: 'src/components/fields/PaneBreakShapeSelector.tsx', }, { src: resolve( '../templates/src/components/fields/SelectedTailwindClass.tsx' ), dest: 'src/components/fields/SelectedTailwindClass.tsx', }, { src: resolve('../templates/src/components/fields/ViewportComboBox.tsx'), dest: 'src/components/fields/ViewportComboBox.tsx', }, { src: resolve( '../templates/src/components/fields/BunnyMomentSelector.tsx' ), dest: 'src/components/fields/BunnyMomentSelector.tsx', }, { src: resolve( '../templates/src/components/fields/ActionBuilderTimeSelector.tsx' ), dest: 'src/components/fields/ActionBuilderTimeSelector.tsx', }, // Compositor elements { src: resolve( '../templates/src/components/compositor/elements/Belief.tsx' ), dest: 'src/components/compositor/elements/Belief.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/ToggleBelief.tsx' ), dest: 'src/components/compositor/elements/ToggleBelief.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/IdentifyAs.tsx' ), dest: 'src/components/compositor/elements/IdentifyAs.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/SignUp.tsx' ), dest: 'src/components/compositor/elements/SignUp.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/BunnyVideo.tsx' ), dest: 'src/components/compositor/elements/BunnyVideo.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/YouTubeWrapper.tsx' ), dest: 'src/components/compositor/elements/YouTubeWrapper.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/BgVisualBreak.tsx' ), dest: 'src/components/compositor/elements/BgVisualBreak.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/BgImage.tsx' ), dest: 'src/components/compositor/elements/BgImage.tsx', }, { src: resolve('../templates/src/components/compositor/elements/Svg.tsx'), dest: 'src/components/compositor/elements/Svg.tsx', }, { src: resolve( '../templates/src/components/compositor/elements/PlayButton.tsx' ), dest: 'src/components/compositor/elements/PlayButton.tsx', }, // Compositor panels { src: resolve( '../templates/src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx' ), dest: 'src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx', }, { src: resolve( '../templates/src/components/edit/storyfragment/StoryFragmentPanel_title.tsx' ), dest: 'src/components/edit/storyfragment/StoryFragmentPanel_title.tsx', }, { src: resolve( '../templates/src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx' ), dest: 'src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx', }, { src: resolve( '../templates/src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx' ), dest: 'src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx', }, { src: resolve( '../templates/src/components/edit/storyfragment/StoryFragmentPanel_og.tsx' ), dest: 'src/components/edit/storyfragment/StoryFragmentPanel_og.tsx', }, { src: resolve('../templates/src/components/edit/pane/AddPanePanel.tsx'), dest: 'src/components/edit/pane/AddPanePanel.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_break.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_break.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_codehook.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_codehook.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_newAICopy_modal.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_newAICopy.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_newAICopy.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_newCopyMode.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_newCopyMode.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_newCustomCopy.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_newCustomCopy.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_new.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_new.tsx', }, { src: resolve( '../templates/src/components/edit/pane/AddPanePanel_reuse.tsx' ), dest: 'src/components/edit/pane/AddPanePanel_reuse.tsx', }, { src: resolve('../templates/src/components/edit/pane/ConfigPanePanel.tsx'), dest: 'src/components/edit/pane/ConfigPanePanel.tsx', }, { src: resolve( '../templates/src/components/edit/pane/PanePanel_impression.tsx' ), dest: 'src/components/edit/pane/PanePanel_impression.tsx', }, { src: resolve('../templates/src/components/edit/pane/PanePanel_path.tsx'), dest: 'src/components/edit/pane/PanePanel_path.tsx', }, { src: resolve('../templates/src/components/edit/pane/PanePanel_title.tsx'), dest: 'src/components/edit/pane/PanePanel_title.tsx', }, { src: resolve( '../templates/src/components/edit/context/ContextPaneConfig.tsx' ), dest: 'src/components/edit/context/ContextPaneConfig.tsx', }, { src: resolve( '../templates/src/components/edit/context/ContextPaneConfig_title.tsx' ), dest: 'src/components/edit/context/ContextPaneConfig_title.tsx', }, { src: resolve( '../templates/src/components/edit/context/ContextPaneConfig_slug.tsx' ), dest: 'src/components/edit/context/ContextPaneConfig_slug.tsx', }, { src: resolve('../templates/src/components/edit/pane/PageGenSelector.tsx'), dest: 'src/components/edit/pane/PageGenSelector.tsx', }, { src: resolve('../templates/src/components/edit/pane/PageGenSpecial.tsx'), dest: 'src/components/edit/pane/PageGenSpecial.tsx', }, { src: resolve('../templates/src/components/edit/pane/PageGen.tsx'), dest: 'src/components/edit/pane/PageGen.tsx', }, { src: resolve('../templates/src/components/edit/pane/PageGen_preview.tsx'), dest: 'src/components/edit/pane/PageGen_preview.tsx', }, // Compositor previews { src: resolve( '../templates/src/components/compositor/preview/PanesPreviewGenerator.tsx' ), dest: 'src/components/compositor/preview/PanesPreviewGenerator.tsx', }, { src: resolve( '../templates/src/components/compositor/preview/PaneSnapshotGenerator.tsx' ), dest: 'src/components/compositor/preview/PaneSnapshotGenerator.tsx', }, { src: resolve( '../templates/src/components/compositor/preview/OgImagePreview.tsx' ), dest: 'src/components/compositor/preview/OgImagePreview.tsx', }, { src: resolve( '../templates/src/components/compositor/preview/VisualBreakPreview.tsx' ), dest: 'src/components/compositor/preview/VisualBreakPreview.tsx', }, { src: resolve( '../templates/src/components/compositor/preview/ListContentPreview.tsx' ), dest: 'src/components/compositor/preview/ListContentPreview.tsx', }, { src: resolve( '../templates/src/components/compositor/preview/FeaturedContentPreview.tsx' ), dest: 'src/components/compositor/preview/FeaturedContentPreview.tsx', }, // Server side stores { src: resolve('../templates/src/stores/backend.ts'), dest: 'src/stores/backend.ts', }, // Compositor stores { src: resolve('../templates/src/stores/nodes.ts'), dest: 'src/stores/nodes.ts', }, { src: resolve('../templates/src/stores/notificationSystem.ts'), dest: 'src/stores/notificationSystem.ts', }, { src: resolve('../templates/src/stores/nodesHistory.ts'), dest: 'src/stores/nodesHistory.ts', }, // AAI utils { src: resolve('../templates/src/utils/aai/getTitleSlug.ts'), dest: 'src/utils/aai/getTitleSlug.ts', }, // Compositor utils - etl { src: resolve('../templates/src/utils/etl/index.ts'), dest: 'src/utils/etl/index.ts', }, { src: resolve('../templates/src/utils/etl/extractor.ts'), dest: 'src/utils/etl/extractor.ts', }, { src: resolve('../templates/src/utils/etl/transformer.ts'), dest: 'src/utils/etl/transformer.ts', }, { src: resolve('../templates/src/utils/etl/loader.ts'), dest: 'src/utils/etl/loader.ts', }, // Compositor utils { src: resolve('../templates/src/utils/compositor/processMarkdown.ts'), dest: 'src/utils/compositor/processMarkdown.ts', }, { src: resolve( '../templates/src/utils/compositor/templateMarkdownStyles.ts' ), dest: 'src/utils/compositor/templateMarkdownStyles.ts', }, { src: resolve( '../templates/src/utils/compositor/nodesMarkdownGenerator.ts' ), dest: 'src/utils/compositor/nodesMarkdownGenerator.ts', }, { src: resolve('../templates/src/utils/compositor/nodesHelper.ts'), dest: 'src/utils/compositor/nodesHelper.ts', }, { src: resolve('../templates/src/utils/compositor/allowInsert.ts'), dest: 'src/utils/compositor/allowInsert.ts', }, { src: resolve('../templates/src/utils/compositor/typeGuards.ts'), dest: 'src/utils/compositor/typeGuards.ts', }, { src: resolve('../templates/src/utils/compositor/domHelpers.ts'), dest: 'src/utils/compositor/domHelpers.ts', }, { src: resolve('../templates/src/utils/compositor/handleClickEvent.ts'), dest: 'src/utils/compositor/handleClickEvent.ts', }, { src: resolve( '../templates/src/utils/compositor/reduceNodesClassNames.ts' ), dest: 'src/utils/compositor/reduceNodesClassNames.ts', }, { src: resolve('../templates/src/utils/compositor/tailwindClasses.ts'), dest: 'src/utils/compositor/tailwindClasses.ts', }, { src: resolve('../templates/src/utils/compositor/tailwindColors.ts'), dest: 'src/utils/compositor/tailwindColors.ts', }, { src: resolve('../templates/src/utils/compositor/TemplateNodes.ts'), dest: 'src/utils/compositor/TemplateNodes.ts', }, { src: resolve('../templates/src/utils/compositor/TemplatePanes.ts'), dest: 'src/utils/compositor/TemplatePanes.ts', }, { src: resolve('../templates/src/utils/compositor/TemplateMarkdowns.ts'), dest: 'src/utils/compositor/TemplateMarkdowns.ts', }, { src: resolve('../templates/src/constants/tailwindColors.json'), dest: 'src/constants/tailwindColors.json', }, { src: resolve('../templates/src/constants/shapes.ts'), dest: 'src/constants/shapes.ts', }, { src: resolve('../templates/src/constants/beliefs.ts'), dest: 'src/constants/beliefs.ts', }, { src: resolve('../templates/src/constants/prompts.json'), dest: 'src/constants/prompts.json', }, // Stores { src: resolve('../templates/src/stores/storykeep.ts'), dest: 'src/stores/storykeep.ts', }, { src: resolve('../templates/src/stores/analytics.ts'), dest: 'src/stores/analytics.ts', }, { src: resolve('../templates/src/stores/orphanAnalysis.ts'), dest: 'src/stores/orphanAnalysis.ts', }, { src: resolve('../templates/src/stores/navigation.ts'), dest: 'src/stores/navigation.ts', }, // Action utilities { src: resolve('../templates/src/utils/actions/lispLexer.ts'), dest: 'src/utils/actions/lispLexer.ts', }, { src: resolve('../templates/src/utils/actions/preParse_Action.ts'), dest: 'src/utils/actions/preParse_Action.ts', }, { src: resolve('../templates/src/utils/actions/preParse_Clicked.ts'), dest: 'src/utils/actions/preParse_Clicked.ts', }, { src: resolve('../templates/src/utils/actions/preParse_Impression.ts'), dest: 'src/utils/actions/preParse_Impression.ts', }, { src: resolve('../templates/src/utils/actions/preParse_Bunny.ts'), dest: 'src/utils/actions/preParse_Bunny.ts', }, { src: resolve('../templates/src/utils/backend.ts'), dest: 'src/utils/backend.ts', }, { src: resolve('../templates/src/utils/api.ts'), dest: 'src/utils/api.ts', }, { src: resolve('../templates/src/utils/api/brandConfig.ts'), dest: 'src/utils/api/brandConfig.ts', }, { src: resolve('../templates/src/utils/auth.ts'), dest: 'src/utils/auth.ts', }, { src: resolve('../templates/src/utils/helpers.ts'), dest: 'src/utils/helpers.ts', }, { src: resolve('../templates/src/utils/useInterval.ts'), dest: 'src/utils/useInterval.ts', }, { src: resolve('../templates/src/utils/profileStorage.ts'), dest: 'src/utils/profileStorage.ts', }, { src: resolve('../templates/src/utils/api/fileHelpers.ts'), dest: 'src/utils/api/fileHelpers.ts', }, { src: resolve('../templates/src/utils/api/brandHelpers.ts'), dest: 'src/utils/api/brandHelpers.ts', }, { src: resolve('../templates/src/utils/api/advancedConfig.ts'), dest: 'src/utils/api/advancedConfig.ts', }, { src: resolve('../templates/src/utils/api/advancedHelpers.ts'), dest: 'src/utils/api/advancedHelpers.ts', }, { src: resolve('../templates/src/utils/api/resourceConfig.ts'), dest: 'src/utils/api/resourceConfig.ts', }, { src: resolve('../templates/src/utils/api/resourceHelpers.ts'), dest: 'src/utils/api/resourceHelpers.ts', }, { src: resolve('../templates/src/utils/api/menuHelpers.ts'), dest: 'src/utils/api/menuHelpers.ts', }, { src: resolve('../templates/src/utils/api/menuConfig.ts'), dest: 'src/utils/api/menuConfig.ts', }, { src: resolve('../templates/src/utils/api/beliefHelpers.ts'), dest: 'src/utils/api/beliefHelpers.ts', }, { src: resolve('../templates/src/utils/api/beliefConfig.ts'), dest: 'src/utils/api/beliefConfig.ts', }, // Layouts { src: resolve('../templates/src/layouts/Layout.astro'), dest: 'src/layouts/Layout.astro', }, // Pages { src: resolve('../templates/src/pages/[...slug].astro'), dest: 'src/pages/[...slug].astro', }, { src: resolve('../templates/src/pages/context/[...contextSlug].astro'), dest: 'src/pages/context/[...contextSlug].astro', }, { src: resolve( '../templates/src/pages/context/[...contextSlug]/edit.astro' ), dest: 'src/pages/context/[...contextSlug]/edit.astro', }, { src: resolve('../templates/src/pages/storykeep.astro'), dest: 'src/pages/storykeep.astro', }, { src: resolve('../templates/src/pages/storykeep/init.astro'), dest: 'src/pages/storykeep/init.astro', }, { src: resolve('../templates/src/pages/storykeep/content.astro'), dest: 'src/pages/storykeep/content.astro', }, { src: resolve('../templates/src/pages/storykeep/branding.astro'), dest: 'src/pages/storykeep/branding.astro', }, { src: resolve('../templates/src/pages/storykeep/advanced.astro'), dest: 'src/pages/storykeep/advanced.astro', }, { src: resolve('../templates/src/pages/maint.astro'), dest: 'src/pages/maint.astro', }, { src: resolve('../templates/src/pages/404.astro'), dest: 'src/pages/404.astro', }, { src: resolve('../templates/src/pages/llms.txt.ts'), dest: 'src/pages/llms.txt.ts', }, { src: resolve('../templates/src/pages/robots.txt.ts'), dest: 'src/pages/robots.txt.ts', }, { src: resolve('../templates/src/pages/sitemap.xml.ts'), dest: 'src/pages/sitemap.xml.ts', }, { src: resolve('../templates/src/pages/api/tailwind.ts'), dest: 'src/pages/api/tailwind.ts', }, // Authentication Pages { src: resolve('../templates/src/pages/storykeep/login.astro'), dest: 'src/pages/storykeep/login.astro', }, { src: resolve('../templates/src/pages/storykeep/logout.astro'), dest: 'src/pages/storykeep/logout.astro', }, { src: resolve('../templates/src/pages/storykeep/profile.astro'), dest: 'src/pages/storykeep/profile.astro', }, // API Routes { src: resolve('../templates/src/pages/api/auth/profile.ts'), dest: 'src/pages/api/auth/profile.ts', }, { src: resolve('../templates/src/pages/api/auth/decode.ts'), dest: 'src/pages/api/auth/decode.ts', }, { src: resolve('../templates/src/pages/api/auth/login.ts'), dest: 'src/pages/api/auth/login.ts', }, { src: resolve('../templates/src/pages/api/auth/logout.ts'), dest: 'src/pages/api/auth/logout.ts', }, { src: resolve('../templates/src/pages/api/orphan-analysis.ts'), dest: 'src/pages/api/orphan-analysis.ts', }, // Base Components { src: resolve('../templates/src/components/Header.astro'), dest: 'src/components/Header.astro', }, { src: resolve('../templates/src/components/Footer.astro'), dest: 'src/components/Footer.astro', }, { src: resolve('../templates/src/components/Menu.tsx'), dest: 'src/components/Menu.tsx', }, { src: resolve('../templates/src/components/Fragment.astro'), dest: 'src/components/Fragment.astro', }, // Search Components { src: resolve('../templates/src/components/search/SearchWrapper.tsx'), dest: 'src/components/search/SearchWrapper.tsx', }, { src: resolve('../templates/src/components/search/SearchModal.tsx'), dest: 'src/components/search/SearchModal.tsx', }, { src: resolve('../templates/src/components/search/SearchResults.tsx'), dest: 'src/components/search/SearchResults.tsx', }, { src: resolve('../templates/src/hooks/useSearch.ts'), dest: 'src/hooks/useSearch.ts', }, // Profile Components { src: resolve('../templates/src/components/profile/ProfileConsent.tsx'), dest: 'src/components/profile/ProfileConsent.tsx', }, { src: resolve('../templates/src/components/profile/ProfileSwitch.tsx'), dest: 'src/components/profile/ProfileSwitch.tsx', }, { src: resolve('../templates/src/components/profile/ProfileCreate.tsx'), dest: 'src/components/profile/ProfileCreate.tsx', }, { src: resolve('../templates/src/components/profile/ProfileEdit.tsx'), dest: 'src/components/profile/ProfileEdit.tsx', }, { src: resolve('../templates/src/components/profile/ProfileUnlock.tsx'), dest: 'src/components/profile/ProfileUnlock.tsx', }, // Form System { src: resolve('../templates/src/hooks/useFormState.ts'), dest: 'src/hooks/useFormState.ts', }, { src: resolve('../templates/src/constants/brandThemes.ts'), dest: 'src/constants/brandThemes.ts', }, { src: resolve('../templates/src/types/formTypes.ts'), dest: 'src/types/formTypes.ts', }, { src: resolve('../templates/src/components/form/ParagraphArrayInput.tsx'), dest: 'src/components/form/ParagraphArrayInput.tsx', }, { src: resolve('../templates/src/components/form/StringInput.tsx'), dest: 'src/components/form/StringInput.tsx', }, { src: resolve('../templates/src/components/form/StringArrayInput.tsx'), dest: 'src/components/form/StringArrayInput.tsx', }, { src: resolve('../templates/src/components/form/BooleanToggle.tsx'), dest: 'src/components/form/BooleanToggle.tsx', }, { src: resolve('../templates/src/components/form/EnumSelect.tsx'), dest: 'src/components/form/EnumSelect.tsx', }, { src: resolve('../templates/src/components/form/ColorPicker.tsx'), dest: 'src/components/form/ColorPicker.tsx', }, { src: resolve('../templates/src/components/form/FileUpload.tsx'), dest: 'src/components/form/FileUpload.tsx', }, { src: resolve('../templates/src/components/form/NumberInput.tsx'), dest: 'src/components/form/NumberInput.tsx', }, { src: resolve('../templates/src/components/form/DateTimeInput.tsx'), dest: 'src/components/form/DateTimeInput.tsx', }, { src: resolve('../templates/src/components/form/UnsavedChangesBar.tsx'), dest: 'src/components/form/UnsavedChangesBar.tsx', }, { src: resolve('../templates/src/components/form/ActionBuilderField.tsx'), dest: 'src/components/form/ActionBuilderField.tsx', }, { src: resolve('../templates/src/components/form/MagicPathBuilder.tsx'), dest: 'src/components/form/MagicPathBuilder.tsx', }, { src: resolve( '../templates/src/components/form/ActionBuilderSlugSelector.tsx' ), dest: 'src/components/form/ActionBuilderSlugSelector.tsx', }, // Brand Form Components { src: resolve( '../templates/src/components/form/brand/BrandColorsSection.tsx' ), dest: 'src/components/form/brand/BrandColorsSection.tsx', }, { src: resolve( '../templates/src/components/form/brand/BrandAssetsSection.tsx' ), dest: 'src/components/form/brand/BrandAssetsSection.tsx', }, { src: resolve( '../templates/src/components/form/brand/SiteConfigSection.tsx' ), dest: 'src/components/form/brand/SiteConfigSection.tsx', }, { src: resolve( '../templates/src/components/form/brand/SocialLinksSection.tsx' ), dest: 'src/components/form/brand/SocialLinksSection.tsx', }, { src: resolve('../templates/src/components/form/brand/SEOSection.tsx'), dest: 'src/components/form/brand/SEOSection.tsx', }, // Advanced Configuration Components { src: resolve( '../templates/src/components/form/advanced/AuthConfigSection.tsx' ), dest: 'src/components/form/advanced/AuthConfigSection.tsx', }, { src: resolve( '../templates/src/components/form/advanced/APIConfigSection.tsx' ), dest: 'src/components/form/advanced/APIConfigSection.tsx', }, // StoryKeep Dashboard Components { src: resolve( '../templates/src/components/storykeep/StoryKeepBackdrop.astro' ), dest: 'src/components/storykeep/StoryKeepBackdrop.astro', }, { src: resolve('../templates/src/components/storykeep/Dashboard.tsx'), dest: 'src/components/storykeep/Dashboard.tsx', }, { src: resolve( '../templates/src/components/storykeep/state/BrandingWrapper.tsx' ), dest: 'src/components/storykeep/state/BrandingWrapper.tsx', }, { src: resolve( '../templates/src/components/storykeep/state/FetchAnalytics.tsx' ), dest: 'src/components/storykeep/state/FetchAnalytics.tsx', }, { src: resolve('../templates/src/components/storykeep/widgets/Wizard.tsx'), dest: 'src/components/storykeep/widgets/Wizard.tsx', }, { src: resolve( '../templates/src/components/storykeep/Dashboard_Advanced.tsx' ), dest: 'src/components/storykeep/Dashboard_Advanced.tsx', }, { src: resolve( '../templates/src/components/storykeep/Dashboard_Analytics.tsx' ), dest: 'src/components/storykeep/Dashboard_Analytics.tsx', }, { src: resolve( '../templates/src/components/storykeep/Dashboard_Branding.tsx' ), dest: 'src/components/storykeep/Dashboard_Branding.tsx', }, { src: resolve( '../templates/src/components/storykeep/Dashboard_Content.tsx' ), dest: 'src/components/storykeep/Dashboard_Content.tsx', }, { src: resolve( '../templates/src/components/storykeep/Dashboard_Activity.tsx' ), dest: 'src/components/storykeep/Dashboard_Activity.tsx', }, { src: resolve( '../templates/src/components/storykeep/widgets/ResponsiveLine.tsx' ), dest: 'src/components/storykeep/widgets/ResponsiveLine.tsx', }, // Content Management Components { src: resolve( '../templates/src/components/storykeep/controls/content/ManageContent.tsx' ), dest: 'src/components/storykeep/controls/content/ManageContent.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/ContentSummary.tsx' ), dest: 'src/components/storykeep/controls/content/ContentSummary.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/StoryFragmentTable.tsx' ), dest: 'src/components/storykeep/controls/content/StoryFragmentTable.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/ContentBrowser.tsx' ), dest: 'src/components/storykeep/controls/content/ContentBrowser.tsx', }, { src: resolve( '../templates/src/components/form/content/ContentSummary.tsx' ), dest: 'src/components/form/content/ContentSummary.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/UsageCell.tsx' ), dest: 'src/components/storykeep/controls/UsageCell.tsx', }, // Menu Management Components { src: resolve( '../templates/src/components/storykeep/controls/content/MenuTable.tsx' ), dest: 'src/components/storykeep/controls/content/MenuTable.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/MenuForm.tsx' ), dest: 'src/components/storykeep/controls/content/MenuForm.tsx', }, // Resource Management Components { src: resolve( '../templates/src/components/storykeep/controls/content/ResourceBulkIngest.tsx' ), dest: 'src/components/storykeep/controls/content/ResourceBulkIngest.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/ResourceForm.tsx' ), dest: 'src/components/storykeep/controls/content/ResourceForm.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/ResourceTable.tsx' ), dest: 'src/components/storykeep/controls/content/ResourceTable.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/KnownResourceTable.tsx' ), dest: 'src/components/storykeep/controls/content/KnownResourceTable.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/KnownResourceForm.tsx' ), dest: 'src/components/storykeep/controls/content/KnownResourceForm.tsx', }, // Belief Management Components { src: resolve( '../templates/src/components/storykeep/controls/content/BeliefTable.tsx' ), dest: 'src/components/storykeep/controls/content/BeliefTable.tsx', }, { src: resolve( '../templates/src/components/storykeep/controls/content/BeliefForm.tsx' ), dest: 'src/components/storykeep/controls/content/BeliefForm.tsx', }, // CodeHook Components { src: resolve('../templates/src/components/codehooks/EpinetWrapper.tsx'), dest: 'src/components/codehooks/EpinetWrapper.tsx', }, { src: resolve( '../templates/src/components/codehooks/EpinetDurationSelector.tsx' ), dest: 'src/components/codehooks/EpinetDurationSelector.tsx', }, { src: resolve('../templates/src/components/codehooks/EpinetTableView.tsx'), dest: 'src/components/codehooks/EpinetTableView.tsx', }, { src: resolve('../templates/src/components/codehooks/SankeyDiagram.tsx'), dest: 'src/components/codehooks/SankeyDiagram.tsx', }, { src: resolve( '../templates/src/components/codehooks/FeaturedContent.astro' ), dest: 'src/components/codehooks/FeaturedContent.astro', }, { src: resolve( '../templates/src/components/codehooks/FeaturedContentSetup.tsx' ), dest: 'src/components/codehooks/FeaturedContentSetup.tsx', }, { src: resolve('../templates/src/components/codehooks/ListContent.astro'), dest: 'src/components/codehooks/ListContent.astro', }, { src: resolve( '../templates/src/components/codehooks/ListContentSetup.tsx' ), dest: 'src/components/codehooks/ListContentSetup.tsx', }, { src: resolve( '../templates/src/components/codehooks/BunnyVideoWrapper.astro' ), dest: 'src/components/codehooks/BunnyVideoWrapper.astro', }, { src: resolve('../templates/src/components/codehooks/BunnyVideoSetup.tsx'), dest: 'src/components/codehooks/BunnyVideoSetup.tsx', }, // Widget Components { src: resolve('../templates/src/components/widgets/Impression.tsx'), dest: 'src/components/widgets/Impression.tsx', }, { src: resolve('../templates/src/components/widgets/ImpressionWrapper.tsx'), dest: 'src/components/widgets/ImpressionWrapper.tsx', }, { src: resolve('../templates/src/components/widgets/BunnyVideoHero.astro'), dest: 'src/components/widgets/BunnyVideoHero.astro', }, // Server Scripts { src: resolve('../templates/src/lib/storyData.ts'), dest: 'src/lib/storyData.ts', }, { src: resolve('../templates/src/lib/session.ts'), dest: 'src/lib/session.ts', }, // Client Scripts { src: resolve('../templates/src/client/htmx.min.js'), dest: 'public/client/htmx.min.js', }, { src: resolve('../templates/src/client/sse.js'), dest: 'public/client/sse.js', }, { src: resolve('../templates/src/client/belief-events.js'), dest: 'public/client/belief-events.js', }, { src: resolve('../templates/src/client/analytics-events.js'), dest: 'public/client/analytics-events.js', }, // StoryKeep Editor (add new section) { src: resolve('../templates/src/pages/[...slug]/edit.astro'), dest: 'src/pages/[...slug]/edit.astro', }, { src: resolve('../templates/src/utils/layout.ts'), dest: 'src/utils/layout.ts', }, // StoryKeep Components { src: resolve('../templates/src/components/edit/Header.tsx'), dest: 'src/components/edit/Header.tsx', }, { src: resolve('../templates/src/components/edit/ToolMode.tsx'), dest: 'src/components/edit/ToolMode.tsx', }, { src: resolve('../templates/src/components/edit/ToolBar.tsx'), dest: 'src/components/edit/ToolBar.tsx', }, { src: resolve('../templates/src/components/edit/SettingsPanel.tsx'), dest: 'src/components/edit/SettingsPanel.tsx', }, { src: resolve('../templates/src/components/edit/PanelSwitch.tsx'), dest: 'src/components/edit/PanelSwitch.tsx', }, { src: resolve('../templates/src/components/edit/state/SaveModal.tsx'), dest: 'src/components/edit/state/SaveModal.tsx', }, { src: resolve('../templates/src/components/edit/state/StylesMemory.tsx'), dest: 'src/components/edit/state/StylesMemory.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleBreakPanel.tsx' ), dest: 'src/components/edit/panels/StyleBreakPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleCodeHookPanel.tsx' ), dest: 'src/components/edit/panels/StyleCodeHookPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleElementPanel_add.tsx' ), dest: 'src/components/edit/panels/StyleElementPanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleElementPanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleElementPanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleElementPanel.tsx' ), dest: 'src/components/edit/panels/StyleElementPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleElementPanel_update.tsx' ), dest: 'src/components/edit/panels/StyleElementPanel_update.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleImagePanel_add.tsx' ), dest: 'src/components/edit/panels/StyleImagePanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleImagePanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleImagePanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleImagePanel.tsx' ), dest: 'src/components/edit/panels/StyleImagePanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleImagePanel_update.tsx' ), dest: 'src/components/edit/panels/StyleImagePanel_update.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLiElementPanel_add.tsx' ), dest: 'src/components/edit/panels/StyleLiElementPanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLiElementPanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleLiElementPanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLiElementPanel.tsx' ), dest: 'src/components/edit/panels/StyleLiElementPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLiElementPanel_update.tsx' ), dest: 'src/components/edit/panels/StyleLiElementPanel_update.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLinkPanel_add.tsx' ), dest: 'src/components/edit/panels/StyleLinkPanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLinkPanel_config.tsx' ), dest: 'src/components/edit/panels/StyleLinkPanel_config.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLinkPanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleLinkPanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLinkPanel.tsx' ), dest: 'src/components/edit/panels/StyleLinkPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleLinkPanel_update.tsx' ), dest: 'src/components/edit/panels/StyleLinkPanel_update.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleParentPanel_add.tsx' ), dest: 'src/components/edit/panels/StyleParentPanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleParentPanel_deleteLayer.tsx' ), dest: 'src/components/edit/panels/StyleParentPanel_deleteLayer.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleParentPanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleParentPanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleParentPanel.tsx' ), dest: 'src/components/edit/panels/StyleParentPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleParentPanel_update.tsx' ), dest: 'src/components/edit/panels/StyleParentPanel_update.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleWidgetPanel_add.tsx' ), dest: 'src/components/edit/panels/StyleWidgetPanel_add.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleWidgetPanel_config.tsx' ), dest: 'src/components/edit/panels/StyleWidgetPanel_config.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleWidgetPanel_remove.tsx' ), dest: 'src/components/edit/panels/StyleWidgetPanel_remove.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleWidgetPanel.tsx' ), dest: 'src/components/edit/panels/StyleWidgetPanel.tsx', }, { src: resolve( '../templates/src/components/edit/panels/StyleWidgetPanel_update.tsx' ), dest: 'src/components/edit/panels/StyleWidgetPanel_update.tsx', }, // Styles { src: resolve('../templates/css/custom.css'), dest: 'public/styles/custom.css', }, { src: resolve('../templates/css/frontend.css'), dest: 'public/styles/frontend.css', }, { src: resolve('../templates/css/storykeep.css'), dest: 'public/styles/storykeep.css', }, // Fonts { src: resolve('../templates/fonts/Inter-Black.woff2'), dest: 'public/fonts/Inter-Black.woff2', }, { src: resolve('../templates/fonts/Inter-Bold.woff2'), dest: 'public/fonts/Inter-Bold.woff2', }, { src: resolve('../templates/fonts/Inter-Regular.woff2'), dest: 'public/fonts/Inter-Regular.woff2', }, // Brand Assets { src: resolve('../templates/brand/static.jpg'), dest: 'public/static.jpg', }, { src: resolve('../templates/brand/og.png'), dest: 'public/brand/og.png', }, { src: resolve('../templates/brand/oglogo.png'), dest: 'public/brand/oglogo.png', }, { src: resolve('../templates/brand/favicon.ico'), dest: 'public/brand/favicon.ico', }, { src: resolve('../templates/brand/logo.svg'), dest: 'public/brand/logo.svg', }, { src: resolve('../templates/brand/wordmark.svg'), dest: 'public/brand/wordmark.svg', }, // Artpack Assets - kCz { src: resolve('../templates/artpacks/kCz/captainBreakfast_1080px.webp'), dest: 'public/artpacks/kCz/captainBreakfast_1080px.webp', }, { src: resolve('../templates/artpacks/kCz/captainBreakfast_1920px.webp'), dest: 'public/artpacks/kCz/captainBreakfast_1920px.webp', }, { src: resolve('../templates/artpacks/kCz/captainBreakfast_600px.webp'), dest: 'public/artpacks/kCz/captainBreakfast_600px.webp', }, { src: resolve('../templates/artpacks/kCz/cleanDrips_1080px.webp'), dest: 'public/artpacks/kCz/cleanDrips_1080px.webp', }, { src: resolve('../templates/artpacks/kCz/cleanDrips_1920px.webp'), dest: 'public/artpacks/kCz/cleanDrips_1920px.webp', }, { src: resolve('../templates/artpacks/kCz/cleanDrips_600px.webp'), dest: 'public/artpacks/kCz/cleanDrips_600px.webp', }, { src: resolve('../templates/artpacks/kCz/crispwaves_1080px.webp'), dest: 'public/artpacks/kCz/crispwaves