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.
Files changed (243) hide show
  1. package/README.md +240 -0
  2. package/bin/cli.js +81 -0
  3. package/dist/build/Builder.d.ts +91 -0
  4. package/dist/build/Builder.d.ts.map +1 -0
  5. package/dist/build/Builder.js +391 -0
  6. package/dist/build/Builder.js.map +1 -0
  7. package/dist/build/ClientBundler.d.ts +36 -0
  8. package/dist/build/ClientBundler.d.ts.map +1 -0
  9. package/dist/build/ClientBundler.js +132 -0
  10. package/dist/build/ClientBundler.js.map +1 -0
  11. package/dist/build/HtmlGenerator.d.ts +46 -0
  12. package/dist/build/HtmlGenerator.d.ts.map +1 -0
  13. package/dist/build/HtmlGenerator.js +200 -0
  14. package/dist/build/HtmlGenerator.js.map +1 -0
  15. package/dist/build/SearchIndexer.d.ts +31 -0
  16. package/dist/build/SearchIndexer.d.ts.map +1 -0
  17. package/dist/build/SearchIndexer.js +116 -0
  18. package/dist/build/SearchIndexer.js.map +1 -0
  19. package/dist/cli/build.d.ts +20 -0
  20. package/dist/cli/build.d.ts.map +1 -0
  21. package/dist/cli/build.js +111 -0
  22. package/dist/cli/build.js.map +1 -0
  23. package/dist/cli/create-app.d.ts +14 -0
  24. package/dist/cli/create-app.d.ts.map +1 -0
  25. package/dist/cli/create-app.js +216 -0
  26. package/dist/cli/create-app.js.map +1 -0
  27. package/dist/cli/dev.d.ts +20 -0
  28. package/dist/cli/dev.d.ts.map +1 -0
  29. package/dist/cli/dev.js +169 -0
  30. package/dist/cli/dev.js.map +1 -0
  31. package/dist/client/App.d.ts +17 -0
  32. package/dist/client/App.d.ts.map +1 -0
  33. package/dist/client/App.js +94 -0
  34. package/dist/client/App.js.map +1 -0
  35. package/dist/client/contexts/ConfigContext.d.ts +22 -0
  36. package/dist/client/contexts/ConfigContext.d.ts.map +1 -0
  37. package/dist/client/contexts/ConfigContext.js +27 -0
  38. package/dist/client/contexts/ConfigContext.js.map +1 -0
  39. package/dist/client/contexts/ContentContext.d.ts +31 -0
  40. package/dist/client/contexts/ContentContext.d.ts.map +1 -0
  41. package/dist/client/contexts/ContentContext.js +46 -0
  42. package/dist/client/contexts/ContentContext.js.map +1 -0
  43. package/dist/client/contexts/SearchContext.d.ts +38 -0
  44. package/dist/client/contexts/SearchContext.d.ts.map +1 -0
  45. package/dist/client/contexts/SearchContext.js +207 -0
  46. package/dist/client/contexts/SearchContext.js.map +1 -0
  47. package/dist/client/contexts/ThemeContext.d.ts +23 -0
  48. package/dist/client/contexts/ThemeContext.d.ts.map +1 -0
  49. package/dist/client/contexts/ThemeContext.js +62 -0
  50. package/dist/client/contexts/ThemeContext.js.map +1 -0
  51. package/dist/client/hooks/useContent.d.ts +12 -0
  52. package/dist/client/hooks/useContent.d.ts.map +1 -0
  53. package/dist/client/hooks/useContent.js +74 -0
  54. package/dist/client/hooks/useContent.js.map +1 -0
  55. package/dist/client/hooks/useNavigation.d.ts +15 -0
  56. package/dist/client/hooks/useNavigation.d.ts.map +1 -0
  57. package/dist/client/hooks/useNavigation.js +101 -0
  58. package/dist/client/hooks/useNavigation.js.map +1 -0
  59. package/dist/client/hooks/useSearch.d.ts +22 -0
  60. package/dist/client/hooks/useSearch.d.ts.map +1 -0
  61. package/dist/client/hooks/useSearch.js +64 -0
  62. package/dist/client/hooks/useSearch.js.map +1 -0
  63. package/dist/client/main.d.ts +5 -0
  64. package/dist/client/main.d.ts.map +1 -0
  65. package/dist/client/main.js +66 -0
  66. package/dist/client/main.js.map +1 -0
  67. package/dist/components/Callout.d.ts +9 -0
  68. package/dist/components/Callout.d.ts.map +1 -0
  69. package/dist/components/Callout.js +24 -0
  70. package/dist/components/Callout.js.map +1 -0
  71. package/dist/components/Card.d.ts +10 -0
  72. package/dist/components/Card.d.ts.map +1 -0
  73. package/dist/components/Card.js +15 -0
  74. package/dist/components/Card.js.map +1 -0
  75. package/dist/components/CardGrid.d.ts +8 -0
  76. package/dist/components/CardGrid.d.ts.map +1 -0
  77. package/dist/components/CardGrid.js +9 -0
  78. package/dist/components/CardGrid.js.map +1 -0
  79. package/dist/components/CodeBlock.d.ts +24 -0
  80. package/dist/components/CodeBlock.d.ts.map +1 -0
  81. package/dist/components/CodeBlock.js +76 -0
  82. package/dist/components/CodeBlock.js.map +1 -0
  83. package/dist/components/ContentPage.d.ts +9 -0
  84. package/dist/components/ContentPage.d.ts.map +1 -0
  85. package/dist/components/ContentPage.js +36 -0
  86. package/dist/components/ContentPage.js.map +1 -0
  87. package/dist/components/Header.d.ts +14 -0
  88. package/dist/components/Header.d.ts.map +1 -0
  89. package/dist/components/Header.js +30 -0
  90. package/dist/components/Header.js.map +1 -0
  91. package/dist/components/Heading.d.ts +16 -0
  92. package/dist/components/Heading.d.ts.map +1 -0
  93. package/dist/components/Heading.js +31 -0
  94. package/dist/components/Heading.js.map +1 -0
  95. package/dist/components/Image.d.ts +8 -0
  96. package/dist/components/Image.d.ts.map +1 -0
  97. package/dist/components/Image.js +24 -0
  98. package/dist/components/Image.js.map +1 -0
  99. package/dist/components/Layout.d.ts +14 -0
  100. package/dist/components/Layout.d.ts.map +1 -0
  101. package/dist/components/Layout.js +32 -0
  102. package/dist/components/Layout.js.map +1 -0
  103. package/dist/components/MarkdocRenderer.d.ts +15 -0
  104. package/dist/components/MarkdocRenderer.d.ts.map +1 -0
  105. package/dist/components/MarkdocRenderer.js +73 -0
  106. package/dist/components/MarkdocRenderer.js.map +1 -0
  107. package/dist/components/MobileMenu.d.ts +14 -0
  108. package/dist/components/MobileMenu.d.ts.map +1 -0
  109. package/dist/components/MobileMenu.js +45 -0
  110. package/dist/components/MobileMenu.js.map +1 -0
  111. package/dist/components/PageNavigation.d.ts +9 -0
  112. package/dist/components/PageNavigation.d.ts.map +1 -0
  113. package/dist/components/PageNavigation.js +23 -0
  114. package/dist/components/PageNavigation.js.map +1 -0
  115. package/dist/components/SearchModal.d.ts +9 -0
  116. package/dist/components/SearchModal.d.ts.map +1 -0
  117. package/dist/components/SearchModal.js +74 -0
  118. package/dist/components/SearchModal.js.map +1 -0
  119. package/dist/components/SideNav.d.ts +9 -0
  120. package/dist/components/SideNav.d.ts.map +1 -0
  121. package/dist/components/SideNav.js +66 -0
  122. package/dist/components/SideNav.js.map +1 -0
  123. package/dist/components/TableOfContents.d.ts +10 -0
  124. package/dist/components/TableOfContents.d.ts.map +1 -0
  125. package/dist/components/TableOfContents.js +151 -0
  126. package/dist/components/TableOfContents.js.map +1 -0
  127. package/dist/config/ConfigLoader.d.ts +50 -0
  128. package/dist/config/ConfigLoader.d.ts.map +1 -0
  129. package/dist/config/ConfigLoader.js +214 -0
  130. package/dist/config/ConfigLoader.js.map +1 -0
  131. package/dist/config/StyleCompiler.d.ts +17 -0
  132. package/dist/config/StyleCompiler.d.ts.map +1 -0
  133. package/dist/config/StyleCompiler.js +116 -0
  134. package/dist/config/StyleCompiler.js.map +1 -0
  135. package/dist/config/ThemeGenerator.d.ts +14 -0
  136. package/dist/config/ThemeGenerator.d.ts.map +1 -0
  137. package/dist/config/ThemeGenerator.js +129 -0
  138. package/dist/config/ThemeGenerator.js.map +1 -0
  139. package/dist/content/ContentLoader.d.ts +70 -0
  140. package/dist/content/ContentLoader.d.ts.map +1 -0
  141. package/dist/content/ContentLoader.js +146 -0
  142. package/dist/content/ContentLoader.js.map +1 -0
  143. package/dist/content/ContentProcessor.d.ts +84 -0
  144. package/dist/content/ContentProcessor.d.ts.map +1 -0
  145. package/dist/content/ContentProcessor.js +380 -0
  146. package/dist/content/ContentProcessor.js.map +1 -0
  147. package/dist/content/RouteManager.d.ts +69 -0
  148. package/dist/content/RouteManager.d.ts.map +1 -0
  149. package/dist/content/RouteManager.js +143 -0
  150. package/dist/content/RouteManager.js.map +1 -0
  151. package/dist/styles/components/callout.d.ts +11 -0
  152. package/dist/styles/components/callout.d.ts.map +1 -0
  153. package/dist/styles/components/callout.js +83 -0
  154. package/dist/styles/components/callout.js.map +1 -0
  155. package/dist/styles/components/card.d.ts +11 -0
  156. package/dist/styles/components/card.d.ts.map +1 -0
  157. package/dist/styles/components/card.js +179 -0
  158. package/dist/styles/components/card.js.map +1 -0
  159. package/dist/styles/components/codeblock.d.ts +11 -0
  160. package/dist/styles/components/codeblock.d.ts.map +1 -0
  161. package/dist/styles/components/codeblock.js +249 -0
  162. package/dist/styles/components/codeblock.js.map +1 -0
  163. package/dist/styles/components/content.d.ts +11 -0
  164. package/dist/styles/components/content.d.ts.map +1 -0
  165. package/dist/styles/components/content.js +198 -0
  166. package/dist/styles/components/content.js.map +1 -0
  167. package/dist/styles/components/fonts.d.ts +11 -0
  168. package/dist/styles/components/fonts.d.ts.map +1 -0
  169. package/dist/styles/components/fonts.js +34 -0
  170. package/dist/styles/components/fonts.js.map +1 -0
  171. package/dist/styles/components/header.d.ts +11 -0
  172. package/dist/styles/components/header.d.ts.map +1 -0
  173. package/dist/styles/components/header.js +293 -0
  174. package/dist/styles/components/header.js.map +1 -0
  175. package/dist/styles/components/heading.d.ts +11 -0
  176. package/dist/styles/components/heading.d.ts.map +1 -0
  177. package/dist/styles/components/heading.js +115 -0
  178. package/dist/styles/components/heading.js.map +1 -0
  179. package/dist/styles/components/layout.d.ts +11 -0
  180. package/dist/styles/components/layout.d.ts.map +1 -0
  181. package/dist/styles/components/layout.js +79 -0
  182. package/dist/styles/components/layout.js.map +1 -0
  183. package/dist/styles/components/mobilemenu.d.ts +11 -0
  184. package/dist/styles/components/mobilemenu.d.ts.map +1 -0
  185. package/dist/styles/components/mobilemenu.js +112 -0
  186. package/dist/styles/components/mobilemenu.js.map +1 -0
  187. package/dist/styles/components/reset.d.ts +11 -0
  188. package/dist/styles/components/reset.d.ts.map +1 -0
  189. package/dist/styles/components/reset.js +131 -0
  190. package/dist/styles/components/reset.js.map +1 -0
  191. package/dist/styles/components/searchmodal.d.ts +11 -0
  192. package/dist/styles/components/searchmodal.d.ts.map +1 -0
  193. package/dist/styles/components/searchmodal.js +333 -0
  194. package/dist/styles/components/searchmodal.js.map +1 -0
  195. package/dist/styles/components/sidenav.d.ts +11 -0
  196. package/dist/styles/components/sidenav.d.ts.map +1 -0
  197. package/dist/styles/components/sidenav.js +209 -0
  198. package/dist/styles/components/sidenav.js.map +1 -0
  199. package/dist/styles/components/toc.d.ts +11 -0
  200. package/dist/styles/components/toc.d.ts.map +1 -0
  201. package/dist/styles/components/toc.js +112 -0
  202. package/dist/styles/components/toc.js.map +1 -0
  203. package/dist/styles/components/typography.d.ts +11 -0
  204. package/dist/styles/components/typography.d.ts.map +1 -0
  205. package/dist/styles/components/typography.js +247 -0
  206. package/dist/styles/components/typography.js.map +1 -0
  207. package/dist/styles/components/utility.d.ts +11 -0
  208. package/dist/styles/components/utility.d.ts.map +1 -0
  209. package/dist/styles/components/utility.js +231 -0
  210. package/dist/styles/components/utility.js.map +1 -0
  211. package/dist/styles/types.d.ts +79 -0
  212. package/dist/styles/types.d.ts.map +1 -0
  213. package/dist/styles/types.js +7 -0
  214. package/dist/styles/types.js.map +1 -0
  215. package/dist/styles/utils.d.ts +21 -0
  216. package/dist/styles/utils.d.ts.map +1 -0
  217. package/dist/styles/utils.js +50 -0
  218. package/dist/styles/utils.js.map +1 -0
  219. package/dist/styles/variables/main.d.ts +15 -0
  220. package/dist/styles/variables/main.d.ts.map +1 -0
  221. package/dist/styles/variables/main.js +116 -0
  222. package/dist/styles/variables/main.js.map +1 -0
  223. package/dist/types/config.d.ts +43 -0
  224. package/dist/types/config.d.ts.map +1 -0
  225. package/dist/types/config.js +7 -0
  226. package/dist/types/config.js.map +1 -0
  227. package/dist/types/content.d.ts +46 -0
  228. package/dist/types/content.d.ts.map +1 -0
  229. package/dist/types/content.js +7 -0
  230. package/dist/types/content.js.map +1 -0
  231. package/dist/types/navigation.d.ts +45 -0
  232. package/dist/types/navigation.d.ts.map +1 -0
  233. package/dist/types/navigation.js +7 -0
  234. package/dist/types/navigation.js.map +1 -0
  235. package/dist/utils/language-utils.d.ts +41 -0
  236. package/dist/utils/language-utils.d.ts.map +1 -0
  237. package/dist/utils/language-utils.js +79 -0
  238. package/dist/utils/language-utils.js.map +1 -0
  239. package/dist/utils/slugify.d.ts +20 -0
  240. package/dist/utils/slugify.d.ts.map +1 -0
  241. package/dist/utils/slugify.js +44 -0
  242. package/dist/utils/slugify.js.map +1 -0
  243. 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"}