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,129 @@
1
+ "use strict";
2
+ /**
3
+ * ThemeGenerator - Generates CSS variables from GlobalVariables
4
+ * Converts global design tokens into CSS custom properties
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ThemeGenerator = void 0;
8
+ class ThemeGenerator {
9
+ constructor(globalVars) {
10
+ this.globalVars = globalVars;
11
+ }
12
+ /**
13
+ * Generate CSS custom properties (variables) for colors, typography, and layout
14
+ */
15
+ generateCSSVariables() {
16
+ const vars = this.globalVars;
17
+ const cssVars = [];
18
+ // Light mode variables
19
+ cssVars.push(':root, [data-theme="light"] {');
20
+ cssVars.push(' /* Colors - Light Mode */');
21
+ cssVars.push(` --color-primary: ${vars.primaryColorLight};`);
22
+ cssVars.push(` --color-secondary: ${vars.secondaryColorLight};`);
23
+ cssVars.push(` --color-background: ${vars.backgroundColorLight};`);
24
+ cssVars.push(` --color-surface: ${vars.surfaceColorLight};`);
25
+ cssVars.push(` --color-text-primary: ${vars.textPrimaryLight};`);
26
+ cssVars.push(` --color-text-secondary: ${vars.textSecondaryLight};`);
27
+ cssVars.push(` --color-text-disabled: ${vars.textDisabledLight};`);
28
+ cssVars.push(` --color-border: ${vars.borderColorLight};`);
29
+ cssVars.push(` --color-link: ${vars.linkColorLight};`);
30
+ cssVars.push(` --color-success: ${vars.successColorLight};`);
31
+ cssVars.push(` --color-warning: ${vars.warningColorLight};`);
32
+ cssVars.push(` --color-error: ${vars.errorColorLight};`);
33
+ cssVars.push(` --color-info: ${vars.infoColorLight};`);
34
+ cssVars.push('');
35
+ cssVars.push(' /* Navigation - Light Mode */');
36
+ cssVars.push(` --nav-text-color: ${vars.navTextColorLight};`);
37
+ cssVars.push(` --nav-hover-color: ${vars.navHoverColorLight};`);
38
+ cssVars.push(` --nav-active-color: ${vars.navActiveColorLight};`);
39
+ cssVars.push('');
40
+ cssVars.push(' /* Typography */');
41
+ cssVars.push(` --font-family-base: ${vars.fontFamilyBase};`);
42
+ cssVars.push(` --font-family-heading: ${vars.fontFamilyHeading};`);
43
+ cssVars.push(` --font-family-mono: ${vars.fontFamilyMono};`);
44
+ cssVars.push(` --font-size-xs: ${vars.fontSizeXs};`);
45
+ cssVars.push(` --font-size-sm: ${vars.fontSizeSm};`);
46
+ cssVars.push(` --font-size-base: ${vars.fontSizeBase};`);
47
+ cssVars.push(` --font-size-lg: ${vars.fontSizeLg};`);
48
+ cssVars.push(` --font-size-xl: ${vars.fontSizeXl};`);
49
+ cssVars.push(` --font-size-2xl: ${vars.fontSize2xl};`);
50
+ cssVars.push(` --font-size-3xl: ${vars.fontSize3xl};`);
51
+ cssVars.push(` --font-size-4xl: ${vars.fontSize4xl};`);
52
+ cssVars.push(` --line-height-tight: ${vars.lineHeightTight};`);
53
+ cssVars.push(` --line-height-normal: ${vars.lineHeightNormal};`);
54
+ cssVars.push(` --line-height-relaxed: ${vars.lineHeightRelaxed};`);
55
+ cssVars.push(` --font-weight-normal: ${vars.fontWeightNormal};`);
56
+ cssVars.push(` --font-weight-medium: ${vars.fontWeightMedium};`);
57
+ cssVars.push(` --font-weight-semibold: ${vars.fontWeightSemibold};`);
58
+ cssVars.push(` --font-weight-bold: ${vars.fontWeightBold};`);
59
+ cssVars.push('');
60
+ cssVars.push(' /* Layout */');
61
+ cssVars.push(` --container-width-sm: ${vars.containerWidthSm};`);
62
+ cssVars.push(` --container-width-md: ${vars.containerWidthMd};`);
63
+ cssVars.push(` --container-width-lg: ${vars.containerWidthLg};`);
64
+ cssVars.push(` --container-width-xl: ${vars.containerWidthXl};`);
65
+ cssVars.push(` --spacing-xs: ${vars.spacingXs};`);
66
+ cssVars.push(` --spacing-sm: ${vars.spacingSm};`);
67
+ cssVars.push(` --spacing-md: ${vars.spacingMd};`);
68
+ cssVars.push(` --spacing-lg: ${vars.spacingLg};`);
69
+ cssVars.push(` --spacing-xl: ${vars.spacingXl};`);
70
+ cssVars.push(` --spacing-2xl: ${vars.spacing2xl};`);
71
+ cssVars.push(` --spacing-3xl: ${vars.spacing3xl};`);
72
+ cssVars.push(` --border-radius-sm: ${vars.borderRadiusSm};`);
73
+ cssVars.push(` --border-radius-md: ${vars.borderRadiusMd};`);
74
+ cssVars.push(` --border-radius-lg: ${vars.borderRadiusLg};`);
75
+ cssVars.push(` --border-radius-full: ${vars.borderRadiusFull};`);
76
+ cssVars.push(` --header-height: ${vars.headerHeight};`);
77
+ cssVars.push(` --sidebar-width: ${vars.sidebarWidth};`);
78
+ cssVars.push(` --sidebar-collapsed-width: ${vars.sidebarCollapsedWidth};`);
79
+ cssVars.push('}');
80
+ // Dark mode variables
81
+ cssVars.push('');
82
+ cssVars.push('[data-theme="dark"] {');
83
+ cssVars.push(' /* Colors - Dark Mode */');
84
+ cssVars.push(` --color-primary: ${vars.primaryColorDark};`);
85
+ cssVars.push(` --color-secondary: ${vars.secondaryColorDark};`);
86
+ cssVars.push(` --color-background: ${vars.backgroundColorDark};`);
87
+ cssVars.push(` --color-surface: ${vars.surfaceColorDark};`);
88
+ cssVars.push(` --color-text-primary: ${vars.textPrimaryDark};`);
89
+ cssVars.push(` --color-text-secondary: ${vars.textSecondaryDark};`);
90
+ cssVars.push(` --color-text-disabled: ${vars.textDisabledDark};`);
91
+ cssVars.push(` --color-border: ${vars.borderColorDark};`);
92
+ cssVars.push(` --color-link: ${vars.linkColorDark};`);
93
+ cssVars.push(` --color-success: ${vars.successColorDark};`);
94
+ cssVars.push(` --color-warning: ${vars.warningColorDark};`);
95
+ cssVars.push(` --color-error: ${vars.errorColorDark};`);
96
+ cssVars.push(` --color-info: ${vars.infoColorDark};`);
97
+ cssVars.push('');
98
+ cssVars.push(' /* Navigation - Dark Mode */');
99
+ cssVars.push(` --nav-text-color: ${vars.navTextColorDark};`);
100
+ cssVars.push(` --nav-hover-color: ${vars.navHoverColorDark};`);
101
+ cssVars.push(` --nav-active-color: ${vars.navActiveColorDark};`);
102
+ cssVars.push('}');
103
+ // System preference dark mode
104
+ cssVars.push('');
105
+ cssVars.push('@media (prefers-color-scheme: dark) {');
106
+ cssVars.push(' :root:not([data-theme="light"]) {');
107
+ cssVars.push(` --color-primary: ${vars.primaryColorDark};`);
108
+ cssVars.push(` --color-secondary: ${vars.secondaryColorDark};`);
109
+ cssVars.push(` --color-background: ${vars.backgroundColorDark};`);
110
+ cssVars.push(` --color-surface: ${vars.surfaceColorDark};`);
111
+ cssVars.push(` --color-text-primary: ${vars.textPrimaryDark};`);
112
+ cssVars.push(` --color-text-secondary: ${vars.textSecondaryDark};`);
113
+ cssVars.push(` --color-text-disabled: ${vars.textDisabledDark};`);
114
+ cssVars.push(` --color-border: ${vars.borderColorDark};`);
115
+ cssVars.push(` --color-link: ${vars.linkColorDark};`);
116
+ cssVars.push(` --color-success: ${vars.successColorDark};`);
117
+ cssVars.push(` --color-warning: ${vars.warningColorDark};`);
118
+ cssVars.push(` --color-error: ${vars.errorColorDark};`);
119
+ cssVars.push(` --color-info: ${vars.infoColorDark};`);
120
+ cssVars.push(` --nav-text-color: ${vars.navTextColorDark};`);
121
+ cssVars.push(` --nav-hover-color: ${vars.navHoverColorDark};`);
122
+ cssVars.push(` --nav-active-color: ${vars.navActiveColorDark};`);
123
+ cssVars.push(' }');
124
+ cssVars.push('}');
125
+ return cssVars.join('\n');
126
+ }
127
+ }
128
+ exports.ThemeGenerator = ThemeGenerator;
129
+ //# sourceMappingURL=ThemeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeGenerator.js","sourceRoot":"","sources":["../../src/config/ThemeGenerator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,MAAa,cAAc;IACzB,YAAoB,UAA2B;QAA3B,eAAU,GAAV,UAAU,CAAiB;IAAG,CAAC;IAEnD;;OAEG;IACH,oBAAoB;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,uBAAuB;QACvB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAEnE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAE9D,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAEpE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAE9D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAElE,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAErD,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAElE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAE5E,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAElB,sBAAsB;QACtB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAEvD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAElB,8BAA8B;QAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAElB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AArID,wCAqIC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * ContentLoader - Discovers and loads markdown files from content directory
3
+ * Scans the content/ folder and reads raw markdown content
4
+ */
5
+ import { RouteManager } from './RouteManager';
6
+ import { Route, RouteMap } from '../types/navigation';
7
+ export interface RawContentFile {
8
+ filePath: string;
9
+ absolutePath: string;
10
+ content: string;
11
+ route: Route;
12
+ }
13
+ export declare class ContentLoader {
14
+ private contentDir;
15
+ private routeManager;
16
+ constructor(contentDir: string, routeManager: RouteManager);
17
+ /**
18
+ * Discover all markdown files in the content directory
19
+ * @returns Array of relative file paths from content/
20
+ */
21
+ discoverFiles(): Promise<string[]>;
22
+ /**
23
+ * Load a single markdown file
24
+ * @param filePath - Relative path from content/ directory
25
+ * @returns Raw content file object
26
+ */
27
+ loadFile(filePath: string): Promise<RawContentFile>;
28
+ /**
29
+ * Load all markdown files from content directory
30
+ * @returns Array of raw content files
31
+ */
32
+ loadAll(): Promise<RawContentFile[]>;
33
+ /**
34
+ * Load all files and create a route map
35
+ * @returns RouteMap with all discovered routes
36
+ */
37
+ loadWithRoutes(): Promise<{
38
+ files: RawContentFile[];
39
+ routeMap: RouteMap;
40
+ }>;
41
+ /**
42
+ * Load files for a specific language
43
+ * @param language - Language code
44
+ * @returns Array of raw content files for that language
45
+ */
46
+ loadByLanguage(language: string): Promise<RawContentFile[]>;
47
+ /**
48
+ * Check if content exists for a specific language
49
+ * @param language - Language code
50
+ * @returns True if content exists for the language
51
+ */
52
+ hasContentForLanguage(language: string): Promise<boolean>;
53
+ /**
54
+ * Get statistics about discovered content
55
+ * @returns Content statistics
56
+ */
57
+ getStats(): Promise<{
58
+ totalFiles: number;
59
+ byLanguage: Record<string, number>;
60
+ byExtension: Record<string, number>;
61
+ }>;
62
+ /**
63
+ * Find a file by slug and language
64
+ * @param slug - Content slug
65
+ * @param language - Language code
66
+ * @returns Raw content file or undefined
67
+ */
68
+ findFile(slug: string, language: string): Promise<RawContentFile | undefined>;
69
+ }
70
+ //# sourceMappingURL=ContentLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentLoader.d.ts","sourceRoot":"","sources":["../../src/content/ContentLoader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAe;gBAEvB,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY;IAK1D;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAexC;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsBzD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAkB1C;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAWhF;;;;OAIG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKjE;;;;OAIG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,CAAC;IAsBF;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAOpF"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * ContentLoader - Discovers and loads markdown files from content directory
4
+ * Scans the content/ folder and reads raw markdown content
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.ContentLoader = void 0;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const fast_glob_1 = __importDefault(require("fast-glob"));
14
+ class ContentLoader {
15
+ constructor(contentDir, routeManager) {
16
+ this.contentDir = contentDir;
17
+ this.routeManager = routeManager;
18
+ }
19
+ /**
20
+ * Discover all markdown files in the content directory
21
+ * @returns Array of relative file paths from content/
22
+ */
23
+ async discoverFiles() {
24
+ // Check if content directory exists
25
+ if (!fs_1.default.existsSync(this.contentDir)) {
26
+ throw new Error(`Content directory not found: ${this.contentDir}`);
27
+ }
28
+ // Find all .md and .mdx files recursively
29
+ const files = await (0, fast_glob_1.default)(['**/*.md'], {
30
+ cwd: this.contentDir,
31
+ });
32
+ // Sort files alphabetically for consistent ordering
33
+ return files.sort();
34
+ }
35
+ /**
36
+ * Load a single markdown file
37
+ * @param filePath - Relative path from content/ directory
38
+ * @returns Raw content file object
39
+ */
40
+ async loadFile(filePath) {
41
+ const absolutePath = path_1.default.join(this.contentDir, filePath);
42
+ // Check if file exists
43
+ if (!fs_1.default.existsSync(absolutePath)) {
44
+ throw new Error(`File not found: ${absolutePath}`);
45
+ }
46
+ // Read file content
47
+ const content = fs_1.default.readFileSync(absolutePath, 'utf8');
48
+ // Create route for this file
49
+ const route = this.routeManager.createRoute(filePath);
50
+ return {
51
+ filePath,
52
+ absolutePath,
53
+ content,
54
+ route,
55
+ };
56
+ }
57
+ /**
58
+ * Load all markdown files from content directory
59
+ * @returns Array of raw content files
60
+ */
61
+ async loadAll() {
62
+ const filePaths = await this.discoverFiles();
63
+ const files = [];
64
+ for (const filePath of filePaths) {
65
+ try {
66
+ const file = await this.loadFile(filePath);
67
+ files.push(file);
68
+ }
69
+ catch (error) {
70
+ console.warn(`Warning: Failed to load file ${filePath}:`, error.message);
71
+ // Continue loading other files
72
+ }
73
+ }
74
+ return files;
75
+ }
76
+ /**
77
+ * Load all files and create a route map
78
+ * @returns RouteMap with all discovered routes
79
+ */
80
+ async loadWithRoutes() {
81
+ const files = await this.loadAll();
82
+ const filePaths = files.map((f) => f.filePath);
83
+ const routeMap = this.routeManager.createRouteMap(filePaths);
84
+ return {
85
+ files,
86
+ routeMap,
87
+ };
88
+ }
89
+ /**
90
+ * Load files for a specific language
91
+ * @param language - Language code
92
+ * @returns Array of raw content files for that language
93
+ */
94
+ async loadByLanguage(language) {
95
+ const allFiles = await this.loadAll();
96
+ return allFiles.filter((file) => file.route.language === language);
97
+ }
98
+ /**
99
+ * Check if content exists for a specific language
100
+ * @param language - Language code
101
+ * @returns True if content exists for the language
102
+ */
103
+ async hasContentForLanguage(language) {
104
+ const filePaths = await this.discoverFiles();
105
+ // Check if any file starts with the language prefix
106
+ return filePaths.some((filePath) => {
107
+ const parts = filePath.split('/');
108
+ return parts.length > 0 && parts[0] === language;
109
+ });
110
+ }
111
+ /**
112
+ * Get statistics about discovered content
113
+ * @returns Content statistics
114
+ */
115
+ async getStats() {
116
+ const files = await this.loadAll();
117
+ const stats = {
118
+ totalFiles: files.length,
119
+ byLanguage: {},
120
+ byExtension: {},
121
+ };
122
+ for (const file of files) {
123
+ // Count by language
124
+ const lang = file.route.language;
125
+ stats.byLanguage[lang] = (stats.byLanguage[lang] || 0) + 1;
126
+ // Count by extension
127
+ const ext = path_1.default.extname(file.filePath);
128
+ stats.byExtension[ext] = (stats.byExtension[ext] || 0) + 1;
129
+ }
130
+ return stats;
131
+ }
132
+ /**
133
+ * Find a file by slug and language
134
+ * @param slug - Content slug
135
+ * @param language - Language code
136
+ * @returns Raw content file or undefined
137
+ */
138
+ async findFile(slug, language) {
139
+ const files = await this.loadAll();
140
+ return files.find((file) => {
141
+ return file.route.slug === slug && file.route.language === language;
142
+ });
143
+ }
144
+ }
145
+ exports.ContentLoader = ContentLoader;
146
+ //# sourceMappingURL=ContentLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentLoader.js","sourceRoot":"","sources":["../../src/content/ContentLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * ContentProcessor - Processes raw markdown content with Markdoc
3
+ * Extracts frontmatter, generates TOC, calculates reading time
4
+ */
5
+ import { ProcessedContent, ContentMetadata } from '../types/content';
6
+ import { RawContentFile } from './ContentLoader';
7
+ export declare class ContentProcessor {
8
+ private averageReadingSpeed;
9
+ constructor(averageReadingSpeed?: number);
10
+ /**
11
+ * Process a raw content file into structured content
12
+ * @param rawFile - Raw content file from ContentLoader
13
+ * @returns Processed content with metadata and renderable
14
+ */
15
+ process(rawFile: RawContentFile): ProcessedContent;
16
+ /**
17
+ * Process multiple raw files
18
+ * @param rawFiles - Array of raw content files
19
+ * @returns Array of processed content
20
+ */
21
+ processAll(rawFiles: RawContentFile[]): ProcessedContent[];
22
+ /**
23
+ * Extract frontmatter from Markdoc AST
24
+ */
25
+ private extractFrontmatter;
26
+ /**
27
+ * Generate a readable title from filename
28
+ * @param filePath - File path (e.g., "en/getting-started.md")
29
+ * @returns Human-readable title
30
+ */
31
+ private generateTitleFromFilename;
32
+ /**
33
+ * Convert a slug to human-readable title
34
+ * @param slug - Slugified string
35
+ * @returns Human-readable string
36
+ */
37
+ private humanizeSlug;
38
+ /**
39
+ * Validate frontmatter required fields
40
+ */
41
+ private validateFrontmatter;
42
+ /**
43
+ * Generate table of contents from headings in the AST
44
+ */
45
+ private generateTableOfContents;
46
+ /**
47
+ * Build hierarchical TOC structure from flat list of headings
48
+ */
49
+ private buildTocHierarchy;
50
+ /**
51
+ * Walk the AST and call visitor function for each node
52
+ */
53
+ private walkAST;
54
+ /**
55
+ * Extract text content from a node
56
+ */
57
+ private extractTextFromNode;
58
+ /**
59
+ * Generate a URL-friendly ID from heading text
60
+ */
61
+ private generateHeadingId;
62
+ /**
63
+ * Calculate word count from AST
64
+ */
65
+ private calculateWordCount;
66
+ /**
67
+ * Calculate estimated reading time in minutes
68
+ */
69
+ private calculateReadingTime;
70
+ /**
71
+ * Ensure every heading tag in the renderable tree has a stable id
72
+ */
73
+ private addHeadingAnchors;
74
+ /**
75
+ * Extract plain text from the renderable Markdoc tree
76
+ */
77
+ private extractTextFromRenderable;
78
+ /**
79
+ * Get content metadata without processing full content (lightweight)
80
+ * Useful for generating content index
81
+ */
82
+ getMetadataOnly(rawFile: RawContentFile): ContentMetadata;
83
+ }
84
+ //# sourceMappingURL=ContentProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentProcessor.d.ts","sourceRoot":"","sources":["../../src/content/ContentProcessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,gBAAgB,EAChB,eAAe,EAKhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,mBAAmB,CAAS;gBAExB,mBAAmB,GAAE,MAAY;IAI7C;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB;IA2FlD;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE;IAY1D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgD1B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,OAAO;IAUf;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAsBjC;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;CAsB1D"}