mordoc 0.1.13 → 1.0.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 +7 -0
- package/bin/cli.js +24 -71
- package/dist/cli/asset-rewrite.d.ts +40 -0
- package/dist/cli/asset-rewrite.d.ts.map +1 -0
- package/dist/cli/asset-rewrite.js +67 -0
- package/dist/cli/asset-rewrite.js.map +1 -0
- package/dist/cli/build.d.ts +45 -15
- package/dist/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +186 -101
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/dev.d.ts +26 -14
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +116 -159
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/pagefind-indexer.d.ts +15 -0
- package/dist/cli/pagefind-indexer.d.ts.map +1 -0
- package/dist/cli/pagefind-indexer.js +68 -0
- package/dist/cli/pagefind-indexer.js.map +1 -0
- package/dist/cli/paths.d.ts +26 -0
- package/dist/cli/paths.d.ts.map +1 -0
- package/dist/cli/paths.js +32 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/ssg-runner.d.ts +58 -0
- package/dist/cli/ssg-runner.d.ts.map +1 -0
- package/dist/cli/ssg-runner.js +126 -0
- package/dist/cli/ssg-runner.js.map +1 -0
- package/dist/config/assets-loader.d.ts +11 -0
- package/dist/config/assets-loader.d.ts.map +1 -0
- package/dist/config/assets-loader.js +46 -0
- package/dist/config/assets-loader.js.map +1 -0
- package/dist/config/language-loader.d.ts +11 -0
- package/dist/config/language-loader.d.ts.map +1 -0
- package/dist/config/language-loader.js +61 -0
- package/dist/config/language-loader.js.map +1 -0
- package/dist/config/language.d.ts +11 -0
- package/dist/config/language.d.ts.map +1 -0
- package/dist/config/language.js +61 -0
- package/dist/config/language.js.map +1 -0
- package/dist/config/sidenav-loader.d.ts +14 -0
- package/dist/config/sidenav-loader.d.ts.map +1 -0
- package/dist/config/sidenav-loader.js +78 -0
- package/dist/config/sidenav-loader.js.map +1 -0
- package/dist/config/site-loader.d.ts +11 -0
- package/dist/config/site-loader.d.ts.map +1 -0
- package/dist/config/site-loader.js +72 -0
- package/dist/config/site-loader.js.map +1 -0
- package/dist/config/site.d.ts +11 -0
- package/dist/config/site.d.ts.map +1 -0
- package/dist/config/site.js +72 -0
- package/dist/config/site.js.map +1 -0
- package/dist/config/topnav-loader.d.ts +10 -0
- package/dist/config/topnav-loader.d.ts.map +1 -0
- package/dist/config/topnav-loader.js +78 -0
- package/dist/config/topnav-loader.js.map +1 -0
- package/dist/config/translations-loader.d.ts +7 -0
- package/dist/config/translations-loader.d.ts.map +1 -0
- package/dist/config/translations-loader.js +51 -0
- package/dist/config/translations-loader.js.map +1 -0
- package/dist/content/content-loader.d.ts +16 -0
- package/dist/content/content-loader.d.ts.map +1 -0
- package/dist/content/content-loader.js +126 -0
- package/dist/content/content-loader.js.map +1 -0
- package/dist/content/content-parser.d.ts +12 -0
- package/dist/content/content-parser.d.ts.map +1 -0
- package/dist/content/content-parser.js +54 -0
- package/dist/content/content-parser.js.map +1 -0
- package/dist/content/content-transformer.d.ts +17 -0
- package/dist/content/content-transformer.d.ts.map +1 -0
- package/dist/content/content-transformer.js +94 -0
- package/dist/content/content-transformer.js.map +1 -0
- package/dist/content/markdoc-config.d.ts +13 -0
- package/dist/content/markdoc-config.d.ts.map +1 -0
- package/dist/content/markdoc-config.js +210 -0
- package/dist/content/markdoc-config.js.map +1 -0
- package/dist/content/slug.d.ts +26 -0
- package/dist/content/slug.d.ts.map +1 -0
- package/dist/content/slug.js +31 -0
- package/dist/content/slug.js.map +1 -0
- package/dist/pipeline.d.ts +61 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +123 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/types/assets.d.ts +15 -0
- package/dist/types/assets.d.ts.map +1 -0
- package/dist/types/assets.js +2 -0
- package/dist/types/assets.js.map +1 -0
- package/dist/types/content.d.ts +114 -32
- package/dist/types/content.d.ts.map +1 -1
- package/dist/types/content.js +1 -6
- package/dist/types/content.js.map +1 -1
- package/dist/types/language.d.ts +9 -0
- package/dist/types/language.d.ts.map +1 -0
- package/dist/types/language.js +2 -0
- package/dist/types/language.js.map +1 -0
- package/dist/types/navigation.d.ts +24 -36
- package/dist/types/navigation.d.ts.map +1 -1
- package/dist/types/navigation.js +1 -6
- package/dist/types/navigation.js.map +1 -1
- package/dist/types/pipeline.d.ts +70 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/site.d.ts +20 -0
- package/dist/types/site.d.ts.map +1 -0
- package/dist/types/site.js +2 -0
- package/dist/types/site.js.map +1 -0
- package/dist/utils/lang-utils.d.ts +23 -0
- package/dist/utils/lang-utils.d.ts.map +1 -0
- package/dist/utils/lang-utils.js +40 -0
- package/dist/utils/lang-utils.js.map +1 -0
- package/dist/utils/paths.d.ts +25 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +31 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/vite/plugin.d.ts +93 -0
- package/dist/vite/plugin.d.ts.map +1 -0
- package/dist/vite/plugin.js +435 -0
- package/dist/vite/plugin.js.map +1 -0
- package/package.json +46 -61
- package/src/app/App.module.css +82 -0
- package/src/app/App.tsx +95 -0
- package/src/app/content/Content.module.css +357 -0
- package/src/app/content/Content.tsx +212 -0
- package/src/app/content/callout/Callout.module.css +110 -0
- package/src/app/content/callout/Callout.tsx +82 -0
- package/src/app/content/card/Card.module.css +146 -0
- package/src/app/content/card/Card.tsx +110 -0
- package/src/app/content/card/CardGrid.module.css +22 -0
- package/src/app/content/card/CardGrid.tsx +34 -0
- package/src/app/content/code-block/CodeBlock.module.css +237 -0
- package/src/app/content/code-block/CodeBlock.tsx +123 -0
- package/src/app/content/heading/Heading.module.css +52 -0
- package/src/app/content/heading/Heading.tsx +75 -0
- package/src/app/content/image/Image.module.css +113 -0
- package/src/app/content/image/Image.tsx +98 -0
- package/src/app/content/link/ContentLink.tsx +46 -0
- package/src/app/data-context.tsx +39 -0
- package/src/app/entry-server.tsx +58 -0
- package/src/app/footer/Footer.module.css +36 -0
- package/src/app/footer/Footer.tsx +28 -0
- package/src/app/globals.d.ts +40 -0
- package/src/app/header/Header.module.css +205 -0
- package/src/app/header/Header.tsx +188 -0
- package/src/app/header/LanguagePicker.module.css +97 -0
- package/src/app/header/LanguagePicker.tsx +174 -0
- package/src/app/header/SearchBar.module.css +92 -0
- package/src/app/header/SearchBar.tsx +37 -0
- package/src/app/header/SearchModal.module.css +185 -0
- package/src/app/header/SearchModal.tsx +245 -0
- package/src/app/header/Topnav.module.css +37 -0
- package/src/app/header/Topnav.tsx +30 -0
- package/src/app/index.css +119 -0
- package/src/app/index.html +13 -0
- package/src/app/landing/LandingPage.module.css +14 -0
- package/src/app/landing/LandingPage.tsx +62 -0
- package/src/app/landing/button/Button.module.css +37 -0
- package/src/app/landing/button/Button.tsx +50 -0
- package/src/app/landing/hero/Hero.module.css +108 -0
- package/src/app/landing/hero/Hero.tsx +81 -0
- package/src/app/landing/section/Section.module.css +100 -0
- package/src/app/landing/section/Section.tsx +61 -0
- package/src/app/lang-utils.ts +11 -0
- package/src/app/main.tsx +67 -0
- package/src/app/not-found/NotFound.module.css +92 -0
- package/src/app/not-found/NotFound.tsx +34 -0
- package/src/app/routes.tsx +86 -0
- package/src/app/sidenav/Sidenav.module.css +239 -0
- package/src/app/sidenav/Sidenav.tsx +182 -0
- package/src/app/skeleton/Skeleton.module.css +100 -0
- package/src/app/skeleton/Skeleton.tsx +75 -0
- package/src/app/toc/Toc.module.css +59 -0
- package/src/app/toc/Toc.tsx +77 -0
- package/src/app/tsconfig.json +18 -0
- package/src/app/virtual-modules.d.ts +74 -0
- package/dist/assets/fonts/inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
- package/dist/assets/fonts/inter/Inter-VariableFont_opsz,wght.ttf +0 -0
- package/dist/assets/fonts/inter/OFL.txt +0 -93
- package/dist/build/Builder.d.ts +0 -92
- package/dist/build/Builder.d.ts.map +0 -1
- package/dist/build/Builder.js +0 -394
- package/dist/build/Builder.js.map +0 -1
- package/dist/build/ClientBundler.d.ts +0 -48
- package/dist/build/ClientBundler.d.ts.map +0 -1
- package/dist/build/ClientBundler.js +0 -169
- package/dist/build/ClientBundler.js.map +0 -1
- package/dist/build/HtmlGenerator.d.ts +0 -46
- package/dist/build/HtmlGenerator.d.ts.map +0 -1
- package/dist/build/HtmlGenerator.js +0 -190
- package/dist/build/HtmlGenerator.js.map +0 -1
- package/dist/build/SearchIndexer.d.ts +0 -31
- package/dist/build/SearchIndexer.d.ts.map +0 -1
- package/dist/build/SearchIndexer.js +0 -116
- package/dist/build/SearchIndexer.js.map +0 -1
- package/dist/bundles/client.js +0 -126
- package/dist/cli/create-app.d.ts +0 -14
- package/dist/cli/create-app.d.ts.map +0 -1
- package/dist/cli/create-app.js +0 -241
- package/dist/cli/create-app.js.map +0 -1
- package/dist/client/App.d.ts +0 -17
- package/dist/client/App.d.ts.map +0 -1
- package/dist/client/App.js +0 -91
- package/dist/client/App.js.map +0 -1
- package/dist/client/contexts/ConfigContext.d.ts +0 -22
- package/dist/client/contexts/ConfigContext.d.ts.map +0 -1
- package/dist/client/contexts/ConfigContext.js +0 -27
- package/dist/client/contexts/ConfigContext.js.map +0 -1
- package/dist/client/contexts/ContentContext.d.ts +0 -31
- package/dist/client/contexts/ContentContext.d.ts.map +0 -1
- package/dist/client/contexts/ContentContext.js +0 -46
- package/dist/client/contexts/ContentContext.js.map +0 -1
- package/dist/client/contexts/SearchContext.d.ts +0 -38
- package/dist/client/contexts/SearchContext.d.ts.map +0 -1
- package/dist/client/contexts/SearchContext.js +0 -185
- package/dist/client/contexts/SearchContext.js.map +0 -1
- package/dist/client/contexts/ThemeContext.d.ts +0 -23
- package/dist/client/contexts/ThemeContext.d.ts.map +0 -1
- package/dist/client/contexts/ThemeContext.js +0 -53
- package/dist/client/contexts/ThemeContext.js.map +0 -1
- package/dist/client/hooks/useContent.d.ts +0 -12
- package/dist/client/hooks/useContent.d.ts.map +0 -1
- package/dist/client/hooks/useContent.js +0 -74
- package/dist/client/hooks/useContent.js.map +0 -1
- package/dist/client/hooks/useNavigation.d.ts +0 -15
- package/dist/client/hooks/useNavigation.d.ts.map +0 -1
- package/dist/client/hooks/useNavigation.js +0 -101
- package/dist/client/hooks/useNavigation.js.map +0 -1
- package/dist/client/hooks/useSearch.d.ts +0 -22
- package/dist/client/hooks/useSearch.d.ts.map +0 -1
- package/dist/client/hooks/useSearch.js +0 -64
- package/dist/client/hooks/useSearch.js.map +0 -1
- package/dist/client/main.d.ts +0 -5
- package/dist/client/main.d.ts.map +0 -1
- package/dist/client/main.js +0 -66
- package/dist/client/main.js.map +0 -1
- package/dist/components/Callout.d.ts +0 -9
- package/dist/components/Callout.d.ts.map +0 -1
- package/dist/components/Callout.js +0 -24
- package/dist/components/Callout.js.map +0 -1
- package/dist/components/Card.d.ts +0 -10
- package/dist/components/Card.d.ts.map +0 -1
- package/dist/components/Card.js +0 -15
- package/dist/components/Card.js.map +0 -1
- package/dist/components/CardGrid.d.ts +0 -8
- package/dist/components/CardGrid.d.ts.map +0 -1
- package/dist/components/CardGrid.js +0 -9
- package/dist/components/CardGrid.js.map +0 -1
- package/dist/components/CodeBlock.d.ts +0 -28
- package/dist/components/CodeBlock.d.ts.map +0 -1
- package/dist/components/CodeBlock.js +0 -80
- package/dist/components/CodeBlock.js.map +0 -1
- package/dist/components/ContentPage.d.ts +0 -9
- package/dist/components/ContentPage.d.ts.map +0 -1
- package/dist/components/ContentPage.js +0 -102
- package/dist/components/ContentPage.js.map +0 -1
- package/dist/components/Header.d.ts +0 -14
- package/dist/components/Header.d.ts.map +0 -1
- package/dist/components/Header.js +0 -30
- package/dist/components/Header.js.map +0 -1
- package/dist/components/Heading.d.ts +0 -16
- package/dist/components/Heading.d.ts.map +0 -1
- package/dist/components/Heading.js +0 -31
- package/dist/components/Heading.js.map +0 -1
- package/dist/components/Image.d.ts +0 -8
- package/dist/components/Image.d.ts.map +0 -1
- package/dist/components/Image.js +0 -24
- package/dist/components/Image.js.map +0 -1
- package/dist/components/Layout.d.ts +0 -14
- package/dist/components/Layout.d.ts.map +0 -1
- package/dist/components/Layout.js +0 -32
- package/dist/components/Layout.js.map +0 -1
- package/dist/components/MarkdocRenderer.d.ts +0 -15
- package/dist/components/MarkdocRenderer.d.ts.map +0 -1
- package/dist/components/MarkdocRenderer.js +0 -73
- package/dist/components/MarkdocRenderer.js.map +0 -1
- package/dist/components/MobileMenu.d.ts +0 -14
- package/dist/components/MobileMenu.d.ts.map +0 -1
- package/dist/components/MobileMenu.js +0 -45
- package/dist/components/MobileMenu.js.map +0 -1
- package/dist/components/PageNavigation.d.ts +0 -9
- package/dist/components/PageNavigation.d.ts.map +0 -1
- package/dist/components/PageNavigation.js +0 -23
- package/dist/components/PageNavigation.js.map +0 -1
- package/dist/components/SearchModal.d.ts +0 -9
- package/dist/components/SearchModal.d.ts.map +0 -1
- package/dist/components/SearchModal.js +0 -74
- package/dist/components/SearchModal.js.map +0 -1
- package/dist/components/SideNav.d.ts +0 -9
- package/dist/components/SideNav.d.ts.map +0 -1
- package/dist/components/SideNav.js +0 -66
- package/dist/components/SideNav.js.map +0 -1
- package/dist/components/TableOfContents.d.ts +0 -10
- package/dist/components/TableOfContents.d.ts.map +0 -1
- package/dist/components/TableOfContents.js +0 -151
- package/dist/components/TableOfContents.js.map +0 -1
- package/dist/config/ConfigLoader.d.ts +0 -50
- package/dist/config/ConfigLoader.d.ts.map +0 -1
- package/dist/config/ConfigLoader.js +0 -214
- package/dist/config/ConfigLoader.js.map +0 -1
- package/dist/config/StyleCompiler.d.ts +0 -17
- package/dist/config/StyleCompiler.d.ts.map +0 -1
- package/dist/config/StyleCompiler.js +0 -116
- package/dist/config/StyleCompiler.js.map +0 -1
- package/dist/config/ThemeGenerator.d.ts +0 -14
- package/dist/config/ThemeGenerator.d.ts.map +0 -1
- package/dist/config/ThemeGenerator.js +0 -129
- package/dist/config/ThemeGenerator.js.map +0 -1
- package/dist/content/ContentLoader.d.ts +0 -70
- package/dist/content/ContentLoader.d.ts.map +0 -1
- package/dist/content/ContentLoader.js +0 -146
- package/dist/content/ContentLoader.js.map +0 -1
- package/dist/content/ContentProcessor.d.ts +0 -84
- package/dist/content/ContentProcessor.d.ts.map +0 -1
- package/dist/content/ContentProcessor.js +0 -380
- package/dist/content/ContentProcessor.js.map +0 -1
- package/dist/content/RouteManager.d.ts +0 -69
- package/dist/content/RouteManager.d.ts.map +0 -1
- package/dist/content/RouteManager.js +0 -143
- package/dist/content/RouteManager.js.map +0 -1
- package/dist/styles/components/callout.d.ts +0 -11
- package/dist/styles/components/callout.d.ts.map +0 -1
- package/dist/styles/components/callout.js +0 -87
- package/dist/styles/components/callout.js.map +0 -1
- package/dist/styles/components/card.d.ts +0 -11
- package/dist/styles/components/card.d.ts.map +0 -1
- package/dist/styles/components/card.js +0 -179
- package/dist/styles/components/card.js.map +0 -1
- package/dist/styles/components/codeblock.d.ts +0 -11
- package/dist/styles/components/codeblock.d.ts.map +0 -1
- package/dist/styles/components/codeblock.js +0 -251
- package/dist/styles/components/codeblock.js.map +0 -1
- package/dist/styles/components/content.d.ts +0 -11
- package/dist/styles/components/content.d.ts.map +0 -1
- package/dist/styles/components/content.js +0 -197
- package/dist/styles/components/content.js.map +0 -1
- package/dist/styles/components/fonts.d.ts +0 -11
- package/dist/styles/components/fonts.d.ts.map +0 -1
- package/dist/styles/components/fonts.js +0 -34
- package/dist/styles/components/fonts.js.map +0 -1
- package/dist/styles/components/header.d.ts +0 -11
- package/dist/styles/components/header.d.ts.map +0 -1
- package/dist/styles/components/header.js +0 -293
- package/dist/styles/components/header.js.map +0 -1
- package/dist/styles/components/heading.d.ts +0 -11
- package/dist/styles/components/heading.d.ts.map +0 -1
- package/dist/styles/components/heading.js +0 -115
- package/dist/styles/components/heading.js.map +0 -1
- package/dist/styles/components/layout.d.ts +0 -11
- package/dist/styles/components/layout.d.ts.map +0 -1
- package/dist/styles/components/layout.js +0 -79
- package/dist/styles/components/layout.js.map +0 -1
- package/dist/styles/components/mobilemenu.d.ts +0 -11
- package/dist/styles/components/mobilemenu.d.ts.map +0 -1
- package/dist/styles/components/mobilemenu.js +0 -112
- package/dist/styles/components/mobilemenu.js.map +0 -1
- package/dist/styles/components/reset.d.ts +0 -11
- package/dist/styles/components/reset.d.ts.map +0 -1
- package/dist/styles/components/reset.js +0 -131
- package/dist/styles/components/reset.js.map +0 -1
- package/dist/styles/components/searchmodal.d.ts +0 -11
- package/dist/styles/components/searchmodal.d.ts.map +0 -1
- package/dist/styles/components/searchmodal.js +0 -333
- package/dist/styles/components/searchmodal.js.map +0 -1
- package/dist/styles/components/sidenav.d.ts +0 -11
- package/dist/styles/components/sidenav.d.ts.map +0 -1
- package/dist/styles/components/sidenav.js +0 -212
- package/dist/styles/components/sidenav.js.map +0 -1
- package/dist/styles/components/toc.d.ts +0 -11
- package/dist/styles/components/toc.d.ts.map +0 -1
- package/dist/styles/components/toc.js +0 -120
- package/dist/styles/components/toc.js.map +0 -1
- package/dist/styles/components/typography.d.ts +0 -11
- package/dist/styles/components/typography.d.ts.map +0 -1
- package/dist/styles/components/typography.js +0 -248
- package/dist/styles/components/typography.js.map +0 -1
- package/dist/styles/components/utility.d.ts +0 -11
- package/dist/styles/components/utility.d.ts.map +0 -1
- package/dist/styles/components/utility.js +0 -231
- package/dist/styles/components/utility.js.map +0 -1
- package/dist/styles/types.d.ts +0 -79
- package/dist/styles/types.d.ts.map +0 -1
- package/dist/styles/types.js +0 -7
- package/dist/styles/types.js.map +0 -1
- package/dist/styles/utils.d.ts +0 -21
- package/dist/styles/utils.d.ts.map +0 -1
- package/dist/styles/utils.js +0 -50
- package/dist/styles/utils.js.map +0 -1
- package/dist/styles/variables/main.d.ts +0 -15
- package/dist/styles/variables/main.d.ts.map +0 -1
- package/dist/styles/variables/main.js +0 -116
- package/dist/styles/variables/main.js.map +0 -1
- package/dist/types/config.d.ts +0 -43
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -7
- package/dist/types/config.js.map +0 -1
- package/dist/utils/language-utils.d.ts +0 -41
- package/dist/utils/language-utils.d.ts.map +0 -1
- package/dist/utils/language-utils.js +0 -79
- package/dist/utils/language-utils.js.map +0 -1
- package/dist/utils/slugify.d.ts +0 -20
- package/dist/utils/slugify.d.ts.map +0 -1
- package/dist/utils/slugify.js +0 -44
- package/dist/utils/slugify.js.map +0 -1
- package/templates/default/config/favicon.ico +0 -0
- package/templates/default/config/logo-dark.png +0 -0
- package/templates/default/config/logo.png +0 -0
- package/templates/default/config/sidenav.yaml +0 -36
- package/templates/default/config/site.json +0 -16
- package/templates/default/config/styles/main.json +0 -6
- package/templates/default/config/styles/typography.json +0 -6
- package/templates/default/content/en/changelog.md +0 -35
- package/templates/default/content/en/faq.md +0 -50
- package/templates/default/content/en/field-manual/engines.md +0 -59
- package/templates/default/content/en/field-manual/relativity.md +0 -46
- package/templates/default/content/en/field-manual/safety.md +0 -44
- package/templates/default/content/en/field-manual.md +0 -22
- package/templates/default/content/en/flight-school/navigation.md +0 -61
- package/templates/default/content/en/flight-school/primer.md +0 -64
- package/templates/default/content/en/flight-school.md +0 -48
- package/templates/default/content/en/index.md +0 -83
- package/templates/default/content/en/ship-systems/flux-sails.md +0 -33
- package/templates/default/content/en/ship-systems/photonic-core.md +0 -39
- package/templates/default/content/en/ship-systems.md +0 -25
- package/templates/default/package.json +0 -21
- package/templates/default/public/icons/academy.svg +0 -15
- package/templates/default/public/icons/manual.svg +0 -16
- package/templates/default/public/icons/relativity.svg +0 -16
- package/templates/default/public/icons/systems.svg +0 -14
- package/templates/default/public/icons/warning.svg +0 -14
- package/templates/default/public/images/flux-sails.svg +0 -33
- package/templates/default/public/images/photonic-core.svg +0 -44
- package/templates/default/public/images/starwake.svg +0 -49
package/dist/cli/dev.d.ts
CHANGED
|
@@ -1,20 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev command - Starts development server
|
|
3
|
-
* Serves the pre-built dist/ folder (MVP: no live reload, manual rebuild)
|
|
4
|
-
* Usage: mordoc dev [options]
|
|
5
|
-
*/
|
|
6
1
|
export interface DevCommandOptions {
|
|
7
|
-
|
|
2
|
+
/** Absolute path to the user's project root. */
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
/** Port to listen on. Defaults to Vite's default (5173). */
|
|
8
5
|
port?: number;
|
|
9
|
-
host?: string;
|
|
10
|
-
open?: boolean;
|
|
11
6
|
}
|
|
12
7
|
/**
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
8
|
+
* Starts the Mordoc dev server.
|
|
9
|
+
*
|
|
10
|
+
* Dev mode is pure client-side rendering — no SSR per request. Vite's HMR
|
|
11
|
+
* runtime handles CSS injection and module hot-reloading natively, and React
|
|
12
|
+
* mounts into the empty `#app` div via `createRoot`. This avoids the FOUC
|
|
13
|
+
* that arises from SSR HTML arriving before Vite's client runtime has injected
|
|
14
|
+
* styles, and sidesteps SSR/hydration mismatch noise during development.
|
|
15
|
+
*
|
|
16
|
+
* `document.title` is set by `Content.tsx` via `useEffect` once the route
|
|
17
|
+
* loader resolves — no server-side title injection needed in dev.
|
|
18
|
+
*
|
|
19
|
+
* The production `mordoc build` path still runs full SSR + SSG: `entry-server.tsx`
|
|
20
|
+
* and the static-HTML output are exercised at build time.
|
|
21
|
+
*
|
|
22
|
+
* Per-request flow:
|
|
23
|
+
* 1. Read the raw `index.html` template from disk (re-read each request so
|
|
24
|
+
* edits to the shell are picked up without a restart).
|
|
25
|
+
* 2. `vite.transformIndexHtml` injects the HMR client and any plugin
|
|
26
|
+
* transforms (e.g. React refresh preamble).
|
|
27
|
+
* 3. Replace `<!--ssr-outlet-->` with empty string — React renders the full
|
|
28
|
+
* app client-side via `createRoot`.
|
|
29
|
+
* 4. Send response.
|
|
18
30
|
*/
|
|
19
|
-
export declare function
|
|
31
|
+
export declare function runDevCommand(options: DevCommandOptions): Promise<void>;
|
|
20
32
|
//# sourceMappingURL=dev.d.ts.map
|
package/dist/cli/dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+F7E"}
|
package/dist/cli/dev.js
CHANGED
|
@@ -1,169 +1,126 @@
|
|
|
1
|
-
|
|
1
|
+
import { createServer } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import fs from 'node:fs/promises';
|
|
5
|
+
import { mordocVitePlugin } from '../vite/plugin.js';
|
|
6
|
+
import { getAppRoot, getPackageRoot } from '../utils/paths.js';
|
|
7
|
+
/** Markers in `index.html` replaced at request time. */
|
|
8
|
+
const SSR_LANG_MARKER = '<!--ssr-lang-->';
|
|
9
|
+
const SSR_HEAD_MARKER = '<!--ssr-head-->';
|
|
10
|
+
const SSR_OUTLET_MARKER = '<!--ssr-outlet-->';
|
|
2
11
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
12
|
+
* Starts the Mordoc dev server.
|
|
13
|
+
*
|
|
14
|
+
* Dev mode is pure client-side rendering — no SSR per request. Vite's HMR
|
|
15
|
+
* runtime handles CSS injection and module hot-reloading natively, and React
|
|
16
|
+
* mounts into the empty `#app` div via `createRoot`. This avoids the FOUC
|
|
17
|
+
* that arises from SSR HTML arriving before Vite's client runtime has injected
|
|
18
|
+
* styles, and sidesteps SSR/hydration mismatch noise during development.
|
|
19
|
+
*
|
|
20
|
+
* `document.title` is set by `Content.tsx` via `useEffect` once the route
|
|
21
|
+
* loader resolves — no server-side title injection needed in dev.
|
|
22
|
+
*
|
|
23
|
+
* The production `mordoc build` path still runs full SSR + SSG: `entry-server.tsx`
|
|
24
|
+
* and the static-HTML output are exercised at build time.
|
|
25
|
+
*
|
|
26
|
+
* Per-request flow:
|
|
27
|
+
* 1. Read the raw `index.html` template from disk (re-read each request so
|
|
28
|
+
* edits to the shell are picked up without a restart).
|
|
29
|
+
* 2. `vite.transformIndexHtml` injects the HMR client and any plugin
|
|
30
|
+
* transforms (e.g. React refresh preamble).
|
|
31
|
+
* 3. Replace `<!--ssr-outlet-->` with empty string — React renders the full
|
|
32
|
+
* app client-side via `createRoot`.
|
|
33
|
+
* 4. Send response.
|
|
6
34
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
export async function runDevCommand(options) {
|
|
36
|
+
const { projectRoot, port } = options;
|
|
37
|
+
const appRoot = getAppRoot();
|
|
38
|
+
const templatePath = path.join(appRoot, 'index.html');
|
|
39
|
+
const server = await createServer({
|
|
40
|
+
configFile: false,
|
|
41
|
+
root: appRoot,
|
|
42
|
+
publicDir: path.join(projectRoot, 'public'),
|
|
43
|
+
appType: 'custom',
|
|
44
|
+
plugins: [
|
|
45
|
+
react(),
|
|
46
|
+
mordocVitePlugin({ projectRoot }),
|
|
47
|
+
],
|
|
48
|
+
server: {
|
|
49
|
+
port,
|
|
50
|
+
fs: {
|
|
51
|
+
allow: [getPackageRoot()],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
// Serve config/assets/* at /_assets/* — same URL shape as build output.
|
|
56
|
+
server.middlewares.use(async (req, res, next) => {
|
|
57
|
+
const url = (req.url ?? '').split('?')[0];
|
|
58
|
+
if (!url.startsWith('/_assets/'))
|
|
59
|
+
return next();
|
|
60
|
+
const filename = url.slice('/_assets/'.length);
|
|
61
|
+
if (!filename || filename.includes('/') || filename.includes('..'))
|
|
62
|
+
return next();
|
|
63
|
+
const filePath = path.join(projectRoot, 'config', 'assets', filename);
|
|
64
|
+
try {
|
|
65
|
+
const content = await fs.readFile(filePath);
|
|
66
|
+
const ext = path.extname(filename).slice(1).toLowerCase();
|
|
67
|
+
const mime = {
|
|
68
|
+
svg: 'image/svg+xml',
|
|
69
|
+
png: 'image/png',
|
|
70
|
+
jpg: 'image/jpeg',
|
|
71
|
+
jpeg: 'image/jpeg',
|
|
72
|
+
ico: 'image/x-icon',
|
|
73
|
+
gif: 'image/gif',
|
|
74
|
+
webp: 'image/webp',
|
|
75
|
+
};
|
|
76
|
+
res.setHeader('Content-Type', mime[ext] ?? 'application/octet-stream');
|
|
77
|
+
res.statusCode = 200;
|
|
78
|
+
res.end(content);
|
|
30
79
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
serve(req, res, () => {
|
|
43
|
-
// Fallback for 404s
|
|
44
|
-
res.statusCode = 404;
|
|
45
|
-
res.end('Not found');
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
// Start server
|
|
49
|
-
server.listen(port, host, () => {
|
|
50
|
-
console.log('\n🚀 Mordoc dev server started\n');
|
|
51
|
-
console.log(` Local: http://${host}:${port}`);
|
|
52
|
-
console.log(` Network: http://${getLocalIpAddress()}:${port}`);
|
|
53
|
-
console.log('\n📝 Note: This is serving the pre-built dist/ folder.');
|
|
54
|
-
console.log(' Run "mordoc build" to rebuild after making changes.\n');
|
|
55
|
-
console.log('Press Ctrl+C to stop the server');
|
|
56
|
-
});
|
|
57
|
-
// Handle server errors
|
|
58
|
-
server.on('error', (error) => {
|
|
59
|
-
if (error.code === 'EADDRINUSE') {
|
|
60
|
-
console.error(`❌ Error: Port ${port} is already in use`);
|
|
61
|
-
console.error(`Try a different port: mordoc dev --port ${port + 1}`);
|
|
80
|
+
catch {
|
|
81
|
+
next();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
server.middlewares.use(async (req, res, next) => {
|
|
85
|
+
try {
|
|
86
|
+
const url = req.url ?? '/';
|
|
87
|
+
// Let Vite handle asset/module requests (anything with a file extension).
|
|
88
|
+
const lastSegment = url.split('?')[0]?.split('/').pop() ?? '';
|
|
89
|
+
if (lastSegment.includes('.')) {
|
|
90
|
+
return next();
|
|
62
91
|
}
|
|
63
|
-
|
|
64
|
-
|
|
92
|
+
const rawTemplate = await fs.readFile(templatePath, 'utf-8');
|
|
93
|
+
const transformed = await server.transformIndexHtml(url, rawTemplate);
|
|
94
|
+
const faviconPath = path.join(projectRoot, 'config', 'assets', 'favicon.ico');
|
|
95
|
+
let headHtml = '';
|
|
96
|
+
try {
|
|
97
|
+
await fs.access(faviconPath);
|
|
98
|
+
headHtml = '<link rel="icon" href="/_assets/favicon.ico">';
|
|
65
99
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
process.exit(0);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
console.error('\n❌ Failed to start dev server:');
|
|
84
|
-
console.error(error.message);
|
|
85
|
-
process.exit(1);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Parse command-line arguments for dev command
|
|
90
|
-
*/
|
|
91
|
-
function parseDevArgs(args) {
|
|
92
|
-
const options = {};
|
|
93
|
-
for (let i = 0; i < args.length; i++) {
|
|
94
|
-
const arg = args[i];
|
|
95
|
-
switch (arg) {
|
|
96
|
-
case '--port':
|
|
97
|
-
case '-p':
|
|
98
|
-
const portValue = parseInt(args[++i], 10);
|
|
99
|
-
if (isNaN(portValue)) {
|
|
100
|
-
console.error('Error: Invalid port number');
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
options.port = portValue;
|
|
104
|
-
break;
|
|
105
|
-
case '--host':
|
|
106
|
-
case '-h':
|
|
107
|
-
options.host = args[++i];
|
|
108
|
-
break;
|
|
109
|
-
case '--open':
|
|
110
|
-
case '-o':
|
|
111
|
-
options.open = true;
|
|
112
|
-
break;
|
|
113
|
-
case '--help':
|
|
114
|
-
showDevHelp();
|
|
115
|
-
process.exit(0);
|
|
116
|
-
break;
|
|
117
|
-
default:
|
|
118
|
-
if (arg.startsWith('-')) {
|
|
119
|
-
console.warn(`Warning: Unknown option ${arg}`);
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
100
|
+
catch {
|
|
101
|
+
// no favicon configured
|
|
102
|
+
}
|
|
103
|
+
// In dev, App.tsx's useEffect corrects document.documentElement.lang after hydration.
|
|
104
|
+
// We still replace the marker so the attribute value is valid (empty = unknown language).
|
|
105
|
+
const finalHtml = transformed
|
|
106
|
+
.replace(SSR_LANG_MARKER, '')
|
|
107
|
+
.replace(SSR_HEAD_MARKER, headHtml)
|
|
108
|
+
.replace(SSR_OUTLET_MARKER, '');
|
|
109
|
+
res.statusCode = 200;
|
|
110
|
+
res.setHeader('Content-Type', 'text/html');
|
|
111
|
+
res.end(finalHtml);
|
|
122
112
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Show help text for dev command
|
|
128
|
-
*/
|
|
129
|
-
function showDevHelp() {
|
|
130
|
-
console.log(`
|
|
131
|
-
mordoc dev - Start development server
|
|
132
|
-
|
|
133
|
-
Usage:
|
|
134
|
-
mordoc dev [options]
|
|
135
|
-
|
|
136
|
-
Options:
|
|
137
|
-
-p, --port <number> Port number (default: 3000)
|
|
138
|
-
-h, --host <host> Host address (default: localhost)
|
|
139
|
-
-o, --open Open browser automatically
|
|
140
|
-
--help Show this help message
|
|
141
|
-
|
|
142
|
-
Note:
|
|
143
|
-
The dev server serves the pre-built dist/ folder.
|
|
144
|
-
Run "mordoc build" first to generate the site.
|
|
145
|
-
Rebuild manually after making changes.
|
|
146
|
-
|
|
147
|
-
Examples:
|
|
148
|
-
mordoc dev
|
|
149
|
-
mordoc dev --port 8080
|
|
150
|
-
mordoc dev --host 0.0.0.0
|
|
151
|
-
`);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Get local IP address for network access
|
|
155
|
-
*/
|
|
156
|
-
function getLocalIpAddress() {
|
|
157
|
-
const { networkInterfaces } = require('os');
|
|
158
|
-
const nets = networkInterfaces();
|
|
159
|
-
for (const name of Object.keys(nets)) {
|
|
160
|
-
for (const net of nets[name]) {
|
|
161
|
-
// Skip internal and non-IPv4 addresses
|
|
162
|
-
if (net.family === 'IPv4' && !net.internal) {
|
|
163
|
-
return net.address;
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (err instanceof Error) {
|
|
115
|
+
server.ssrFixStacktrace(err);
|
|
164
116
|
}
|
|
117
|
+
next(err);
|
|
165
118
|
}
|
|
166
|
-
}
|
|
167
|
-
|
|
119
|
+
});
|
|
120
|
+
await server.listen();
|
|
121
|
+
const resolvedPort = server.config.server.port ?? 5173;
|
|
122
|
+
console.log(`\n Mordoc dev server running`);
|
|
123
|
+
console.log(` → http://localhost:${resolvedPort}/`);
|
|
124
|
+
console.log(` Project: ${projectRoot}\n`);
|
|
168
125
|
}
|
|
169
126
|
//# sourceMappingURL=dev.js.map
|
package/dist/cli/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MordocData } from '../types/pipeline.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds Pagefind search indexes after SSG completes.
|
|
4
|
+
*
|
|
5
|
+
* Single-language sites produce one index at `dist/pagefind/`.
|
|
6
|
+
*
|
|
7
|
+
* Multi-language sites produce a separate index per language at
|
|
8
|
+
* `dist/pagefind-{lang}/` so the browser loads only the index for the
|
|
9
|
+
* currently-active language. Non-default languages live under `/{lang}/` in
|
|
10
|
+
* the dist tree, which makes glob scoping straightforward. The default
|
|
11
|
+
* language lives at the root, so its index is built by including root HTML
|
|
12
|
+
* files plus every content subdirectory that is NOT claimed by another lang.
|
|
13
|
+
*/
|
|
14
|
+
export declare function runPagefindIndexer(data: MordocData, distDir: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=pagefind-indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagefind-indexer.d.ts","sourceRoot":"","sources":["../../src/cli/pagefind-indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAsCvD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { createIndex } from 'pagefind';
|
|
4
|
+
/**
|
|
5
|
+
* Builds a Pagefind search index from a set of glob patterns within distDir.
|
|
6
|
+
* Each glob is added as a separate addDirectory call so callers can mix
|
|
7
|
+
* root-level and subdirectory globs without negation patterns (which Pagefind
|
|
8
|
+
* does not support).
|
|
9
|
+
*/
|
|
10
|
+
async function buildIndex(distDir, globs, outputPath) {
|
|
11
|
+
const { index, errors } = await createIndex({});
|
|
12
|
+
if (!index)
|
|
13
|
+
throw new Error(`pagefind createIndex failed: ${errors.join(', ')}`);
|
|
14
|
+
for (const glob of globs) {
|
|
15
|
+
await index.addDirectory({ path: distDir, glob });
|
|
16
|
+
}
|
|
17
|
+
await index.writeFiles({ outputPath });
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns top-level subdirectory names of distDir, excluding the given names
|
|
21
|
+
* and any Pagefind output dirs or Vite asset dirs that begin with `_`.
|
|
22
|
+
*/
|
|
23
|
+
async function getContentDirs(distDir, exclude) {
|
|
24
|
+
const entries = await fs.readdir(distDir, { withFileTypes: true });
|
|
25
|
+
return entries
|
|
26
|
+
.filter((e) => e.isDirectory() &&
|
|
27
|
+
!exclude.includes(e.name) &&
|
|
28
|
+
!e.name.startsWith('pagefind') &&
|
|
29
|
+
!e.name.startsWith('_'))
|
|
30
|
+
.map((e) => e.name);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Builds Pagefind search indexes after SSG completes.
|
|
34
|
+
*
|
|
35
|
+
* Single-language sites produce one index at `dist/pagefind/`.
|
|
36
|
+
*
|
|
37
|
+
* Multi-language sites produce a separate index per language at
|
|
38
|
+
* `dist/pagefind-{lang}/` so the browser loads only the index for the
|
|
39
|
+
* currently-active language. Non-default languages live under `/{lang}/` in
|
|
40
|
+
* the dist tree, which makes glob scoping straightforward. The default
|
|
41
|
+
* language lives at the root, so its index is built by including root HTML
|
|
42
|
+
* files plus every content subdirectory that is NOT claimed by another lang.
|
|
43
|
+
*/
|
|
44
|
+
export async function runPagefindIndexer(data, distDir) {
|
|
45
|
+
const { language, site } = data;
|
|
46
|
+
if (!language || language.languages.length <= 1) {
|
|
47
|
+
await buildIndex(distDir, ['**/*.html'], path.join(distDir, 'pagefind'));
|
|
48
|
+
console.log(' pagefind index → dist/pagefind/');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const defaultLang = site.defaultLanguage;
|
|
52
|
+
const nonDefaultLangs = language.languages.filter((l) => l !== defaultLang);
|
|
53
|
+
for (const lang of language.languages) {
|
|
54
|
+
const outputPath = path.join(distDir, `pagefind-${lang}`);
|
|
55
|
+
if (lang !== defaultLang) {
|
|
56
|
+
// Non-default language: pages are entirely under /{lang}/
|
|
57
|
+
await buildIndex(distDir, [`${lang}/**/*.html`], outputPath);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Default language: root HTML + any content subdir not owned by another lang
|
|
61
|
+
const contentDirs = await getContentDirs(distDir, nonDefaultLangs);
|
|
62
|
+
const globs = ['*.html', ...contentDirs.map((d) => `${d}/**/*.html`)];
|
|
63
|
+
await buildIndex(distDir, globs, outputPath);
|
|
64
|
+
}
|
|
65
|
+
console.log(` pagefind index → dist/pagefind-${lang}/`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=pagefind-indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagefind-indexer.js","sourceRoot":"","sources":["../../src/cli/pagefind-indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the absolute path to mordoc's own package root.
|
|
3
|
+
*
|
|
4
|
+
* Files under `src/cli/` compile to `dist/cli/<name>.js`, which sits two
|
|
5
|
+
* directories below the package root. Using `import.meta.url` means the
|
|
6
|
+
* resolution works regardless of where mordoc is installed — in its own
|
|
7
|
+
* repo during development, or under `node_modules/mordoc/` in a user's
|
|
8
|
+
* project.
|
|
9
|
+
*
|
|
10
|
+
* Shared between `dev.ts` and `build.ts` because both Vite invocations
|
|
11
|
+
* (dev server, production build) point Vite's `root` at mordoc's own
|
|
12
|
+
* client source folder, not at anything inside the user's project.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getPackageRoot(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the absolute path to the client source root that Vite uses
|
|
17
|
+
* as its `root` for both dev serving and production builds.
|
|
18
|
+
*
|
|
19
|
+
* This is where `index.html`, `main.tsx`, and `entry-server.tsx` live
|
|
20
|
+
* inside the mordoc package — all client-bound TSX/HTML that Vite
|
|
21
|
+
* compiles in the user's environment. The user's project never points
|
|
22
|
+
* Vite at any of its own files; everything user-side flows through the
|
|
23
|
+
* mordoc plugin's virtual modules.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getClientRoot(): string;
|
|
26
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/cli/paths.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the absolute path to mordoc's own package root.
|
|
5
|
+
*
|
|
6
|
+
* Files under `src/cli/` compile to `dist/cli/<name>.js`, which sits two
|
|
7
|
+
* directories below the package root. Using `import.meta.url` means the
|
|
8
|
+
* resolution works regardless of where mordoc is installed — in its own
|
|
9
|
+
* repo during development, or under `node_modules/mordoc/` in a user's
|
|
10
|
+
* project.
|
|
11
|
+
*
|
|
12
|
+
* Shared between `dev.ts` and `build.ts` because both Vite invocations
|
|
13
|
+
* (dev server, production build) point Vite's `root` at mordoc's own
|
|
14
|
+
* client source folder, not at anything inside the user's project.
|
|
15
|
+
*/
|
|
16
|
+
export function getPackageRoot() {
|
|
17
|
+
return path.resolve(fileURLToPath(import.meta.url), '../../..');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves the absolute path to the client source root that Vite uses
|
|
21
|
+
* as its `root` for both dev serving and production builds.
|
|
22
|
+
*
|
|
23
|
+
* This is where `index.html`, `main.tsx`, and `entry-server.tsx` live
|
|
24
|
+
* inside the mordoc package — all client-bound TSX/HTML that Vite
|
|
25
|
+
* compiles in the user's environment. The user's project never points
|
|
26
|
+
* Vite at any of its own files; everything user-side flows through the
|
|
27
|
+
* mordoc plugin's virtual modules.
|
|
28
|
+
*/
|
|
29
|
+
export function getClientRoot() {
|
|
30
|
+
return path.join(getPackageRoot(), 'src', 'client');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/cli/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { MordocData } from '../types/pipeline.js';
|
|
2
|
+
export interface SsgRunnerOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Pipeline output for the project. Same instance the Vite plugin used,
|
|
5
|
+
* so per-page metadata and the route list are guaranteed to match the
|
|
6
|
+
* code-split chunks the client build just emitted.
|
|
7
|
+
*/
|
|
8
|
+
data: MordocData;
|
|
9
|
+
/**
|
|
10
|
+
* Where Vite wrote the client bundle and the transformed `index.html`.
|
|
11
|
+
* The runner reads `index.html` from here (it already has the hashed
|
|
12
|
+
* entry script tag), substitutes per-route, and writes the rendered
|
|
13
|
+
* pages back into this same directory tree.
|
|
14
|
+
*/
|
|
15
|
+
clientOutDir: string;
|
|
16
|
+
/**
|
|
17
|
+
* Where Vite wrote the SSR bundle. The runner does a single dynamic
|
|
18
|
+
* `import()` of `entry-server.js` from here to obtain the `render()`
|
|
19
|
+
* function. Once this command finishes, this directory is deleted.
|
|
20
|
+
*/
|
|
21
|
+
ssrOutDir: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Renders every route to a static HTML file in `clientOutDir`.
|
|
25
|
+
*
|
|
26
|
+
* Flow per route:
|
|
27
|
+
* 1. Build a synthetic `Request` from the routePath. The SSR `render`
|
|
28
|
+
* function only consults the URL's pathname for routing, so the
|
|
29
|
+
* `http://localhost` origin is filler — it just has to parse as a
|
|
30
|
+
* valid URL.
|
|
31
|
+
* 2. Call `render(request, shellData)` from the SSR bundle. This
|
|
32
|
+
* runs `createStaticHandler.query()`, which resolves the route's
|
|
33
|
+
* loader, which dynamically imports the lazy page module from the
|
|
34
|
+
* same SSR bundle. React Router's `<StaticRouterProvider>` then
|
|
35
|
+
* renders the matched tree to a string AND emits a `<script>` tag
|
|
36
|
+
* carrying the loader data, both inside the returned `html`.
|
|
37
|
+
* 3. Substitute `<!--ssr-head-->` and `<!--ssr-outlet-->` in the
|
|
38
|
+
* transformed-by-Vite `index.html` template using the
|
|
39
|
+
* replacement-FUNCTION form. The string form of `String.replace`
|
|
40
|
+
* honours `$` patterns (`$$` → `$`), and the hydration `<script>`
|
|
41
|
+
* from step 2 contains Markdoc's `$$mdtype` markers — the string
|
|
42
|
+
* form would mangle them, breaking `Tag.isTag()` on the client and
|
|
43
|
+
* surfacing as "Objects are not valid as a React child" the moment
|
|
44
|
+
* hydration tries to re-render. Function form bypasses pattern
|
|
45
|
+
* processing entirely.
|
|
46
|
+
* 4. Write to the route's `index.html`, creating parent directories
|
|
47
|
+
* as needed (e.g. `/flight-manual/safety` requires
|
|
48
|
+
* `dist/flight-manual/safety/`).
|
|
49
|
+
*
|
|
50
|
+
* The template is read once. Vite's client build has already produced
|
|
51
|
+
* `dist/index.html` with the hashed entry `<script>` tag in place, so
|
|
52
|
+
* every per-route file inherits the correct script reference for free.
|
|
53
|
+
*
|
|
54
|
+
* The SSR bundle import uses `pathToFileURL` because Node's ESM loader
|
|
55
|
+
* rejects raw absolute Windows paths in `import()` ("ERR_UNSUPPORTED_ESM_URL_SCHEME").
|
|
56
|
+
*/
|
|
57
|
+
export declare function runSsg(options: SsgRunnerOptions): Promise<void>;
|
|
58
|
+
//# sourceMappingURL=ssg-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssg-runner.d.ts","sourceRoot":"","sources":["../../src/cli/ssg-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,sBAAsB,CAAC;AAalE,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,EAAE,UAAU,CAAC;IACjB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAgED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCrE"}
|