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,380 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ContentProcessor - Processes raw markdown content with Markdoc
|
|
4
|
+
* Extracts frontmatter, generates TOC, calculates reading time
|
|
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.ContentProcessor = void 0;
|
|
11
|
+
const markdoc_1 = __importDefault(require("@markdoc/markdoc"));
|
|
12
|
+
class ContentProcessor {
|
|
13
|
+
constructor(averageReadingSpeed = 200) {
|
|
14
|
+
this.averageReadingSpeed = averageReadingSpeed;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Process a raw content file into structured content
|
|
18
|
+
* @param rawFile - Raw content file from ContentLoader
|
|
19
|
+
* @returns Processed content with metadata and renderable
|
|
20
|
+
*/
|
|
21
|
+
process(rawFile) {
|
|
22
|
+
// Parse markdown with Markdoc
|
|
23
|
+
const ast = markdoc_1.default.parse(rawFile.content);
|
|
24
|
+
// Extract frontmatter from AST
|
|
25
|
+
const frontmatter = this.extractFrontmatter(ast);
|
|
26
|
+
// Validate frontmatter has required fields
|
|
27
|
+
this.validateFrontmatter(frontmatter, rawFile.filePath);
|
|
28
|
+
// Generate table of contents from headings
|
|
29
|
+
const toc = this.generateTableOfContents(ast);
|
|
30
|
+
// Calculate word count and reading time
|
|
31
|
+
const wordCount = this.calculateWordCount(ast);
|
|
32
|
+
const readingTime = this.calculateReadingTime(wordCount);
|
|
33
|
+
// Transform AST to renderable tree
|
|
34
|
+
const renderable = markdoc_1.default.transform(ast, {
|
|
35
|
+
nodes: {
|
|
36
|
+
heading: {
|
|
37
|
+
render: 'Heading',
|
|
38
|
+
attributes: {
|
|
39
|
+
level: { type: Number, required: true },
|
|
40
|
+
id: { type: String },
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
fence: {
|
|
44
|
+
render: 'CodeBlock',
|
|
45
|
+
attributes: {
|
|
46
|
+
language: { type: String },
|
|
47
|
+
content: { type: String },
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
image: {
|
|
51
|
+
render: 'Image',
|
|
52
|
+
attributes: {
|
|
53
|
+
src: { type: String, required: true },
|
|
54
|
+
alt: { type: String },
|
|
55
|
+
title: { type: String },
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
tags: {
|
|
60
|
+
card: {
|
|
61
|
+
render: 'Card',
|
|
62
|
+
attributes: {
|
|
63
|
+
title: { type: String, required: true },
|
|
64
|
+
href: { type: String },
|
|
65
|
+
icon: { type: String },
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
cardGrid: {
|
|
69
|
+
render: 'CardGrid',
|
|
70
|
+
attributes: {
|
|
71
|
+
cols: { type: Number, default: 2 },
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
callout: {
|
|
75
|
+
render: 'Callout',
|
|
76
|
+
attributes: {
|
|
77
|
+
type: { type: String, required: true, matches: ['note', 'warning', 'danger'] },
|
|
78
|
+
title: { type: String },
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
// Add heading anchors to renderable for table of contents
|
|
84
|
+
this.addHeadingAnchors(renderable);
|
|
85
|
+
// Build metadata
|
|
86
|
+
const metadata = {
|
|
87
|
+
slug: rawFile.route.slug,
|
|
88
|
+
filePath: rawFile.filePath,
|
|
89
|
+
language: rawFile.route.language,
|
|
90
|
+
path: rawFile.route.path,
|
|
91
|
+
dirPath: rawFile.route.dirPath,
|
|
92
|
+
frontmatter,
|
|
93
|
+
toc,
|
|
94
|
+
wordCount,
|
|
95
|
+
readingTime,
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
metadata,
|
|
99
|
+
renderable: renderable,
|
|
100
|
+
rawContent: rawFile.content,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Process multiple raw files
|
|
105
|
+
* @param rawFiles - Array of raw content files
|
|
106
|
+
* @returns Array of processed content
|
|
107
|
+
*/
|
|
108
|
+
processAll(rawFiles) {
|
|
109
|
+
return rawFiles.map((file) => {
|
|
110
|
+
try {
|
|
111
|
+
return this.process(file);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new Error(`Failed to process ${file.filePath}: ${error.message}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Extract frontmatter from Markdoc AST
|
|
120
|
+
*/
|
|
121
|
+
extractFrontmatter(ast) {
|
|
122
|
+
// Markdoc stores frontmatter in ast.attributes
|
|
123
|
+
const attributes = ast.attributes || {};
|
|
124
|
+
let parsedFrontmatter = {};
|
|
125
|
+
// Check if frontmatter is a string
|
|
126
|
+
if (typeof attributes.frontmatter === 'string') {
|
|
127
|
+
// Split by newlines and parse each line
|
|
128
|
+
const lines = attributes.frontmatter.split('\n');
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
// Find the first colon which separates key and value
|
|
131
|
+
const colonIndex = line.indexOf(':');
|
|
132
|
+
if (colonIndex > 0) {
|
|
133
|
+
const key = line.substring(0, colonIndex).trim();
|
|
134
|
+
const value = line.substring(colonIndex + 1).trim();
|
|
135
|
+
parsedFrontmatter[key] = value;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Use attributes directly if frontmatter is not a string
|
|
141
|
+
parsedFrontmatter = attributes;
|
|
142
|
+
}
|
|
143
|
+
// Build frontmatter object with required title field
|
|
144
|
+
const frontmatter = {
|
|
145
|
+
title: parsedFrontmatter.title || '',
|
|
146
|
+
description: parsedFrontmatter.description,
|
|
147
|
+
order: parsedFrontmatter.order !== undefined ? Number(parsedFrontmatter.order) : undefined,
|
|
148
|
+
draft: parsedFrontmatter.draft === true || parsedFrontmatter.draft === 'true',
|
|
149
|
+
tags: Array.isArray(parsedFrontmatter.tags) ? parsedFrontmatter.tags : undefined,
|
|
150
|
+
date: parsedFrontmatter.date,
|
|
151
|
+
author: parsedFrontmatter.author,
|
|
152
|
+
sidenavRef: parsedFrontmatter.sidenavRef,
|
|
153
|
+
};
|
|
154
|
+
// Add any custom frontmatter fields
|
|
155
|
+
for (const [key, value] of Object.entries(parsedFrontmatter)) {
|
|
156
|
+
if (!(key in frontmatter)) {
|
|
157
|
+
frontmatter[key] = value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return frontmatter;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Generate a readable title from filename
|
|
164
|
+
* @param filePath - File path (e.g., "en/getting-started.md")
|
|
165
|
+
* @returns Human-readable title
|
|
166
|
+
*/
|
|
167
|
+
generateTitleFromFilename(filePath) {
|
|
168
|
+
// Extract filename without extension
|
|
169
|
+
const parts = filePath.split('/');
|
|
170
|
+
const filename = parts[parts.length - 1].replace(/\.(md|mdx)$/, '');
|
|
171
|
+
// Handle index files
|
|
172
|
+
if (filename === 'index') {
|
|
173
|
+
// Use parent directory name if available
|
|
174
|
+
if (parts.length > 2) {
|
|
175
|
+
return this.humanizeSlug(parts[parts.length - 2]);
|
|
176
|
+
}
|
|
177
|
+
return 'Home';
|
|
178
|
+
}
|
|
179
|
+
// Convert filename to title (e.g., "getting-started" -> "Getting Started")
|
|
180
|
+
return this.humanizeSlug(filename);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Convert a slug to human-readable title
|
|
184
|
+
* @param slug - Slugified string
|
|
185
|
+
* @returns Human-readable string
|
|
186
|
+
*/
|
|
187
|
+
humanizeSlug(slug) {
|
|
188
|
+
return slug
|
|
189
|
+
.split(/[-_]/)
|
|
190
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
191
|
+
.join(' ');
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate frontmatter required fields
|
|
195
|
+
*/
|
|
196
|
+
validateFrontmatter(frontmatter, filePath) {
|
|
197
|
+
if (!frontmatter.title || frontmatter.title.trim() === '') {
|
|
198
|
+
throw new Error(`Missing required frontmatter 'title' in ${filePath}. All content files must include a title in frontmatter.`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Generate table of contents from headings in the AST
|
|
203
|
+
*/
|
|
204
|
+
generateTableOfContents(ast) {
|
|
205
|
+
const headings = [];
|
|
206
|
+
// Walk the AST to find all heading nodes
|
|
207
|
+
this.walkAST(ast, (node) => {
|
|
208
|
+
if (node.type === 'heading') {
|
|
209
|
+
const level = node.attributes?.level || 1;
|
|
210
|
+
const text = this.extractTextFromNode(node);
|
|
211
|
+
const id = this.generateHeadingId(text);
|
|
212
|
+
headings.push({
|
|
213
|
+
id,
|
|
214
|
+
text,
|
|
215
|
+
level,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
// Build hierarchical structure
|
|
220
|
+
return this.buildTocHierarchy(headings);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build hierarchical TOC structure from flat list of headings
|
|
224
|
+
*/
|
|
225
|
+
buildTocHierarchy(headings) {
|
|
226
|
+
const toc = [];
|
|
227
|
+
const stack = [];
|
|
228
|
+
for (const heading of headings) {
|
|
229
|
+
// Remove entries from stack that are same level or deeper
|
|
230
|
+
while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
|
|
231
|
+
stack.pop();
|
|
232
|
+
}
|
|
233
|
+
if (stack.length === 0) {
|
|
234
|
+
// Top-level heading
|
|
235
|
+
toc.push(heading);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// Nested heading
|
|
239
|
+
const parent = stack[stack.length - 1];
|
|
240
|
+
if (!parent.children) {
|
|
241
|
+
parent.children = [];
|
|
242
|
+
}
|
|
243
|
+
parent.children.push(heading);
|
|
244
|
+
}
|
|
245
|
+
stack.push(heading);
|
|
246
|
+
}
|
|
247
|
+
return toc;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Walk the AST and call visitor function for each node
|
|
251
|
+
*/
|
|
252
|
+
walkAST(node, visitor) {
|
|
253
|
+
visitor(node);
|
|
254
|
+
if (node.children && Array.isArray(node.children)) {
|
|
255
|
+
for (const child of node.children) {
|
|
256
|
+
this.walkAST(child, visitor);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Extract text content from a node
|
|
262
|
+
*/
|
|
263
|
+
extractTextFromNode(node) {
|
|
264
|
+
if (typeof node === 'string') {
|
|
265
|
+
return node;
|
|
266
|
+
}
|
|
267
|
+
if (node.type === 'text') {
|
|
268
|
+
return node.attributes?.content || '';
|
|
269
|
+
}
|
|
270
|
+
if (node.children && Array.isArray(node.children)) {
|
|
271
|
+
return node.children.map((child) => this.extractTextFromNode(child)).join('');
|
|
272
|
+
}
|
|
273
|
+
return '';
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Generate a URL-friendly ID from heading text
|
|
277
|
+
*/
|
|
278
|
+
generateHeadingId(text) {
|
|
279
|
+
return text
|
|
280
|
+
.toLowerCase()
|
|
281
|
+
.trim()
|
|
282
|
+
.replace(/[^\w\s-]/g, '')
|
|
283
|
+
.replace(/\s+/g, '-')
|
|
284
|
+
.replace(/-+/g, '-');
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Calculate word count from AST
|
|
288
|
+
*/
|
|
289
|
+
calculateWordCount(ast) {
|
|
290
|
+
let wordCount = 0;
|
|
291
|
+
this.walkAST(ast, (node) => {
|
|
292
|
+
if (node.type === 'text') {
|
|
293
|
+
const content = node.attributes?.content;
|
|
294
|
+
// Only count if content is actually a string
|
|
295
|
+
// Markdoc variables and other objects should be skipped
|
|
296
|
+
if (typeof content === 'string') {
|
|
297
|
+
const words = content.split(/\s+/).filter((word) => word.length > 0);
|
|
298
|
+
wordCount += words.length;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
return wordCount;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Calculate estimated reading time in minutes
|
|
306
|
+
*/
|
|
307
|
+
calculateReadingTime(wordCount) {
|
|
308
|
+
return Math.ceil(wordCount / this.averageReadingSpeed);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Ensure every heading tag in the renderable tree has a stable id
|
|
312
|
+
*/
|
|
313
|
+
addHeadingAnchors(node) {
|
|
314
|
+
if (!node || typeof node !== 'object') {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (node instanceof markdoc_1.default.Tag) {
|
|
318
|
+
if (node.name === 'Heading') {
|
|
319
|
+
const text = this.extractTextFromRenderable(node.children);
|
|
320
|
+
const id = this.generateHeadingId(text);
|
|
321
|
+
node.attributes = {
|
|
322
|
+
...(node.attributes ?? {}),
|
|
323
|
+
id,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
if (Array.isArray(node.children)) {
|
|
327
|
+
node.children.forEach((child) => this.addHeadingAnchors(child));
|
|
328
|
+
}
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (Array.isArray(node)) {
|
|
332
|
+
node.forEach((child) => this.addHeadingAnchors(child));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Extract plain text from the renderable Markdoc tree
|
|
337
|
+
*/
|
|
338
|
+
extractTextFromRenderable(node) {
|
|
339
|
+
if (!node)
|
|
340
|
+
return '';
|
|
341
|
+
if (typeof node === 'string') {
|
|
342
|
+
return node;
|
|
343
|
+
}
|
|
344
|
+
if (Array.isArray(node)) {
|
|
345
|
+
return node.map((child) => this.extractTextFromRenderable(child)).join('');
|
|
346
|
+
}
|
|
347
|
+
if (node instanceof markdoc_1.default.Tag) {
|
|
348
|
+
return this.extractTextFromRenderable(node.children);
|
|
349
|
+
}
|
|
350
|
+
if (typeof node === 'object' && node.attributes?.content) {
|
|
351
|
+
return String(node.attributes.content);
|
|
352
|
+
}
|
|
353
|
+
return '';
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get content metadata without processing full content (lightweight)
|
|
357
|
+
* Useful for generating content index
|
|
358
|
+
*/
|
|
359
|
+
getMetadataOnly(rawFile) {
|
|
360
|
+
const ast = markdoc_1.default.parse(rawFile.content);
|
|
361
|
+
const frontmatter = this.extractFrontmatter(ast);
|
|
362
|
+
this.validateFrontmatter(frontmatter, rawFile.filePath);
|
|
363
|
+
const toc = this.generateTableOfContents(ast);
|
|
364
|
+
const wordCount = this.calculateWordCount(ast);
|
|
365
|
+
const readingTime = this.calculateReadingTime(wordCount);
|
|
366
|
+
return {
|
|
367
|
+
slug: rawFile.route.slug,
|
|
368
|
+
filePath: rawFile.filePath,
|
|
369
|
+
language: rawFile.route.language,
|
|
370
|
+
path: rawFile.route.path,
|
|
371
|
+
dirPath: rawFile.route.dirPath,
|
|
372
|
+
frontmatter,
|
|
373
|
+
toc,
|
|
374
|
+
wordCount,
|
|
375
|
+
readingTime,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
exports.ContentProcessor = ContentProcessor;
|
|
380
|
+
//# sourceMappingURL=ContentProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentProcessor.js","sourceRoot":"","sources":["../../src/content/ContentProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RouteManager - Manages URL routing and path construction
|
|
3
|
+
* Handles language prefixing and route generation for content files
|
|
4
|
+
*/
|
|
5
|
+
import { Route, RouteMap } from '../types/navigation';
|
|
6
|
+
export declare class RouteManager {
|
|
7
|
+
private defaultLanguage;
|
|
8
|
+
private availableLanguages;
|
|
9
|
+
constructor(defaultLanguage?: string, availableLanguages?: string[]);
|
|
10
|
+
/**
|
|
11
|
+
* Create a route object from a content file path
|
|
12
|
+
* @param filePath - Relative path from content/ directory (e.g., "en/getting-started.md")
|
|
13
|
+
* @returns Route object with path, slug, language, and file locations
|
|
14
|
+
*/
|
|
15
|
+
createRoute(filePath: string): Route;
|
|
16
|
+
/**
|
|
17
|
+
* Create a route map from an array of file paths
|
|
18
|
+
* @param filePaths - Array of relative file paths from content/ directory
|
|
19
|
+
* @returns RouteMap with URL paths as keys
|
|
20
|
+
*/
|
|
21
|
+
createRouteMap(filePaths: string[]): RouteMap;
|
|
22
|
+
/**
|
|
23
|
+
* Get HTML file path in dist/
|
|
24
|
+
* @param slug - Content slug
|
|
25
|
+
* @param language - Language code
|
|
26
|
+
* @returns Path to HTML file relative to dist/
|
|
27
|
+
*/
|
|
28
|
+
private getHtmlPath;
|
|
29
|
+
/**
|
|
30
|
+
* Extract language from a URL path
|
|
31
|
+
* @param urlPath - URL path (e.g., "/es/getting-started")
|
|
32
|
+
* @returns Language code or default language
|
|
33
|
+
*/
|
|
34
|
+
getLanguageFromPath(urlPath: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Get slug from a URL path (without language prefix)
|
|
37
|
+
* @param urlPath - URL path (e.g., "/es/getting-started" or "/getting-started")
|
|
38
|
+
* @returns Slug
|
|
39
|
+
*/
|
|
40
|
+
getSlugFromPath(urlPath: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Build URL path from slug and language
|
|
43
|
+
* @param slug - Content slug
|
|
44
|
+
* @param language - Language code
|
|
45
|
+
* @returns URL path
|
|
46
|
+
*/
|
|
47
|
+
buildPath(slug: string, language: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Check if a language is the default language
|
|
50
|
+
* @param language - Language code
|
|
51
|
+
* @returns True if default language
|
|
52
|
+
*/
|
|
53
|
+
isDefaultLanguage(language: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Get all routes grouped by language
|
|
56
|
+
* @param routeMap - Route map
|
|
57
|
+
* @returns Map of language code to array of routes
|
|
58
|
+
*/
|
|
59
|
+
groupRoutesByLanguage(routeMap: RouteMap): Map<string, Route[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Find route by slug and language
|
|
62
|
+
* @param routeMap - Route map
|
|
63
|
+
* @param slug - Content slug
|
|
64
|
+
* @param language - Language code
|
|
65
|
+
* @returns Route or undefined
|
|
66
|
+
*/
|
|
67
|
+
findRoute(routeMap: RouteMap, slug: string, language: string): Route | undefined;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=RouteManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteManager.d.ts","sourceRoot":"","sources":["../../src/content/RouteManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAStD,qBAAa,YAAY;IACvB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAW;gBAEzB,eAAe,GAAE,MAAa,EAAE,kBAAkB,GAAE,MAAM,EAAW;IAKjF;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK;IA4BpC;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ;IAW7C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAcnB;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAU5C;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYxC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjD;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5C;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAY/D;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;CAIjF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RouteManager - Manages URL routing and path construction
|
|
4
|
+
* Handles language prefixing and route generation for content files
|
|
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.RouteManager = void 0;
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const language_utils_1 = require("../utils/language-utils");
|
|
13
|
+
const slugify_1 = require("../utils/slugify");
|
|
14
|
+
class RouteManager {
|
|
15
|
+
constructor(defaultLanguage = 'en', availableLanguages = ['en']) {
|
|
16
|
+
this.defaultLanguage = defaultLanguage;
|
|
17
|
+
this.availableLanguages = availableLanguages;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a route object from a content file path
|
|
21
|
+
* @param filePath - Relative path from content/ directory (e.g., "en/getting-started.md")
|
|
22
|
+
* @returns Route object with path, slug, language, and file locations
|
|
23
|
+
*/
|
|
24
|
+
createRoute(filePath) {
|
|
25
|
+
// Extract language from path
|
|
26
|
+
const language = (0, language_utils_1.extractLanguageFromPath)(filePath) || this.defaultLanguage;
|
|
27
|
+
// Get relative path without language prefix
|
|
28
|
+
const relativePath = (0, language_utils_1.removeLanguagePrefix)(filePath);
|
|
29
|
+
// Generate slug from file path
|
|
30
|
+
const slug = (0, slugify_1.filePathToSlug)(relativePath);
|
|
31
|
+
// Get directory path (excluding language prefix and filename)
|
|
32
|
+
const dirPath = path_1.default.dirname(relativePath) === '.' ? '' : path_1.default.dirname(relativePath);
|
|
33
|
+
// Build URL path with language prefix and directory structure
|
|
34
|
+
const urlPath = (0, language_utils_1.buildPathWithLanguage)(dirPath ? `${dirPath}/${slug}` : slug, language, this.defaultLanguage);
|
|
35
|
+
return {
|
|
36
|
+
path: urlPath,
|
|
37
|
+
slug,
|
|
38
|
+
dirPath,
|
|
39
|
+
language,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a route map from an array of file paths
|
|
44
|
+
* @param filePaths - Array of relative file paths from content/ directory
|
|
45
|
+
* @returns RouteMap with URL paths as keys
|
|
46
|
+
*/
|
|
47
|
+
createRouteMap(filePaths) {
|
|
48
|
+
const routeMap = new Map();
|
|
49
|
+
for (const filePath of filePaths) {
|
|
50
|
+
const route = this.createRoute(filePath);
|
|
51
|
+
routeMap.set(route.path, route);
|
|
52
|
+
}
|
|
53
|
+
return routeMap;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get HTML file path in dist/
|
|
57
|
+
* @param slug - Content slug
|
|
58
|
+
* @param language - Language code
|
|
59
|
+
* @returns Path to HTML file relative to dist/
|
|
60
|
+
*/
|
|
61
|
+
getHtmlPath(slug, language) {
|
|
62
|
+
// For default language: slug/index.html or index.html (for home)
|
|
63
|
+
// For other languages: lang/slug/index.html or lang/index.html (for home)
|
|
64
|
+
if (language === this.defaultLanguage) {
|
|
65
|
+
return slug === 'index'
|
|
66
|
+
? 'index.html'
|
|
67
|
+
: `${slug}/index.html`;
|
|
68
|
+
}
|
|
69
|
+
return slug === 'index'
|
|
70
|
+
? `${language}/index.html`
|
|
71
|
+
: `${language}/${slug}/index.html`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Extract language from a URL path
|
|
75
|
+
* @param urlPath - URL path (e.g., "/es/getting-started")
|
|
76
|
+
* @returns Language code or default language
|
|
77
|
+
*/
|
|
78
|
+
getLanguageFromPath(urlPath) {
|
|
79
|
+
const parts = urlPath.split('/').filter(Boolean);
|
|
80
|
+
if (parts.length > 0 && this.availableLanguages.includes(parts[0])) {
|
|
81
|
+
return parts[0];
|
|
82
|
+
}
|
|
83
|
+
return this.defaultLanguage;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get slug from a URL path (without language prefix)
|
|
87
|
+
* @param urlPath - URL path (e.g., "/es/getting-started" or "/getting-started")
|
|
88
|
+
* @returns Slug
|
|
89
|
+
*/
|
|
90
|
+
getSlugFromPath(urlPath) {
|
|
91
|
+
const parts = urlPath.split('/').filter(Boolean);
|
|
92
|
+
// Remove language prefix if present
|
|
93
|
+
if (parts.length > 0 && this.availableLanguages.includes(parts[0])) {
|
|
94
|
+
parts.shift();
|
|
95
|
+
}
|
|
96
|
+
// Join remaining parts (for nested paths)
|
|
97
|
+
return parts.join('/') || 'index';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build URL path from slug and language
|
|
101
|
+
* @param slug - Content slug
|
|
102
|
+
* @param language - Language code
|
|
103
|
+
* @returns URL path
|
|
104
|
+
*/
|
|
105
|
+
buildPath(slug, language) {
|
|
106
|
+
return (0, language_utils_1.buildPathWithLanguage)(slug, language, this.defaultLanguage);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if a language is the default language
|
|
110
|
+
* @param language - Language code
|
|
111
|
+
* @returns True if default language
|
|
112
|
+
*/
|
|
113
|
+
isDefaultLanguage(language) {
|
|
114
|
+
return language === this.defaultLanguage;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get all routes grouped by language
|
|
118
|
+
* @param routeMap - Route map
|
|
119
|
+
* @returns Map of language code to array of routes
|
|
120
|
+
*/
|
|
121
|
+
groupRoutesByLanguage(routeMap) {
|
|
122
|
+
const grouped = new Map();
|
|
123
|
+
for (const route of routeMap.values()) {
|
|
124
|
+
const existing = grouped.get(route.language) || [];
|
|
125
|
+
existing.push(route);
|
|
126
|
+
grouped.set(route.language, existing);
|
|
127
|
+
}
|
|
128
|
+
return grouped;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Find route by slug and language
|
|
132
|
+
* @param routeMap - Route map
|
|
133
|
+
* @param slug - Content slug
|
|
134
|
+
* @param language - Language code
|
|
135
|
+
* @returns Route or undefined
|
|
136
|
+
*/
|
|
137
|
+
findRoute(routeMap, slug, language) {
|
|
138
|
+
const path = this.buildPath(slug, language);
|
|
139
|
+
return routeMap.get(path);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.RouteManager = RouteManager;
|
|
143
|
+
//# sourceMappingURL=RouteManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteManager.js","sourceRoot":"","sources":["../../src/content/RouteManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callout component styles
|
|
3
|
+
* Note, warning, and danger callout boxes
|
|
4
|
+
*/
|
|
5
|
+
import { GlobalVariables } from '../types';
|
|
6
|
+
export declare class CalloutStyleGenerator {
|
|
7
|
+
private globalVars;
|
|
8
|
+
constructor(globalVars: GlobalVariables);
|
|
9
|
+
generate(): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=callout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callout.d.ts","sourceRoot":"","sources":["../../../src/styles/components/callout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,qBAAa,qBAAqB;IACpB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,eAAe;IAE/C,QAAQ,IAAI,MAAM;CAoEnB"}
|