@neuledge/context 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Build utilities for generating documentation packages.
3
+ * Parses markdown/MDX files and chunks them by section.
4
+ */
5
+ export interface DocFrontmatter {
6
+ title?: string;
7
+ description?: string;
8
+ }
9
+ export interface DocSection {
10
+ docPath: string;
11
+ docTitle: string;
12
+ sectionTitle: string;
13
+ content: string;
14
+ tokens: number;
15
+ hasCode: boolean;
16
+ }
17
+ export interface ParsedDoc {
18
+ path: string;
19
+ frontmatter: DocFrontmatter;
20
+ sections: DocSection[];
21
+ }
22
+ /**
23
+ * Parse a markdown/MDX file and extract sections.
24
+ */
25
+ export declare function parseMarkdown(source: string, filePath: string): ParsedDoc;
package/dist/build.js ADDED
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Build utilities for generating documentation packages.
3
+ * Parses markdown/MDX files and chunks them by section.
4
+ */
5
+ import remarkFrontmatter from "remark-frontmatter";
6
+ import remarkParse from "remark-parse";
7
+ import { unified } from "unified";
8
+ import { parse as parseYaml } from "yaml";
9
+ const MAX_CHUNK_TOKENS = 800;
10
+ const HARD_LIMIT_TOKENS = 1200; // Absolute maximum - split unconditionally above this
11
+ const MIN_CHUNK_TOKENS = 5; // Filter out trivial chunks like "<br/>" (2 tokens)
12
+ const TOC_LINK_RATIO = 0.5; // Skip sections where >50% of content is links
13
+ /** Rough token estimate: ~4 chars per token. */
14
+ function estimateTokens(text) {
15
+ return Math.ceil(text.length / 4);
16
+ }
17
+ /** Check if content contains code blocks. */
18
+ function hasCodeBlock(content) {
19
+ return /```[\s\S]*?```/.test(content);
20
+ }
21
+ /**
22
+ * Check if a section is likely a table of contents.
23
+ * Detects based on section title or high link-to-content ratio.
24
+ */
25
+ function isTableOfContents(sectionTitle, content) {
26
+ const lowerTitle = sectionTitle.toLowerCase();
27
+ // Check title patterns
28
+ if (lowerTitle.includes("table of contents") ||
29
+ lowerTitle === "toc" ||
30
+ lowerTitle === "contents" ||
31
+ lowerTitle === "index") {
32
+ return true;
33
+ }
34
+ // Check link ratio - TOC sections are mostly links
35
+ const linkPattern = /\[([^\]]*)\]\([^)]+\)/g;
36
+ const links = content.match(linkPattern) || [];
37
+ const linkTextLength = links.reduce((sum, link) => sum + link.length, 0);
38
+ // If more than 50% of content is links, likely a TOC
39
+ if (content.length > 0 && linkTextLength / content.length > TOC_LINK_RATIO) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ /**
45
+ * Split oversized content at code block boundaries or line boundaries.
46
+ * This handles the case where a single "paragraph" (like a large code block) exceeds limits.
47
+ */
48
+ function splitOversizedContent(content) {
49
+ const tokens = estimateTokens(content);
50
+ if (tokens <= HARD_LIMIT_TOKENS) {
51
+ return [content];
52
+ }
53
+ // First try to split at code block boundaries
54
+ const codeBlockRegex = /```[\s\S]*?```/g;
55
+ const parts = [];
56
+ let lastIndex = 0;
57
+ for (const match of content.matchAll(codeBlockRegex)) {
58
+ const beforeBlock = content.slice(lastIndex, match.index).trim();
59
+ if (beforeBlock) {
60
+ parts.push(beforeBlock);
61
+ }
62
+ parts.push(match[0]);
63
+ lastIndex = (match.index ?? 0) + match[0].length;
64
+ }
65
+ const afterLast = content.slice(lastIndex).trim();
66
+ if (afterLast) {
67
+ parts.push(afterLast);
68
+ }
69
+ // If we got multiple parts, recursively process each
70
+ if (parts.length > 1) {
71
+ return parts.flatMap(splitOversizedContent);
72
+ }
73
+ // Single block still too large - split by lines
74
+ const lines = content.split("\n");
75
+ const chunks = [];
76
+ let currentChunk = "";
77
+ let currentTokens = 0;
78
+ for (const line of lines) {
79
+ const lineTokens = estimateTokens(`${line}\n`);
80
+ if (currentTokens + lineTokens > HARD_LIMIT_TOKENS && currentChunk) {
81
+ chunks.push(currentChunk.trim());
82
+ currentChunk = line;
83
+ currentTokens = lineTokens;
84
+ }
85
+ else {
86
+ currentChunk += (currentChunk ? "\n" : "") + line;
87
+ currentTokens += lineTokens;
88
+ }
89
+ }
90
+ if (currentChunk.trim()) {
91
+ chunks.push(currentChunk.trim());
92
+ }
93
+ return chunks;
94
+ }
95
+ /** Extract frontmatter from AST. */
96
+ function extractFrontmatter(tree) {
97
+ const yamlNode = tree.children.find((n) => n.type === "yaml");
98
+ if (!yamlNode)
99
+ return {};
100
+ try {
101
+ return parseYaml(yamlNode.value);
102
+ }
103
+ catch {
104
+ return {};
105
+ }
106
+ }
107
+ /** Get heading text from AST node. */
108
+ function getHeadingText(node) {
109
+ let text = "";
110
+ for (const child of node.children) {
111
+ if (child.type === "text") {
112
+ text += child.value;
113
+ }
114
+ else if (child.type === "inlineCode") {
115
+ text += child.value;
116
+ }
117
+ }
118
+ return text;
119
+ }
120
+ /** Convert AST nodes back to markdown text (simplified). */
121
+ function astToMarkdown(nodes, source) {
122
+ if (nodes.length === 0)
123
+ return "";
124
+ const first = nodes[0];
125
+ const last = nodes[nodes.length - 1];
126
+ if (!first || !last)
127
+ return "";
128
+ const startOffset = first.position?.start?.offset;
129
+ const endOffset = last.position?.end?.offset;
130
+ if (startOffset != null && endOffset != null) {
131
+ return source.slice(startOffset, endOffset);
132
+ }
133
+ return "";
134
+ }
135
+ /** Remove MDX-specific tags from content. */
136
+ function cleanMdxContent(content) {
137
+ // Remove React-style tags like <AppOnly>, <PagesOnly>, etc.
138
+ let cleaned = content.replace(/<\/?[A-Z][a-zA-Z]*\s*\/?>/g, "");
139
+ // Remove empty lines created by tag removal
140
+ cleaned = cleaned.replace(/\n{3,}/g, "\n\n");
141
+ return cleaned.trim();
142
+ }
143
+ /** Helper to create a section with proper part numbering. */
144
+ function createSection(docPath, docTitle, sectionTitle, content, partNum) {
145
+ const cleanedContent = cleanMdxContent(content);
146
+ const tokens = estimateTokens(cleanedContent);
147
+ if (!cleanedContent || tokens < MIN_CHUNK_TOKENS) {
148
+ return null;
149
+ }
150
+ return {
151
+ docPath,
152
+ docTitle,
153
+ sectionTitle: partNum > 1 ? `${sectionTitle} (part ${partNum})` : sectionTitle,
154
+ content: cleanedContent,
155
+ tokens,
156
+ hasCode: hasCodeBlock(cleanedContent),
157
+ };
158
+ }
159
+ /** Split content at paragraph boundaries for large sections. */
160
+ function splitAtParagraphs(content, docPath, docTitle, sectionTitle) {
161
+ const paragraphs = content.split(/\n\n+/);
162
+ const sections = [];
163
+ let currentContent = "";
164
+ let currentTokens = 0;
165
+ let partNum = 1;
166
+ for (const para of paragraphs) {
167
+ const paraTokens = estimateTokens(para);
168
+ // If a single paragraph exceeds hard limit, split it further
169
+ if (paraTokens > HARD_LIMIT_TOKENS) {
170
+ // First, flush current content
171
+ if (currentContent) {
172
+ const section = createSection(docPath, docTitle, sectionTitle, currentContent, partNum);
173
+ if (section) {
174
+ sections.push(section);
175
+ partNum++;
176
+ }
177
+ currentContent = "";
178
+ currentTokens = 0;
179
+ }
180
+ // Split the oversized paragraph
181
+ const subParts = splitOversizedContent(para);
182
+ for (const subPart of subParts) {
183
+ const section = createSection(docPath, docTitle, sectionTitle, subPart, partNum);
184
+ if (section) {
185
+ sections.push(section);
186
+ partNum++;
187
+ }
188
+ }
189
+ continue;
190
+ }
191
+ if (currentTokens + paraTokens > MAX_CHUNK_TOKENS && currentContent) {
192
+ const section = createSection(docPath, docTitle, sectionTitle, currentContent, partNum);
193
+ if (section) {
194
+ sections.push(section);
195
+ partNum++;
196
+ }
197
+ currentContent = para;
198
+ currentTokens = paraTokens;
199
+ }
200
+ else {
201
+ currentContent += (currentContent ? "\n\n" : "") + para;
202
+ currentTokens += paraTokens;
203
+ }
204
+ }
205
+ if (currentContent) {
206
+ const section = createSection(docPath, docTitle, sectionTitle, currentContent, partNum);
207
+ if (section) {
208
+ sections.push(section);
209
+ }
210
+ }
211
+ return sections;
212
+ }
213
+ /**
214
+ * Parse a markdown/MDX file and extract sections.
215
+ */
216
+ export function parseMarkdown(source, filePath) {
217
+ const processor = unified().use(remarkParse).use(remarkFrontmatter, ["yaml"]);
218
+ const tree = processor.parse(source);
219
+ const frontmatter = extractFrontmatter(tree);
220
+ const docTitle = frontmatter.title ||
221
+ filePath
222
+ .split("/")
223
+ .pop()
224
+ ?.replace(/\.mdx?$/, "") ||
225
+ "Untitled";
226
+ // Remove frontmatter and JSX import statements from source for extraction
227
+ let cleanSource = source;
228
+ const yamlNode = tree.children.find((n) => n.type === "yaml");
229
+ if (yamlNode?.position?.end?.offset) {
230
+ cleanSource = source.slice(yamlNode.position.end.offset);
231
+ }
232
+ // Remove import statements
233
+ cleanSource = cleanSource.replace(/^import\s+.*?[;\n]/gm, "");
234
+ const sections = [];
235
+ // Find all h2 headings and their content
236
+ const contentNodes = tree.children.filter((n) => n.type !== "yaml" &&
237
+ !(n.type === "paragraph" &&
238
+ /^import\s/.test(source.slice(n.position?.start?.offset ?? 0, n.position?.end?.offset ?? 0))));
239
+ let currentH2 = null;
240
+ let currentNodes = [];
241
+ for (const node of contentNodes) {
242
+ if (node.type === "heading" && node.depth === 2) {
243
+ // Save previous section
244
+ if (currentH2 && currentNodes.length > 0) {
245
+ const content = astToMarkdown(currentNodes, source);
246
+ const cleanedContent = cleanMdxContent(content);
247
+ // Skip TOC sections (high link ratio or TOC-like title)
248
+ if (cleanedContent && !isTableOfContents(currentH2, cleanedContent)) {
249
+ const tokens = estimateTokens(cleanedContent);
250
+ if (tokens > MAX_CHUNK_TOKENS) {
251
+ sections.push(...splitAtParagraphs(cleanedContent, filePath, docTitle, currentH2));
252
+ }
253
+ else if (tokens >= MIN_CHUNK_TOKENS) {
254
+ sections.push({
255
+ docPath: filePath,
256
+ docTitle,
257
+ sectionTitle: currentH2,
258
+ content: cleanedContent,
259
+ tokens,
260
+ hasCode: hasCodeBlock(cleanedContent),
261
+ });
262
+ }
263
+ }
264
+ }
265
+ currentH2 = getHeadingText(node);
266
+ currentNodes = [];
267
+ }
268
+ else if (currentH2) {
269
+ currentNodes.push(node);
270
+ }
271
+ else if (node.type === "heading" && node.depth === 1) {
272
+ }
273
+ else {
274
+ // Content before first h2 - use docTitle as section
275
+ if (!currentH2) {
276
+ currentH2 = "Introduction";
277
+ }
278
+ currentNodes.push(node);
279
+ }
280
+ }
281
+ // Save last section
282
+ if (currentH2 && currentNodes.length > 0) {
283
+ const content = astToMarkdown(currentNodes, source);
284
+ const cleanedContent = cleanMdxContent(content);
285
+ // Skip TOC sections (high link ratio or TOC-like title)
286
+ if (cleanedContent && !isTableOfContents(currentH2, cleanedContent)) {
287
+ const tokens = estimateTokens(cleanedContent);
288
+ if (tokens > MAX_CHUNK_TOKENS) {
289
+ sections.push(...splitAtParagraphs(cleanedContent, filePath, docTitle, currentH2));
290
+ }
291
+ else if (tokens >= MIN_CHUNK_TOKENS) {
292
+ sections.push({
293
+ docPath: filePath,
294
+ docTitle,
295
+ sectionTitle: currentH2,
296
+ content: cleanedContent,
297
+ tokens,
298
+ hasCode: hasCodeBlock(cleanedContent),
299
+ });
300
+ }
301
+ }
302
+ }
303
+ return {
304
+ path: filePath,
305
+ frontmatter,
306
+ sections,
307
+ };
308
+ }
309
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ type SourceType = "file" | "url" | "git" | "local-dir";
3
+ /** Detect the type of source based on the input string. */
4
+ export declare function detectSourceType(source: string): SourceType;
5
+ export interface AddFromGitOptions {
6
+ version?: string;
7
+ docsPath?: string;
8
+ name?: string;
9
+ save?: string;
10
+ lang?: string;
11
+ }
12
+ export {};