mordoc 0.1.1
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/README.md +240 -0
- package/bin/cli.js +81 -0
- package/dist/build/Builder.d.ts +91 -0
- package/dist/build/Builder.d.ts.map +1 -0
- package/dist/build/Builder.js +391 -0
- package/dist/build/Builder.js.map +1 -0
- package/dist/build/ClientBundler.d.ts +36 -0
- package/dist/build/ClientBundler.d.ts.map +1 -0
- package/dist/build/ClientBundler.js +132 -0
- package/dist/build/ClientBundler.js.map +1 -0
- package/dist/build/HtmlGenerator.d.ts +46 -0
- package/dist/build/HtmlGenerator.d.ts.map +1 -0
- package/dist/build/HtmlGenerator.js +200 -0
- package/dist/build/HtmlGenerator.js.map +1 -0
- package/dist/build/SearchIndexer.d.ts +31 -0
- package/dist/build/SearchIndexer.d.ts.map +1 -0
- package/dist/build/SearchIndexer.js +116 -0
- package/dist/build/SearchIndexer.js.map +1 -0
- package/dist/cli/build.d.ts +20 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +111 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/create-app.d.ts +14 -0
- package/dist/cli/create-app.d.ts.map +1 -0
- package/dist/cli/create-app.js +216 -0
- package/dist/cli/create-app.js.map +1 -0
- package/dist/cli/dev.d.ts +20 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +169 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/client/App.d.ts +17 -0
- package/dist/client/App.d.ts.map +1 -0
- package/dist/client/App.js +94 -0
- package/dist/client/App.js.map +1 -0
- package/dist/client/contexts/ConfigContext.d.ts +22 -0
- package/dist/client/contexts/ConfigContext.d.ts.map +1 -0
- package/dist/client/contexts/ConfigContext.js +27 -0
- package/dist/client/contexts/ConfigContext.js.map +1 -0
- package/dist/client/contexts/ContentContext.d.ts +31 -0
- package/dist/client/contexts/ContentContext.d.ts.map +1 -0
- package/dist/client/contexts/ContentContext.js +46 -0
- package/dist/client/contexts/ContentContext.js.map +1 -0
- package/dist/client/contexts/SearchContext.d.ts +38 -0
- package/dist/client/contexts/SearchContext.d.ts.map +1 -0
- package/dist/client/contexts/SearchContext.js +207 -0
- package/dist/client/contexts/SearchContext.js.map +1 -0
- package/dist/client/contexts/ThemeContext.d.ts +23 -0
- package/dist/client/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/client/contexts/ThemeContext.js +62 -0
- package/dist/client/contexts/ThemeContext.js.map +1 -0
- package/dist/client/hooks/useContent.d.ts +12 -0
- package/dist/client/hooks/useContent.d.ts.map +1 -0
- package/dist/client/hooks/useContent.js +74 -0
- package/dist/client/hooks/useContent.js.map +1 -0
- package/dist/client/hooks/useNavigation.d.ts +15 -0
- package/dist/client/hooks/useNavigation.d.ts.map +1 -0
- package/dist/client/hooks/useNavigation.js +101 -0
- package/dist/client/hooks/useNavigation.js.map +1 -0
- package/dist/client/hooks/useSearch.d.ts +22 -0
- package/dist/client/hooks/useSearch.d.ts.map +1 -0
- package/dist/client/hooks/useSearch.js +64 -0
- package/dist/client/hooks/useSearch.js.map +1 -0
- package/dist/client/main.d.ts +5 -0
- package/dist/client/main.d.ts.map +1 -0
- package/dist/client/main.js +66 -0
- package/dist/client/main.js.map +1 -0
- package/dist/components/Callout.d.ts +9 -0
- package/dist/components/Callout.d.ts.map +1 -0
- package/dist/components/Callout.js +24 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.d.ts +10 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +15 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/CardGrid.d.ts +8 -0
- package/dist/components/CardGrid.d.ts.map +1 -0
- package/dist/components/CardGrid.js +9 -0
- package/dist/components/CardGrid.js.map +1 -0
- package/dist/components/CodeBlock.d.ts +24 -0
- package/dist/components/CodeBlock.d.ts.map +1 -0
- package/dist/components/CodeBlock.js +76 -0
- package/dist/components/CodeBlock.js.map +1 -0
- package/dist/components/ContentPage.d.ts +9 -0
- package/dist/components/ContentPage.d.ts.map +1 -0
- package/dist/components/ContentPage.js +36 -0
- package/dist/components/ContentPage.js.map +1 -0
- package/dist/components/Header.d.ts +14 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +30 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/Heading.d.ts +16 -0
- package/dist/components/Heading.d.ts.map +1 -0
- package/dist/components/Heading.js +31 -0
- package/dist/components/Heading.js.map +1 -0
- package/dist/components/Image.d.ts +8 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/Image.js +24 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/Layout.d.ts +14 -0
- package/dist/components/Layout.d.ts.map +1 -0
- package/dist/components/Layout.js +32 -0
- package/dist/components/Layout.js.map +1 -0
- package/dist/components/MarkdocRenderer.d.ts +15 -0
- package/dist/components/MarkdocRenderer.d.ts.map +1 -0
- package/dist/components/MarkdocRenderer.js +73 -0
- package/dist/components/MarkdocRenderer.js.map +1 -0
- package/dist/components/MobileMenu.d.ts +14 -0
- package/dist/components/MobileMenu.d.ts.map +1 -0
- package/dist/components/MobileMenu.js +45 -0
- package/dist/components/MobileMenu.js.map +1 -0
- package/dist/components/PageNavigation.d.ts +9 -0
- package/dist/components/PageNavigation.d.ts.map +1 -0
- package/dist/components/PageNavigation.js +23 -0
- package/dist/components/PageNavigation.js.map +1 -0
- package/dist/components/SearchModal.d.ts +9 -0
- package/dist/components/SearchModal.d.ts.map +1 -0
- package/dist/components/SearchModal.js +74 -0
- package/dist/components/SearchModal.js.map +1 -0
- package/dist/components/SideNav.d.ts +9 -0
- package/dist/components/SideNav.d.ts.map +1 -0
- package/dist/components/SideNav.js +66 -0
- package/dist/components/SideNav.js.map +1 -0
- package/dist/components/TableOfContents.d.ts +10 -0
- package/dist/components/TableOfContents.d.ts.map +1 -0
- package/dist/components/TableOfContents.js +151 -0
- package/dist/components/TableOfContents.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +50 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +214 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/StyleCompiler.d.ts +17 -0
- package/dist/config/StyleCompiler.d.ts.map +1 -0
- package/dist/config/StyleCompiler.js +116 -0
- package/dist/config/StyleCompiler.js.map +1 -0
- package/dist/config/ThemeGenerator.d.ts +14 -0
- package/dist/config/ThemeGenerator.d.ts.map +1 -0
- package/dist/config/ThemeGenerator.js +129 -0
- package/dist/config/ThemeGenerator.js.map +1 -0
- package/dist/content/ContentLoader.d.ts +70 -0
- package/dist/content/ContentLoader.d.ts.map +1 -0
- package/dist/content/ContentLoader.js +146 -0
- package/dist/content/ContentLoader.js.map +1 -0
- package/dist/content/ContentProcessor.d.ts +84 -0
- package/dist/content/ContentProcessor.d.ts.map +1 -0
- package/dist/content/ContentProcessor.js +380 -0
- package/dist/content/ContentProcessor.js.map +1 -0
- package/dist/content/RouteManager.d.ts +69 -0
- package/dist/content/RouteManager.d.ts.map +1 -0
- package/dist/content/RouteManager.js +143 -0
- package/dist/content/RouteManager.js.map +1 -0
- package/dist/styles/components/callout.d.ts +11 -0
- package/dist/styles/components/callout.d.ts.map +1 -0
- package/dist/styles/components/callout.js +83 -0
- package/dist/styles/components/callout.js.map +1 -0
- package/dist/styles/components/card.d.ts +11 -0
- package/dist/styles/components/card.d.ts.map +1 -0
- package/dist/styles/components/card.js +179 -0
- package/dist/styles/components/card.js.map +1 -0
- package/dist/styles/components/codeblock.d.ts +11 -0
- package/dist/styles/components/codeblock.d.ts.map +1 -0
- package/dist/styles/components/codeblock.js +249 -0
- package/dist/styles/components/codeblock.js.map +1 -0
- package/dist/styles/components/content.d.ts +11 -0
- package/dist/styles/components/content.d.ts.map +1 -0
- package/dist/styles/components/content.js +198 -0
- package/dist/styles/components/content.js.map +1 -0
- package/dist/styles/components/fonts.d.ts +11 -0
- package/dist/styles/components/fonts.d.ts.map +1 -0
- package/dist/styles/components/fonts.js +34 -0
- package/dist/styles/components/fonts.js.map +1 -0
- package/dist/styles/components/header.d.ts +11 -0
- package/dist/styles/components/header.d.ts.map +1 -0
- package/dist/styles/components/header.js +293 -0
- package/dist/styles/components/header.js.map +1 -0
- package/dist/styles/components/heading.d.ts +11 -0
- package/dist/styles/components/heading.d.ts.map +1 -0
- package/dist/styles/components/heading.js +115 -0
- package/dist/styles/components/heading.js.map +1 -0
- package/dist/styles/components/layout.d.ts +11 -0
- package/dist/styles/components/layout.d.ts.map +1 -0
- package/dist/styles/components/layout.js +79 -0
- package/dist/styles/components/layout.js.map +1 -0
- package/dist/styles/components/mobilemenu.d.ts +11 -0
- package/dist/styles/components/mobilemenu.d.ts.map +1 -0
- package/dist/styles/components/mobilemenu.js +112 -0
- package/dist/styles/components/mobilemenu.js.map +1 -0
- package/dist/styles/components/reset.d.ts +11 -0
- package/dist/styles/components/reset.d.ts.map +1 -0
- package/dist/styles/components/reset.js +131 -0
- package/dist/styles/components/reset.js.map +1 -0
- package/dist/styles/components/searchmodal.d.ts +11 -0
- package/dist/styles/components/searchmodal.d.ts.map +1 -0
- package/dist/styles/components/searchmodal.js +333 -0
- package/dist/styles/components/searchmodal.js.map +1 -0
- package/dist/styles/components/sidenav.d.ts +11 -0
- package/dist/styles/components/sidenav.d.ts.map +1 -0
- package/dist/styles/components/sidenav.js +209 -0
- package/dist/styles/components/sidenav.js.map +1 -0
- package/dist/styles/components/toc.d.ts +11 -0
- package/dist/styles/components/toc.d.ts.map +1 -0
- package/dist/styles/components/toc.js +112 -0
- package/dist/styles/components/toc.js.map +1 -0
- package/dist/styles/components/typography.d.ts +11 -0
- package/dist/styles/components/typography.d.ts.map +1 -0
- package/dist/styles/components/typography.js +247 -0
- package/dist/styles/components/typography.js.map +1 -0
- package/dist/styles/components/utility.d.ts +11 -0
- package/dist/styles/components/utility.d.ts.map +1 -0
- package/dist/styles/components/utility.js +231 -0
- package/dist/styles/components/utility.js.map +1 -0
- package/dist/styles/types.d.ts +79 -0
- package/dist/styles/types.d.ts.map +1 -0
- package/dist/styles/types.js +7 -0
- package/dist/styles/types.js.map +1 -0
- package/dist/styles/utils.d.ts +21 -0
- package/dist/styles/utils.d.ts.map +1 -0
- package/dist/styles/utils.js +50 -0
- package/dist/styles/utils.js.map +1 -0
- package/dist/styles/variables/main.d.ts +15 -0
- package/dist/styles/variables/main.d.ts.map +1 -0
- package/dist/styles/variables/main.js +116 -0
- package/dist/styles/variables/main.js.map +1 -0
- package/dist/types/config.d.ts +43 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/content.d.ts +46 -0
- package/dist/types/content.d.ts.map +1 -0
- package/dist/types/content.js +7 -0
- package/dist/types/content.js.map +1 -0
- package/dist/types/navigation.d.ts +45 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/navigation.js +7 -0
- package/dist/types/navigation.js.map +1 -0
- package/dist/utils/language-utils.d.ts +41 -0
- package/dist/utils/language-utils.d.ts.map +1 -0
- package/dist/utils/language-utils.js +79 -0
- package/dist/utils/language-utils.js.map +1 -0
- package/dist/utils/slugify.d.ts +20 -0
- package/dist/utils/slugify.d.ts.map +1 -0
- package/dist/utils/slugify.js +44 -0
- package/dist/utils/slugify.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Builder - Main build orchestrator for Mordoc
|
|
4
|
+
* Coordinates the entire static site generation process
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.Builder = void 0;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const ConfigLoader_1 = require("../config/ConfigLoader");
|
|
14
|
+
const ThemeGenerator_1 = require("../config/ThemeGenerator");
|
|
15
|
+
const ContentLoader_1 = require("../content/ContentLoader");
|
|
16
|
+
const ContentProcessor_1 = require("../content/ContentProcessor");
|
|
17
|
+
const RouteManager_1 = require("../content/RouteManager");
|
|
18
|
+
const HtmlGenerator_1 = require("./HtmlGenerator");
|
|
19
|
+
const ClientBundler_1 = require("./ClientBundler");
|
|
20
|
+
const StyleCompiler_1 = require("../config/StyleCompiler");
|
|
21
|
+
const main_1 = require("../styles/variables/main");
|
|
22
|
+
const SearchIndexer_1 = require("./SearchIndexer");
|
|
23
|
+
class Builder {
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.projectRoot = options.projectRoot;
|
|
26
|
+
this.outputDir = options.outputDir || path_1.default.join(this.projectRoot, 'dist');
|
|
27
|
+
this.contentDir = path_1.default.join(this.projectRoot, 'content');
|
|
28
|
+
this.configDir = path_1.default.join(this.projectRoot, 'config');
|
|
29
|
+
this.publicDir = path_1.default.join(this.projectRoot, 'public');
|
|
30
|
+
this.clean = options.clean ?? true;
|
|
31
|
+
this.includeDrafts = options.includeDrafts ?? false;
|
|
32
|
+
this.verbose = options.verbose ?? false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Execute the complete build process
|
|
36
|
+
*/
|
|
37
|
+
async build() {
|
|
38
|
+
this.log('Starting Mordoc build...');
|
|
39
|
+
try {
|
|
40
|
+
// Step 1: Clean and prepare output directory
|
|
41
|
+
if (this.clean) {
|
|
42
|
+
this.log('Cleaning output directory...');
|
|
43
|
+
this.cleanOutputDir();
|
|
44
|
+
}
|
|
45
|
+
this.ensureOutputDir();
|
|
46
|
+
// Step 2: Load configuration
|
|
47
|
+
this.log('Loading configuration...');
|
|
48
|
+
const siteConfig = await this.loadConfig();
|
|
49
|
+
// Step 3: Load and process content
|
|
50
|
+
this.log('Loading content files...');
|
|
51
|
+
const processedContent = await this.loadAndProcessContent(siteConfig);
|
|
52
|
+
this.log(`Processed ${processedContent.length} content files`);
|
|
53
|
+
// Step 4: Generate static HTML pages
|
|
54
|
+
this.log('Generating static HTML pages...');
|
|
55
|
+
await this.generateHtmlPages(processedContent, siteConfig);
|
|
56
|
+
// Step 5: Generate content data JSON files (for SPA navigation)
|
|
57
|
+
this.log('Generating content data files...');
|
|
58
|
+
this.generateContentDataFiles(processedContent);
|
|
59
|
+
// Step 6: Generate theme CSS
|
|
60
|
+
this.log('Generating theme CSS...');
|
|
61
|
+
this.generateThemeCSS(siteConfig);
|
|
62
|
+
// Step 7: Bundle client React app
|
|
63
|
+
this.log('Bundling client application...');
|
|
64
|
+
await this.bundleClientApp();
|
|
65
|
+
// Step 8: Copy static assets
|
|
66
|
+
this.log('Copying static assets...');
|
|
67
|
+
this.copyStaticAssets(siteConfig);
|
|
68
|
+
// Step 9: Generate client config
|
|
69
|
+
this.log('Generating client configuration...');
|
|
70
|
+
this.generateClientConfig(siteConfig);
|
|
71
|
+
// Step 10: Generate search index with Pagefind
|
|
72
|
+
this.log('Generating search index...');
|
|
73
|
+
await this.generateSearchIndex();
|
|
74
|
+
this.log('✓ Build completed successfully!');
|
|
75
|
+
this.printBuildStats(processedContent);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Build failed:', error.message);
|
|
79
|
+
if (this.verbose) {
|
|
80
|
+
console.error(error.stack);
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Load site configuration
|
|
87
|
+
*/
|
|
88
|
+
async loadConfig() {
|
|
89
|
+
const configLoader = new ConfigLoader_1.ConfigLoader(this.projectRoot);
|
|
90
|
+
return await configLoader.load();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Load and process all content files
|
|
94
|
+
*/
|
|
95
|
+
async loadAndProcessContent(siteConfig) {
|
|
96
|
+
// Create route manager with language settings
|
|
97
|
+
const routeManager = new RouteManager_1.RouteManager(siteConfig.defaultLanguage, siteConfig.languages.map((lang) => lang.code));
|
|
98
|
+
// Load content files
|
|
99
|
+
const contentLoader = new ContentLoader_1.ContentLoader(this.contentDir, routeManager);
|
|
100
|
+
const rawFiles = await contentLoader.loadAll();
|
|
101
|
+
// Process content
|
|
102
|
+
const contentProcessor = new ContentProcessor_1.ContentProcessor();
|
|
103
|
+
const processedContent = contentProcessor.processAll(rawFiles);
|
|
104
|
+
return processedContent;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate static HTML pages for all content
|
|
108
|
+
*/
|
|
109
|
+
async generateHtmlPages(processedContent, siteConfig) {
|
|
110
|
+
const htmlGenerator = new HtmlGenerator_1.HtmlGenerator({ siteConfig });
|
|
111
|
+
for (const content of processedContent) {
|
|
112
|
+
// Skip drafts in production
|
|
113
|
+
if (!this.includeDrafts && content.metadata.frontmatter.draft) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const html = htmlGenerator.generatePage(content);
|
|
117
|
+
this.writeHtmlFile(content, html);
|
|
118
|
+
}
|
|
119
|
+
// Generate 404 page
|
|
120
|
+
const html404 = htmlGenerator.generate404Page();
|
|
121
|
+
const path404 = path_1.default.join(this.outputDir, '404.html');
|
|
122
|
+
fs_1.default.writeFileSync(path404, html404, 'utf8');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Write HTML file for a content page
|
|
126
|
+
*/
|
|
127
|
+
writeHtmlFile(content, html) {
|
|
128
|
+
const { metadata } = content;
|
|
129
|
+
const { language, slug, path: urlPath } = metadata;
|
|
130
|
+
// Determine output path
|
|
131
|
+
let outputPath;
|
|
132
|
+
if (language === metadata.frontmatter.sidenavRef || language === 'en') {
|
|
133
|
+
// Default language
|
|
134
|
+
outputPath = slug === 'index'
|
|
135
|
+
? path_1.default.join(this.outputDir, 'index.html')
|
|
136
|
+
: path_1.default.join(this.outputDir, urlPath, 'index.html');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Non-default language
|
|
140
|
+
outputPath = slug === 'index'
|
|
141
|
+
? path_1.default.join(this.outputDir, language, 'index.html')
|
|
142
|
+
: path_1.default.join(this.outputDir, language, urlPath, 'index.html');
|
|
143
|
+
}
|
|
144
|
+
// Ensure directory exists
|
|
145
|
+
fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
|
|
146
|
+
// Write HTML file
|
|
147
|
+
fs_1.default.writeFileSync(outputPath, html, 'utf8');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Generate JSON data files for SPA navigation
|
|
151
|
+
*/
|
|
152
|
+
generateContentDataFiles(processedContent) {
|
|
153
|
+
const contentDataDir = path_1.default.join(this.outputDir, 'content-data');
|
|
154
|
+
fs_1.default.mkdirSync(contentDataDir, { recursive: true });
|
|
155
|
+
for (const content of processedContent) {
|
|
156
|
+
// Skip drafts
|
|
157
|
+
if (!this.includeDrafts && content.metadata.frontmatter.draft) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const dataFile = {
|
|
161
|
+
metadata: content.metadata,
|
|
162
|
+
renderable: content.renderable,
|
|
163
|
+
};
|
|
164
|
+
const json = JSON.stringify(dataFile);
|
|
165
|
+
const { language, slug, dirPath } = content.metadata;
|
|
166
|
+
// Determine output path
|
|
167
|
+
let outputPath;
|
|
168
|
+
if (language === 'en') {
|
|
169
|
+
// For default language
|
|
170
|
+
if (slug === 'index' && !dirPath) {
|
|
171
|
+
// Root index page
|
|
172
|
+
outputPath = path_1.default.join(contentDataDir, 'index.json');
|
|
173
|
+
}
|
|
174
|
+
else if (dirPath) {
|
|
175
|
+
// Page in subdirectory
|
|
176
|
+
outputPath = path_1.default.join(contentDataDir, dirPath, `${slug}.json`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// Page at root level
|
|
180
|
+
outputPath = path_1.default.join(contentDataDir, `${slug}.json`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// For non-default languages
|
|
185
|
+
const langDir = path_1.default.join(contentDataDir, language);
|
|
186
|
+
fs_1.default.mkdirSync(langDir, { recursive: true });
|
|
187
|
+
if (slug === 'index' && !dirPath) {
|
|
188
|
+
// Root index page in non-default language
|
|
189
|
+
outputPath = path_1.default.join(langDir, 'index.json');
|
|
190
|
+
}
|
|
191
|
+
else if (dirPath) {
|
|
192
|
+
// Page in subdirectory in non-default language
|
|
193
|
+
outputPath = path_1.default.join(langDir, dirPath, `${slug}.json`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Page at root level in non-default language
|
|
197
|
+
outputPath = path_1.default.join(langDir, `${slug}.json`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Ensure directory exists
|
|
201
|
+
fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
|
|
202
|
+
// Write file
|
|
203
|
+
fs_1.default.writeFileSync(outputPath, json, 'utf8');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Generate theme CSS and component styles
|
|
208
|
+
*/
|
|
209
|
+
generateThemeCSS(siteConfig) {
|
|
210
|
+
const assetsDir = path_1.default.join(this.outputDir, 'assets');
|
|
211
|
+
fs_1.default.mkdirSync(assetsDir, { recursive: true });
|
|
212
|
+
// Load user style overrides and generate styles
|
|
213
|
+
const styleCompiler = new StyleCompiler_1.StyleCompiler(this.projectRoot);
|
|
214
|
+
const stylesCss = styleCompiler.generateCSS();
|
|
215
|
+
const stylesPath = path_1.default.join(assetsDir, 'styles.css');
|
|
216
|
+
fs_1.default.writeFileSync(stylesPath, stylesCss, 'utf8');
|
|
217
|
+
// Generate theme.css (CSS variables) using global defaults
|
|
218
|
+
const globalVars = (0, main_1.mergeGlobalOverrides)();
|
|
219
|
+
const themeGenerator = new ThemeGenerator_1.ThemeGenerator(globalVars);
|
|
220
|
+
const themeCss = themeGenerator.generateCSSVariables();
|
|
221
|
+
const themePath = path_1.default.join(assetsDir, 'theme.css');
|
|
222
|
+
fs_1.default.writeFileSync(themePath, themeCss, 'utf8');
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Bundle client React application
|
|
226
|
+
*/
|
|
227
|
+
async bundleClientApp() {
|
|
228
|
+
// Get the Mordoc package root (where src/ is located)
|
|
229
|
+
const mordocRoot = path_1.default.join(__dirname, '../..');
|
|
230
|
+
const bundler = new ClientBundler_1.ClientBundler({
|
|
231
|
+
projectRoot: mordocRoot,
|
|
232
|
+
outputDir: this.outputDir,
|
|
233
|
+
minify: !this.verbose, // Don't minify in verbose mode for debugging
|
|
234
|
+
sourcemap: this.verbose, // Generate sourcemaps in verbose mode
|
|
235
|
+
});
|
|
236
|
+
await bundler.bundle();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Copy static assets (logo, favicon, public/ folder, and MORDOC fonts)
|
|
240
|
+
*/
|
|
241
|
+
copyStaticAssets(siteConfig) {
|
|
242
|
+
const assetsDir = path_1.default.join(this.outputDir, 'assets');
|
|
243
|
+
fs_1.default.mkdirSync(assetsDir, { recursive: true });
|
|
244
|
+
// Copy MORDOC's built-in fonts
|
|
245
|
+
this.copyMordocAssets();
|
|
246
|
+
// Copy logo
|
|
247
|
+
if (siteConfig.assets.logo) {
|
|
248
|
+
const logoSrc = path_1.default.join(this.configDir, siteConfig.assets.logo);
|
|
249
|
+
if (fs_1.default.existsSync(logoSrc)) {
|
|
250
|
+
const logoDest = path_1.default.join(assetsDir, siteConfig.assets.logo);
|
|
251
|
+
fs_1.default.copyFileSync(logoSrc, logoDest);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Copy dark mode logo
|
|
255
|
+
if (siteConfig.assets.logoDark) {
|
|
256
|
+
const logoDarkSrc = path_1.default.join(this.configDir, siteConfig.assets.logoDark);
|
|
257
|
+
if (fs_1.default.existsSync(logoDarkSrc)) {
|
|
258
|
+
const logoDarkDest = path_1.default.join(assetsDir, siteConfig.assets.logoDark);
|
|
259
|
+
fs_1.default.copyFileSync(logoDarkSrc, logoDarkDest);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Copy favicon
|
|
263
|
+
if (siteConfig.assets.favicon) {
|
|
264
|
+
const faviconSrc = path_1.default.join(this.configDir, siteConfig.assets.favicon);
|
|
265
|
+
if (fs_1.default.existsSync(faviconSrc)) {
|
|
266
|
+
const faviconDest = path_1.default.join(assetsDir, siteConfig.assets.favicon);
|
|
267
|
+
fs_1.default.copyFileSync(faviconSrc, faviconDest);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Copy public/ directory
|
|
271
|
+
if (fs_1.default.existsSync(this.publicDir)) {
|
|
272
|
+
this.copyDirectory(this.publicDir, this.outputDir);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Copy MORDOC's built-in assets (fonts, etc.)
|
|
277
|
+
*/
|
|
278
|
+
copyMordocAssets() {
|
|
279
|
+
const mordocRoot = path_1.default.join(__dirname, '../..');
|
|
280
|
+
const mordocAssetsDir = path_1.default.join(mordocRoot, 'src/assets');
|
|
281
|
+
if (!fs_1.default.existsSync(mordocAssetsDir)) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const outputAssetsDir = path_1.default.join(this.outputDir, 'assets');
|
|
285
|
+
// Copy fonts
|
|
286
|
+
const fontsSource = path_1.default.join(mordocAssetsDir, 'fonts');
|
|
287
|
+
if (fs_1.default.existsSync(fontsSource)) {
|
|
288
|
+
const fontsDestination = path_1.default.join(outputAssetsDir, 'fonts');
|
|
289
|
+
this.copyDirectory(fontsSource, fontsDestination);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Generate client configuration JSON
|
|
294
|
+
*/
|
|
295
|
+
generateClientConfig(siteConfig) {
|
|
296
|
+
// Client config (subset of site config for browser)
|
|
297
|
+
const clientConfig = {
|
|
298
|
+
metadata: siteConfig.metadata,
|
|
299
|
+
languages: siteConfig.languages,
|
|
300
|
+
defaultLanguage: siteConfig.defaultLanguage,
|
|
301
|
+
navigation: siteConfig.navigation,
|
|
302
|
+
assets: siteConfig.assets,
|
|
303
|
+
};
|
|
304
|
+
const configPath = path_1.default.join(this.outputDir, 'config.json');
|
|
305
|
+
fs_1.default.writeFileSync(configPath, JSON.stringify(clientConfig), 'utf8');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Generate search index using Pagefind
|
|
309
|
+
*/
|
|
310
|
+
async generateSearchIndex() {
|
|
311
|
+
try {
|
|
312
|
+
const searchIndexer = new SearchIndexer_1.SearchIndexer({
|
|
313
|
+
outputDir: this.outputDir,
|
|
314
|
+
verbose: this.verbose,
|
|
315
|
+
});
|
|
316
|
+
await searchIndexer.generateIndex();
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
320
|
+
console.warn(`⚠️ Search indexing failed: ${errorMessage}`);
|
|
321
|
+
console.warn(' Search functionality will not be available.');
|
|
322
|
+
console.warn(' The build will continue, but search will be disabled.');
|
|
323
|
+
// Don't throw - allow build to complete even if search indexing fails
|
|
324
|
+
// This is useful for development or if Pagefind binary has issues
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Clean output directory
|
|
329
|
+
*/
|
|
330
|
+
cleanOutputDir() {
|
|
331
|
+
if (fs_1.default.existsSync(this.outputDir)) {
|
|
332
|
+
fs_1.default.rmSync(this.outputDir, { recursive: true, force: true });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Ensure output directory exists
|
|
337
|
+
*/
|
|
338
|
+
ensureOutputDir() {
|
|
339
|
+
if (!fs_1.default.existsSync(this.outputDir)) {
|
|
340
|
+
fs_1.default.mkdirSync(this.outputDir, { recursive: true });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Copy directory recursively
|
|
345
|
+
*/
|
|
346
|
+
copyDirectory(src, dest) {
|
|
347
|
+
const entries = fs_1.default.readdirSync(src, { withFileTypes: true });
|
|
348
|
+
for (const entry of entries) {
|
|
349
|
+
const srcPath = path_1.default.join(src, entry.name);
|
|
350
|
+
const destPath = path_1.default.join(dest, entry.name);
|
|
351
|
+
if (entry.isDirectory()) {
|
|
352
|
+
fs_1.default.mkdirSync(destPath, { recursive: true });
|
|
353
|
+
this.copyDirectory(srcPath, destPath);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
fs_1.default.copyFileSync(srcPath, destPath);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Log message if verbose mode is enabled
|
|
362
|
+
*/
|
|
363
|
+
log(message) {
|
|
364
|
+
if (this.verbose || true) {
|
|
365
|
+
// Always log for now
|
|
366
|
+
console.log(message);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Print build statistics
|
|
371
|
+
*/
|
|
372
|
+
printBuildStats(processedContent) {
|
|
373
|
+
const stats = {
|
|
374
|
+
total: processedContent.length,
|
|
375
|
+
byLanguage: {},
|
|
376
|
+
};
|
|
377
|
+
for (const content of processedContent) {
|
|
378
|
+
const lang = content.metadata.language;
|
|
379
|
+
stats.byLanguage[lang] = (stats.byLanguage[lang] || 0) + 1;
|
|
380
|
+
}
|
|
381
|
+
console.log('\nBuild Statistics:');
|
|
382
|
+
console.log(` Total pages: ${stats.total}`);
|
|
383
|
+
console.log(' By language:');
|
|
384
|
+
for (const [lang, count] of Object.entries(stats.byLanguage)) {
|
|
385
|
+
console.log(` ${lang}: ${count}`);
|
|
386
|
+
}
|
|
387
|
+
console.log(` Output: ${this.outputDir}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
exports.Builder = Builder;
|
|
391
|
+
//# sourceMappingURL=Builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../src/build/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClientBundler - Bundles the React client app using esbuild
|
|
3
|
+
*/
|
|
4
|
+
export interface ClientBundlerOptions {
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
outputDir: string;
|
|
7
|
+
minify?: boolean;
|
|
8
|
+
sourcemap?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class ClientBundler {
|
|
11
|
+
private projectRoot;
|
|
12
|
+
private outputDir;
|
|
13
|
+
private minify;
|
|
14
|
+
private sourcemap;
|
|
15
|
+
constructor(options: ClientBundlerOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Bundle the client application
|
|
18
|
+
*/
|
|
19
|
+
bundle(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Bundle CSS (placeholder for future CSS bundling)
|
|
22
|
+
*/
|
|
23
|
+
bundleCSS(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Watch mode for development (future enhancement)
|
|
26
|
+
*/
|
|
27
|
+
watch(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Get bundle statistics
|
|
30
|
+
*/
|
|
31
|
+
getStats(): Promise<{
|
|
32
|
+
size: number;
|
|
33
|
+
files: string[];
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ClientBundler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientBundler.d.ts","sourceRoot":"","sources":["../../src/build/ClientBundler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAU;gBAEf,OAAO,EAAE,oBAAoB;IAOzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD7B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CAcH"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClientBundler - Bundles the React client app using esbuild
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ClientBundler = void 0;
|
|
10
|
+
const esbuild_1 = __importDefault(require("esbuild"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
class ClientBundler {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.projectRoot = options.projectRoot;
|
|
16
|
+
this.outputDir = options.outputDir;
|
|
17
|
+
this.minify = options.minify ?? true;
|
|
18
|
+
this.sourcemap = options.sourcemap ?? false;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Bundle the client application
|
|
22
|
+
*/
|
|
23
|
+
async bundle() {
|
|
24
|
+
const assetsDir = path_1.default.join(this.outputDir, 'assets');
|
|
25
|
+
// Ensure assets directory exists
|
|
26
|
+
if (!fs_1.default.existsSync(assetsDir)) {
|
|
27
|
+
fs_1.default.mkdirSync(assetsDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
// Entry point for client app
|
|
30
|
+
const entryPoint = path_1.default.join(this.projectRoot, 'src/client/main.tsx');
|
|
31
|
+
// Check if entry point exists
|
|
32
|
+
if (!fs_1.default.existsSync(entryPoint)) {
|
|
33
|
+
throw new Error(`Client entry point not found: ${entryPoint}`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const result = await esbuild_1.default.build({
|
|
37
|
+
entryPoints: [entryPoint],
|
|
38
|
+
bundle: true,
|
|
39
|
+
outfile: path_1.default.join(assetsDir, 'main.js'),
|
|
40
|
+
platform: 'browser',
|
|
41
|
+
target: ['es2020'],
|
|
42
|
+
format: 'iife',
|
|
43
|
+
minify: this.minify,
|
|
44
|
+
sourcemap: this.sourcemap,
|
|
45
|
+
jsx: 'automatic',
|
|
46
|
+
jsxImportSource: 'react',
|
|
47
|
+
define: {
|
|
48
|
+
'process.env.NODE_ENV': this.minify ? '"production"' : '"development"',
|
|
49
|
+
},
|
|
50
|
+
loader: {
|
|
51
|
+
'.tsx': 'tsx',
|
|
52
|
+
'.ts': 'ts',
|
|
53
|
+
'.jsx': 'jsx',
|
|
54
|
+
'.js': 'js',
|
|
55
|
+
},
|
|
56
|
+
external: [], // Bundle everything
|
|
57
|
+
logLevel: 'warning',
|
|
58
|
+
metafile: true,
|
|
59
|
+
});
|
|
60
|
+
// Log bundle size
|
|
61
|
+
if (result.metafile) {
|
|
62
|
+
const outputs = Object.values(result.metafile.outputs);
|
|
63
|
+
if (outputs.length > 0) {
|
|
64
|
+
const totalSize = outputs.reduce((sum, output) => sum + output.bytes, 0);
|
|
65
|
+
const sizeInKB = (totalSize / 1024).toFixed(2);
|
|
66
|
+
console.log(` Client bundle: ${sizeInKB} KB`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new Error(`Failed to bundle client app: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Bundle CSS (placeholder for future CSS bundling)
|
|
76
|
+
*/
|
|
77
|
+
async bundleCSS() {
|
|
78
|
+
// For now, we generate theme.css via ThemeGenerator
|
|
79
|
+
// This method is a placeholder for bundling additional CSS files
|
|
80
|
+
// or processing CSS modules in the future
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Watch mode for development (future enhancement)
|
|
84
|
+
*/
|
|
85
|
+
async watch() {
|
|
86
|
+
const assetsDir = path_1.default.join(this.outputDir, 'assets');
|
|
87
|
+
const entryPoint = path_1.default.join(this.projectRoot, 'src/client/main.tsx');
|
|
88
|
+
if (!fs_1.default.existsSync(assetsDir)) {
|
|
89
|
+
fs_1.default.mkdirSync(assetsDir, { recursive: true });
|
|
90
|
+
}
|
|
91
|
+
const context = await esbuild_1.default.context({
|
|
92
|
+
entryPoints: [entryPoint],
|
|
93
|
+
bundle: true,
|
|
94
|
+
outfile: path_1.default.join(assetsDir, 'main.js'),
|
|
95
|
+
platform: 'browser',
|
|
96
|
+
target: ['es2020'],
|
|
97
|
+
format: 'iife',
|
|
98
|
+
minify: false,
|
|
99
|
+
sourcemap: true,
|
|
100
|
+
jsx: 'automatic',
|
|
101
|
+
jsxImportSource: 'react',
|
|
102
|
+
define: {
|
|
103
|
+
'process.env.NODE_ENV': '"development"',
|
|
104
|
+
},
|
|
105
|
+
loader: {
|
|
106
|
+
'.tsx': 'tsx',
|
|
107
|
+
'.ts': 'ts',
|
|
108
|
+
'.jsx': 'jsx',
|
|
109
|
+
'.js': 'js',
|
|
110
|
+
},
|
|
111
|
+
logLevel: 'info',
|
|
112
|
+
});
|
|
113
|
+
await context.watch();
|
|
114
|
+
console.log('Watching for client changes...');
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get bundle statistics
|
|
118
|
+
*/
|
|
119
|
+
async getStats() {
|
|
120
|
+
const mainJsPath = path_1.default.join(this.outputDir, 'assets/main.js');
|
|
121
|
+
if (!fs_1.default.existsSync(mainJsPath)) {
|
|
122
|
+
return { size: 0, files: [] };
|
|
123
|
+
}
|
|
124
|
+
const stats = fs_1.default.statSync(mainJsPath);
|
|
125
|
+
return {
|
|
126
|
+
size: stats.size,
|
|
127
|
+
files: ['main.js'],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.ClientBundler = ClientBundler;
|
|
132
|
+
//# sourceMappingURL=ClientBundler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientBundler.js","sourceRoot":"","sources":["../../src/build/ClientBundler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HtmlGenerator - Generates static HTML files using React SSR
|
|
3
|
+
* Creates pre-rendered HTML for each content page
|
|
4
|
+
*/
|
|
5
|
+
import { ProcessedContent } from '../types/content';
|
|
6
|
+
import { SiteConfig } from '../types/config';
|
|
7
|
+
export interface HtmlGeneratorOptions {
|
|
8
|
+
siteConfig: SiteConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare class HtmlGenerator {
|
|
11
|
+
private siteConfig;
|
|
12
|
+
constructor(options: HtmlGeneratorOptions);
|
|
13
|
+
/**
|
|
14
|
+
* Generate HTML for a content page
|
|
15
|
+
* @param content - Processed content
|
|
16
|
+
* @returns Complete HTML string
|
|
17
|
+
*/
|
|
18
|
+
generatePage(content: ProcessedContent): string;
|
|
19
|
+
/**
|
|
20
|
+
* Generate <head> section with metadata and asset links
|
|
21
|
+
*/
|
|
22
|
+
private generateHead;
|
|
23
|
+
/**
|
|
24
|
+
* Generate theme initialization script
|
|
25
|
+
* This runs before React hydrates to prevent flash of wrong theme
|
|
26
|
+
*/
|
|
27
|
+
private generateThemeScript;
|
|
28
|
+
/**
|
|
29
|
+
* Generate body content with full React SSR
|
|
30
|
+
* Renders the complete App component tree including Layout, Header, SideNav, etc.
|
|
31
|
+
*/
|
|
32
|
+
private generateBody;
|
|
33
|
+
/**
|
|
34
|
+
* Generate script tags for client-side hydration
|
|
35
|
+
*/
|
|
36
|
+
private generateScripts;
|
|
37
|
+
/**
|
|
38
|
+
* Escape HTML special characters
|
|
39
|
+
*/
|
|
40
|
+
private escapeHtml;
|
|
41
|
+
/**
|
|
42
|
+
* Generate a simple 404 page
|
|
43
|
+
*/
|
|
44
|
+
generate404Page(): string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=HtmlGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlGenerator.d.ts","sourceRoot":"","sources":["../../src/build/HtmlGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAM7C,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAa;gBAEnB,OAAO,EAAE,oBAAoB;IAIzC;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAoB/C;;OAEG;IACH,OAAO,CAAC,YAAY;IAiEpB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,eAAe,IAAI,MAAM;CA6B1B"}
|