@dogsbay/format-mkdocs 0.2.0-beta.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.
- package/dist/autodoc/markdown-generator.d.ts +6 -0
- package/dist/autodoc/markdown-generator.d.ts.map +1 -0
- package/dist/autodoc/markdown-generator.js +242 -0
- package/dist/autodoc/markdown-generator.js.map +1 -0
- package/dist/autodoc/module-resolver.d.ts +8 -0
- package/dist/autodoc/module-resolver.d.ts.map +1 -0
- package/dist/autodoc/module-resolver.js +218 -0
- package/dist/autodoc/module-resolver.js.map +1 -0
- package/dist/autodoc/python-docstring.d.ts +7 -0
- package/dist/autodoc/python-docstring.d.ts.map +1 -0
- package/dist/autodoc/python-docstring.js +324 -0
- package/dist/autodoc/python-docstring.js.map +1 -0
- package/dist/autodoc/python-parser.d.ts +10 -0
- package/dist/autodoc/python-parser.d.ts.map +1 -0
- package/dist/autodoc/python-parser.js +541 -0
- package/dist/autodoc/python-parser.js.map +1 -0
- package/dist/autodoc/tree-builder.d.ts +9 -0
- package/dist/autodoc/tree-builder.d.ts.map +1 -0
- package/dist/autodoc/tree-builder.js +279 -0
- package/dist/autodoc/tree-builder.js.map +1 -0
- package/dist/autodoc/types.d.ts +128 -0
- package/dist/autodoc/types.d.ts.map +1 -0
- package/dist/autodoc/types.js +2 -0
- package/dist/autodoc/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +32 -0
- package/dist/cli.js.map +1 -0
- package/dist/export/to-astro.d.ts +26 -0
- package/dist/export/to-astro.d.ts.map +1 -0
- package/dist/export/to-astro.js +551 -0
- package/dist/export/to-astro.js.map +1 -0
- package/dist/export/to-mkdocs-project.d.ts +27 -0
- package/dist/export/to-mkdocs-project.d.ts.map +1 -0
- package/dist/export/to-mkdocs-project.js +192 -0
- package/dist/export/to-mkdocs-project.js.map +1 -0
- package/dist/export/to-mkdocs.d.ts +6 -0
- package/dist/export/to-mkdocs.d.ts.map +1 -0
- package/dist/export/to-mkdocs.js +178 -0
- package/dist/export/to-mkdocs.js.map +1 -0
- package/dist/importer.d.ts +30 -0
- package/dist/importer.d.ts.map +1 -0
- package/dist/importer.js +376 -0
- package/dist/importer.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +170 -0
- package/dist/index.js.map +1 -0
- package/dist/inline-walker.d.ts +17 -0
- package/dist/inline-walker.d.ts.map +1 -0
- package/dist/inline-walker.js +167 -0
- package/dist/inline-walker.js.map +1 -0
- package/dist/loader.d.ts +42 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +765 -0
- package/dist/loader.js.map +1 -0
- package/dist/parse.d.ts +12 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +46 -0
- package/dist/parse.js.map +1 -0
- package/dist/renderers/mermaid.d.ts +9 -0
- package/dist/renderers/mermaid.d.ts.map +1 -0
- package/dist/renderers/mermaid.js +117 -0
- package/dist/renderers/mermaid.js.map +1 -0
- package/dist/rules/admonition.d.ts +6 -0
- package/dist/rules/admonition.d.ts.map +1 -0
- package/dist/rules/admonition.js +73 -0
- package/dist/rules/admonition.js.map +1 -0
- package/dist/rules/annotations.d.ts +6 -0
- package/dist/rules/annotations.d.ts.map +1 -0
- package/dist/rules/annotations.js +57 -0
- package/dist/rules/annotations.js.map +1 -0
- package/dist/rules/autodoc.d.ts +7 -0
- package/dist/rules/autodoc.d.ts.map +1 -0
- package/dist/rules/autodoc.js +102 -0
- package/dist/rules/autodoc.js.map +1 -0
- package/dist/rules/blocks.d.ts +6 -0
- package/dist/rules/blocks.d.ts.map +1 -0
- package/dist/rules/blocks.js +172 -0
- package/dist/rules/blocks.js.map +1 -0
- package/dist/rules/content-tabs.d.ts +6 -0
- package/dist/rules/content-tabs.d.ts.map +1 -0
- package/dist/rules/content-tabs.js +67 -0
- package/dist/rules/content-tabs.js.map +1 -0
- package/dist/rules/docusaurus-admonitions.d.ts +7 -0
- package/dist/rules/docusaurus-admonitions.d.ts.map +1 -0
- package/dist/rules/docusaurus-admonitions.js +101 -0
- package/dist/rules/docusaurus-admonitions.js.map +1 -0
- package/dist/rules/file-include.d.ts +28 -0
- package/dist/rules/file-include.d.ts.map +1 -0
- package/dist/rules/file-include.js +198 -0
- package/dist/rules/file-include.js.map +1 -0
- package/dist/rules/footnotes.d.ts +6 -0
- package/dist/rules/footnotes.d.ts.map +1 -0
- package/dist/rules/footnotes.js +161 -0
- package/dist/rules/footnotes.js.map +1 -0
- package/dist/rules/icon-shortcode.d.ts +30 -0
- package/dist/rules/icon-shortcode.d.ts.map +1 -0
- package/dist/rules/icon-shortcode.js +169 -0
- package/dist/rules/icon-shortcode.js.map +1 -0
- package/dist/rules/keys.d.ts +6 -0
- package/dist/rules/keys.d.ts.map +1 -0
- package/dist/rules/keys.js +30 -0
- package/dist/rules/keys.js.map +1 -0
- package/dist/rules/link-rewrite.d.ts +7 -0
- package/dist/rules/link-rewrite.d.ts.map +1 -0
- package/dist/rules/link-rewrite.js +93 -0
- package/dist/rules/link-rewrite.js.map +1 -0
- package/dist/rules/math.d.ts +14 -0
- package/dist/rules/math.d.ts.map +1 -0
- package/dist/rules/math.js +114 -0
- package/dist/rules/math.js.map +1 -0
- package/dist/rules/md-in-html.d.ts +6 -0
- package/dist/rules/md-in-html.d.ts.map +1 -0
- package/dist/rules/md-in-html.js +135 -0
- package/dist/rules/md-in-html.js.map +1 -0
- package/dist/rules/snippets.d.ts +10 -0
- package/dist/rules/snippets.d.ts.map +1 -0
- package/dist/rules/snippets.js +109 -0
- package/dist/rules/snippets.js.map +1 -0
- package/dist/rules/templates.d.ts +15 -0
- package/dist/rules/templates.d.ts.map +1 -0
- package/dist/rules/templates.js +105 -0
- package/dist/rules/templates.js.map +1 -0
- package/dist/rules/variants.d.ts +12 -0
- package/dist/rules/variants.d.ts.map +1 -0
- package/dist/rules/variants.js +148 -0
- package/dist/rules/variants.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +2 -0
- package/dist/tree.js.map +1 -0
- package/dist/utils/indent.d.ts +18 -0
- package/dist/utils/indent.d.ts.map +1 -0
- package/dist/utils/indent.js +56 -0
- package/dist/utils/indent.js.map +1 -0
- package/dist/utils/types.d.ts +19 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +63 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/walker.d.ts +8 -0
- package/dist/walker.d.ts.map +1 -0
- package/dist/walker.js +193 -0
- package/dist/walker.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { readdirSync } from "node:fs";
|
|
2
|
+
import { resolve, dirname, basename, extname, join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Regex to parse variant filenames.
|
|
5
|
+
* Group 1: base name (tutorial001)
|
|
6
|
+
* Group 2: annotated flag (an) or undefined
|
|
7
|
+
* Group 3: version (py310, py39)
|
|
8
|
+
*/
|
|
9
|
+
const VARIANT_RE = /^(.+?)(?:_(an))?_(py\d+)$/;
|
|
10
|
+
/**
|
|
11
|
+
* Match {* path [annotations] *} lines
|
|
12
|
+
*/
|
|
13
|
+
const INCLUDE_LINE_RE = /^\{\*\s+(.+?)\s*\*\}$/;
|
|
14
|
+
function parseVariantFilename(filePath) {
|
|
15
|
+
const name = basename(filePath, extname(filePath));
|
|
16
|
+
const match = VARIANT_RE.exec(name);
|
|
17
|
+
if (!match)
|
|
18
|
+
return null;
|
|
19
|
+
return {
|
|
20
|
+
relPath: filePath,
|
|
21
|
+
base: match[1],
|
|
22
|
+
annotated: match[2] === "an",
|
|
23
|
+
version: match[3],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function versionLabel(version) {
|
|
27
|
+
const num = version.replace("py", "");
|
|
28
|
+
if (num.length >= 3) {
|
|
29
|
+
return `${num[0]}.${num.slice(1)}+`;
|
|
30
|
+
}
|
|
31
|
+
return `${num}+`;
|
|
32
|
+
}
|
|
33
|
+
function tabLabel(variant, hasAnnotatedSibling) {
|
|
34
|
+
const ver = `Python ${versionLabel(variant.version)}`;
|
|
35
|
+
if (!variant.annotated && hasAnnotatedSibling)
|
|
36
|
+
return `${ver} non-Annotated`;
|
|
37
|
+
return ver;
|
|
38
|
+
}
|
|
39
|
+
function sortVariants(a, b) {
|
|
40
|
+
if (a.version !== b.version)
|
|
41
|
+
return b.version.localeCompare(a.version);
|
|
42
|
+
if (a.annotated !== b.annotated)
|
|
43
|
+
return a.annotated ? -1 : 1;
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
function findSiblingVariants(referencedPath, docsDir) {
|
|
47
|
+
const absPath = resolve(docsDir, referencedPath);
|
|
48
|
+
const dir = dirname(absPath);
|
|
49
|
+
const ext = extname(absPath);
|
|
50
|
+
const info = parseVariantFilename(absPath);
|
|
51
|
+
if (!info)
|
|
52
|
+
return [];
|
|
53
|
+
let entries;
|
|
54
|
+
try {
|
|
55
|
+
entries = readdirSync(dir);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const relDir = dirname(referencedPath);
|
|
61
|
+
const siblings = [];
|
|
62
|
+
for (const entry of entries) {
|
|
63
|
+
if (extname(entry) !== ext)
|
|
64
|
+
continue;
|
|
65
|
+
const sibling = parseVariantFilename(join(dir, entry));
|
|
66
|
+
if (!sibling)
|
|
67
|
+
continue;
|
|
68
|
+
if (sibling.base !== info.base)
|
|
69
|
+
continue;
|
|
70
|
+
sibling.relPath = (relDir === "." ? entry : `${relDir}/${entry}`).replace(/\\/g, "/");
|
|
71
|
+
siblings.push(sibling);
|
|
72
|
+
}
|
|
73
|
+
return siblings.sort(sortVariants);
|
|
74
|
+
}
|
|
75
|
+
function createVariantsRule(options) {
|
|
76
|
+
return function variantsRule(state) {
|
|
77
|
+
if (state.inlineMode)
|
|
78
|
+
return;
|
|
79
|
+
const lines = state.src.split("\n");
|
|
80
|
+
let changed = false;
|
|
81
|
+
for (let i = 0; i < lines.length; i++) {
|
|
82
|
+
const line = lines[i].trim();
|
|
83
|
+
const includeMatch = INCLUDE_LINE_RE.exec(line);
|
|
84
|
+
if (!includeMatch)
|
|
85
|
+
continue;
|
|
86
|
+
const inner = includeMatch[1];
|
|
87
|
+
// Extract path (first token before any annotations)
|
|
88
|
+
const firstSpace = inner.search(/\s+(?:ln\[|hl\[)/);
|
|
89
|
+
const refPath = firstSpace === -1 ? inner : inner.substring(0, firstSpace);
|
|
90
|
+
const annotations = firstSpace === -1 ? "" : inner.substring(firstSpace);
|
|
91
|
+
// Check if this is a variant file
|
|
92
|
+
const absRef = resolve(options.docsDir, refPath);
|
|
93
|
+
if (!parseVariantFilename(absRef))
|
|
94
|
+
continue;
|
|
95
|
+
// Skip if already inside a //// tab block
|
|
96
|
+
let insideTab = false;
|
|
97
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
98
|
+
const prev = lines[j].trim();
|
|
99
|
+
if (/^\/\/\/\/\s*$/.test(prev))
|
|
100
|
+
break;
|
|
101
|
+
if (/^\/\/\/\/\s+tab\s*\|/.test(prev)) {
|
|
102
|
+
insideTab = true;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (insideTab)
|
|
107
|
+
continue;
|
|
108
|
+
// Find siblings (even a single variant gets wrapped in a tab)
|
|
109
|
+
const variants = findSiblingVariants(refPath, options.docsDir);
|
|
110
|
+
if (variants.length === 0)
|
|
111
|
+
continue;
|
|
112
|
+
// Build tab blocks
|
|
113
|
+
const tabLines = [];
|
|
114
|
+
const hasAnnotated = variants.some((v) => v.annotated);
|
|
115
|
+
for (const variant of variants) {
|
|
116
|
+
tabLines.push(`//// tab | ${tabLabel(variant, hasAnnotated)}`);
|
|
117
|
+
tabLines.push("");
|
|
118
|
+
if (!variant.annotated && hasAnnotated) {
|
|
119
|
+
tabLines.push("/// tip");
|
|
120
|
+
tabLines.push("");
|
|
121
|
+
tabLines.push("Prefer to use the `Annotated` version if possible.");
|
|
122
|
+
tabLines.push("");
|
|
123
|
+
tabLines.push("///");
|
|
124
|
+
tabLines.push("");
|
|
125
|
+
}
|
|
126
|
+
tabLines.push(`{* ${variant.relPath}${annotations} *}`);
|
|
127
|
+
tabLines.push("");
|
|
128
|
+
tabLines.push("////");
|
|
129
|
+
tabLines.push("");
|
|
130
|
+
}
|
|
131
|
+
lines.splice(i, 1, ...tabLines);
|
|
132
|
+
i += tabLines.length - 1;
|
|
133
|
+
changed = true;
|
|
134
|
+
}
|
|
135
|
+
if (changed) {
|
|
136
|
+
state.src = lines.join("\n");
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Register the variants preprocessor as a markdown-it core rule.
|
|
142
|
+
* Must run BEFORE file_include so that expanded tab blocks
|
|
143
|
+
* get their {* *} includes resolved.
|
|
144
|
+
*/
|
|
145
|
+
export function variantsPlugin(md, options) {
|
|
146
|
+
md.core.ruler.before("normalize", "variants", createVariantsRule(options));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/rules/variants.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/tree.js
ADDED
package/dist/tree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type StateBlock from "markdown-it/lib/rules_block/state_block.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Find the extent of an indented content block starting at `startLine`.
|
|
4
|
+
* Content must be indented by at least `minIndent` spaces.
|
|
5
|
+
* Blank lines within the block are included (don't terminate).
|
|
6
|
+
* Trailing blank lines are trimmed.
|
|
7
|
+
*
|
|
8
|
+
* Returns the line index one past the last content line.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findIndentedBlockEnd(state: StateBlock, startLine: number, endLine: number, minIndent: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Temporarily dedent lines by `indent` spaces and tokenize the inner content.
|
|
13
|
+
* Restores original line markers after tokenization.
|
|
14
|
+
* This enables recursive parsing — nested blocks at `indent` fewer spaces
|
|
15
|
+
* become top-level blocks in the inner parse pass.
|
|
16
|
+
*/
|
|
17
|
+
export declare function dedentAndTokenize(state: StateBlock, startLine: number, endLine: number, indent: number): void;
|
|
18
|
+
//# sourceMappingURL=indent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indent.d.ts","sourceRoot":"","sources":["../../src/utils/indent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,6CAA6C,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAkBR;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,IAAI,CA2BN"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the extent of an indented content block starting at `startLine`.
|
|
3
|
+
* Content must be indented by at least `minIndent` spaces.
|
|
4
|
+
* Blank lines within the block are included (don't terminate).
|
|
5
|
+
* Trailing blank lines are trimmed.
|
|
6
|
+
*
|
|
7
|
+
* Returns the line index one past the last content line.
|
|
8
|
+
*/
|
|
9
|
+
export function findIndentedBlockEnd(state, startLine, endLine, minIndent) {
|
|
10
|
+
let contentEnd = startLine;
|
|
11
|
+
while (contentEnd < endLine) {
|
|
12
|
+
if (state.isEmpty(contentEnd)) {
|
|
13
|
+
contentEnd++;
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (state.sCount[contentEnd] < minIndent)
|
|
17
|
+
break;
|
|
18
|
+
contentEnd++;
|
|
19
|
+
}
|
|
20
|
+
// Trim trailing blank lines
|
|
21
|
+
while (contentEnd > startLine && state.isEmpty(contentEnd - 1)) {
|
|
22
|
+
contentEnd--;
|
|
23
|
+
}
|
|
24
|
+
return contentEnd;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Temporarily dedent lines by `indent` spaces and tokenize the inner content.
|
|
28
|
+
* Restores original line markers after tokenization.
|
|
29
|
+
* This enables recursive parsing — nested blocks at `indent` fewer spaces
|
|
30
|
+
* become top-level blocks in the inner parse pass.
|
|
31
|
+
*/
|
|
32
|
+
export function dedentAndTokenize(state, startLine, endLine, indent) {
|
|
33
|
+
const savedBMarks = [];
|
|
34
|
+
const savedTShift = [];
|
|
35
|
+
const savedSCount = [];
|
|
36
|
+
const savedBlkIndent = state.blkIndent;
|
|
37
|
+
for (let i = startLine; i < endLine; i++) {
|
|
38
|
+
savedBMarks.push(state.bMarks[i]);
|
|
39
|
+
savedTShift.push(state.tShift[i]);
|
|
40
|
+
savedSCount.push(state.sCount[i]);
|
|
41
|
+
if (!state.isEmpty(i)) {
|
|
42
|
+
state.bMarks[i] += indent;
|
|
43
|
+
state.tShift[i] = Math.max(0, state.tShift[i] - indent);
|
|
44
|
+
state.sCount[i] = Math.max(0, state.sCount[i] - indent);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
state.blkIndent = 0;
|
|
48
|
+
state.md.block.tokenize(state, startLine, endLine);
|
|
49
|
+
for (let i = startLine; i < endLine; i++) {
|
|
50
|
+
state.bMarks[i] = savedBMarks[i - startLine];
|
|
51
|
+
state.tShift[i] = savedTShift[i - startLine];
|
|
52
|
+
state.sCount[i] = savedSCount[i - startLine];
|
|
53
|
+
}
|
|
54
|
+
state.blkIndent = savedBlkIndent;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=indent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indent.js","sourceRoot":"","sources":["../../src/utils/indent.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,SAAiB;IAEjB,IAAI,UAAU,GAAG,SAAS,CAAC;IAE3B,OAAO,UAAU,GAAG,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS;YAAE,MAAM;QAChD,UAAU,EAAE,CAAC;IACf,CAAC;IAED,4BAA4B;IAC5B,OAAO,UAAU,GAAG,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/D,UAAU,EAAE,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YACxD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IAEpB,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC7C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC7C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,CAAC,SAAS,GAAG,cAAc,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MkDocs Material admonition type aliases.
|
|
3
|
+
* Aliases resolve to their canonical type.
|
|
4
|
+
*/
|
|
5
|
+
export declare const TYPE_ALIASES: Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* The 12 canonical admonition types supported by MkDocs Material.
|
|
8
|
+
*/
|
|
9
|
+
export declare const VALID_TYPES: Set<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a type keyword to its canonical type.
|
|
12
|
+
* Unknown types fall back to "note".
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveType(raw: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Auto-capitalize a type keyword for default title.
|
|
17
|
+
*/
|
|
18
|
+
export declare function autoTitle(type: string): string;
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,aAatB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MkDocs Material admonition type aliases.
|
|
3
|
+
* Aliases resolve to their canonical type.
|
|
4
|
+
*/
|
|
5
|
+
export const TYPE_ALIASES = {
|
|
6
|
+
// abstract aliases
|
|
7
|
+
summary: "abstract",
|
|
8
|
+
tldr: "abstract",
|
|
9
|
+
// info aliases
|
|
10
|
+
todo: "info",
|
|
11
|
+
// tip aliases
|
|
12
|
+
hint: "tip",
|
|
13
|
+
important: "tip",
|
|
14
|
+
// success aliases
|
|
15
|
+
check: "success",
|
|
16
|
+
done: "success",
|
|
17
|
+
// question aliases
|
|
18
|
+
help: "question",
|
|
19
|
+
faq: "question",
|
|
20
|
+
// warning aliases
|
|
21
|
+
caution: "warning",
|
|
22
|
+
attention: "warning",
|
|
23
|
+
// failure aliases
|
|
24
|
+
fail: "failure",
|
|
25
|
+
missing: "failure",
|
|
26
|
+
// danger aliases
|
|
27
|
+
error: "danger",
|
|
28
|
+
// quote aliases
|
|
29
|
+
cite: "quote",
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The 12 canonical admonition types supported by MkDocs Material.
|
|
33
|
+
*/
|
|
34
|
+
export const VALID_TYPES = new Set([
|
|
35
|
+
"note",
|
|
36
|
+
"abstract",
|
|
37
|
+
"info",
|
|
38
|
+
"tip",
|
|
39
|
+
"success",
|
|
40
|
+
"question",
|
|
41
|
+
"warning",
|
|
42
|
+
"failure",
|
|
43
|
+
"danger",
|
|
44
|
+
"bug",
|
|
45
|
+
"example",
|
|
46
|
+
"quote",
|
|
47
|
+
]);
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a type keyword to its canonical type.
|
|
50
|
+
* Unknown types fall back to "note".
|
|
51
|
+
*/
|
|
52
|
+
export function resolveType(raw) {
|
|
53
|
+
const lower = raw.toLowerCase();
|
|
54
|
+
const resolved = TYPE_ALIASES[lower] ?? lower;
|
|
55
|
+
return VALID_TYPES.has(resolved) ? resolved : "note";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Auto-capitalize a type keyword for default title.
|
|
59
|
+
*/
|
|
60
|
+
export function autoTitle(type) {
|
|
61
|
+
return type.charAt(0).toUpperCase() + type.slice(1);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,mBAAmB;IACnB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,eAAe;IACf,IAAI,EAAE,MAAM;IACZ,cAAc;IACd,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,KAAK;IAChB,kBAAkB;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,mBAAmB;IACnB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,UAAU;IACf,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,kBAAkB;IAClB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,iBAAiB;IACjB,KAAK,EAAE,QAAQ;IACf,gBAAgB;IAChB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM;IACN,UAAU;IACV,MAAM;IACN,KAAK;IACL,SAAS;IACT,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,KAAK;IACL,SAAS;IACT,OAAO;CACR,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC9C,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/walker.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type Token from "markdown-it/lib/token.mjs";
|
|
2
|
+
import type { TreeNode } from "./tree.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convert a markdown-it token stream into a TreeNode[].
|
|
5
|
+
* Handles open/close token pairs by recursively collecting children.
|
|
6
|
+
*/
|
|
7
|
+
export declare function tokensToTree(tokens: Token[]): TreeNode[];
|
|
8
|
+
//# sourceMappingURL=walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAkCxD"}
|
package/dist/walker.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { walkInlineTokens } from "./inline-walker.js";
|
|
2
|
+
/**
|
|
3
|
+
* Convert a markdown-it token stream into a TreeNode[].
|
|
4
|
+
* Handles open/close token pairs by recursively collecting children.
|
|
5
|
+
*/
|
|
6
|
+
export function tokensToTree(tokens) {
|
|
7
|
+
let pos = 0;
|
|
8
|
+
function walk() {
|
|
9
|
+
const nodes = [];
|
|
10
|
+
while (pos < tokens.length) {
|
|
11
|
+
const token = tokens[pos];
|
|
12
|
+
// Close tokens: return to parent
|
|
13
|
+
if (token.nesting === -1) {
|
|
14
|
+
pos++;
|
|
15
|
+
return nodes;
|
|
16
|
+
}
|
|
17
|
+
// Open tokens: collect children until matching close
|
|
18
|
+
if (token.nesting === 1) {
|
|
19
|
+
pos++;
|
|
20
|
+
const node = openTokenToNode(token);
|
|
21
|
+
node.children = walk();
|
|
22
|
+
nodes.push(node);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Self-closing / inline tokens (nesting === 0)
|
|
26
|
+
pos++;
|
|
27
|
+
const node = flatTokenToNode(token);
|
|
28
|
+
if (node)
|
|
29
|
+
nodes.push(node);
|
|
30
|
+
}
|
|
31
|
+
return nodes;
|
|
32
|
+
}
|
|
33
|
+
return walk();
|
|
34
|
+
}
|
|
35
|
+
function openTokenToNode(token) {
|
|
36
|
+
switch (token.type) {
|
|
37
|
+
case "admonition_open":
|
|
38
|
+
return {
|
|
39
|
+
type: "callout",
|
|
40
|
+
props: {
|
|
41
|
+
variant: token.info,
|
|
42
|
+
title: token.meta?.title ?? null,
|
|
43
|
+
inline: token.meta?.inline ?? null,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
case "details_open":
|
|
47
|
+
return {
|
|
48
|
+
type: "details",
|
|
49
|
+
props: {
|
|
50
|
+
variant: token.info,
|
|
51
|
+
title: token.meta?.title ?? null,
|
|
52
|
+
open: token.meta?.open ?? false,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
case "tab_set_open":
|
|
56
|
+
return { type: "tabs" };
|
|
57
|
+
case "tab_panel_open":
|
|
58
|
+
return {
|
|
59
|
+
type: "tab",
|
|
60
|
+
props: { title: token.info },
|
|
61
|
+
};
|
|
62
|
+
case "annotation_list_open":
|
|
63
|
+
return { type: "annotation-list" };
|
|
64
|
+
case "paragraph_open":
|
|
65
|
+
return { type: "paragraph" };
|
|
66
|
+
case "heading_open":
|
|
67
|
+
return {
|
|
68
|
+
type: "heading",
|
|
69
|
+
props: { level: parseInt(token.tag.slice(1), 10) },
|
|
70
|
+
};
|
|
71
|
+
case "ordered_list_open":
|
|
72
|
+
return { type: "ordered-list" };
|
|
73
|
+
case "bullet_list_open":
|
|
74
|
+
return { type: "unordered-list" };
|
|
75
|
+
case "list_item_open":
|
|
76
|
+
return { type: "list-item" };
|
|
77
|
+
case "blockquote_open":
|
|
78
|
+
return { type: "blockquote" };
|
|
79
|
+
case "dl_open":
|
|
80
|
+
return { type: "deflist" };
|
|
81
|
+
case "dt_open":
|
|
82
|
+
return { type: "dt" };
|
|
83
|
+
case "dd_open":
|
|
84
|
+
return { type: "dd" };
|
|
85
|
+
case "html_container_open":
|
|
86
|
+
return {
|
|
87
|
+
type: "html-container",
|
|
88
|
+
props: {
|
|
89
|
+
tag: token.meta?.tag ?? "div",
|
|
90
|
+
attrs: token.meta?.attrs ?? {},
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
case "footnote_def_open":
|
|
94
|
+
return {
|
|
95
|
+
type: "footnote-def",
|
|
96
|
+
props: { label: token.meta?.label ?? "" },
|
|
97
|
+
};
|
|
98
|
+
default:
|
|
99
|
+
return { type: token.type.replace(/_open$/, "") };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function flatTokenToNode(token) {
|
|
103
|
+
switch (token.type) {
|
|
104
|
+
case "inline": {
|
|
105
|
+
const node = { type: "prose", html: token.content };
|
|
106
|
+
// Structured inline children (Notion-style rich text model)
|
|
107
|
+
if (token.children && token.children.length > 0) {
|
|
108
|
+
node.inline = walkInlineTokens(token.children);
|
|
109
|
+
}
|
|
110
|
+
return node;
|
|
111
|
+
}
|
|
112
|
+
case "math_block":
|
|
113
|
+
return {
|
|
114
|
+
type: "math-block",
|
|
115
|
+
props: { latex: token.content || token.meta?.latex || "" },
|
|
116
|
+
};
|
|
117
|
+
case "fence": {
|
|
118
|
+
const fenceMarker = token.markup || "```";
|
|
119
|
+
const { lang, title, highlights, lineNumbers } = parseFenceInfo(token.info);
|
|
120
|
+
return {
|
|
121
|
+
type: "code",
|
|
122
|
+
props: {
|
|
123
|
+
lang,
|
|
124
|
+
title: title || undefined,
|
|
125
|
+
code: token.content,
|
|
126
|
+
highlights: highlights || undefined,
|
|
127
|
+
lineNumbers: lineNumbers || undefined,
|
|
128
|
+
hasAnnotations: token.meta?.hasAnnotations ?? false,
|
|
129
|
+
fence: fenceMarker.length > 3 ? fenceMarker : undefined,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
case "code_block":
|
|
134
|
+
return { type: "code", props: { code: token.content } };
|
|
135
|
+
case "hr":
|
|
136
|
+
return { type: "hr" };
|
|
137
|
+
case "html_block": {
|
|
138
|
+
// Convert standalone <img> tags to structured paragraph > prose > image nodes
|
|
139
|
+
// so they can be rendered as BlockImage with optimization support
|
|
140
|
+
const imgMatch = token.content.match(/^\s*<img\s[^>]*?\bsrc=["']([^"']+)["'][^>]*?(?:\balt=["']([^"']*)["'])?[^>]*?\/?>\s*$/i);
|
|
141
|
+
if (imgMatch) {
|
|
142
|
+
const src = imgMatch[1];
|
|
143
|
+
// Extract alt — may appear before or after src
|
|
144
|
+
const altMatch = token.content.match(/\balt=["']([^"']*)["']/i);
|
|
145
|
+
const alt = altMatch ? altMatch[1] : "";
|
|
146
|
+
return {
|
|
147
|
+
type: "paragraph",
|
|
148
|
+
children: [
|
|
149
|
+
{
|
|
150
|
+
type: "prose",
|
|
151
|
+
inline: [{ type: "image", src, alt }],
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return { type: "html", html: token.content };
|
|
157
|
+
}
|
|
158
|
+
// Skip hidden/empty tokens
|
|
159
|
+
case "softbreak":
|
|
160
|
+
case "hardbreak":
|
|
161
|
+
return null;
|
|
162
|
+
default:
|
|
163
|
+
if (token.hidden)
|
|
164
|
+
return null;
|
|
165
|
+
return { type: token.type, html: token.content || undefined };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Parse fence info string to extract lang, title, hl_lines, and linenums.
|
|
170
|
+
* Handles: "yaml", "yaml title=\".rc\"", " yaml", "yaml hl_lines=\"2 3\"",
|
|
171
|
+
* "python linenums=\"1\""
|
|
172
|
+
*/
|
|
173
|
+
function parseFenceInfo(info) {
|
|
174
|
+
if (!info)
|
|
175
|
+
return { lang: null, title: null, highlights: null, lineNumbers: false };
|
|
176
|
+
const trimmed = info.trim();
|
|
177
|
+
if (!trimmed)
|
|
178
|
+
return { lang: null, title: null, highlights: null, lineNumbers: false };
|
|
179
|
+
// Extract title="..." if present
|
|
180
|
+
const titleMatch = trimmed.match(/\btitle="([^"]*)"/);
|
|
181
|
+
const title = titleMatch ? titleMatch[1] : null;
|
|
182
|
+
// Extract hl_lines="..." if present (e.g. hl_lines="2 3" or hl_lines="1-3 5")
|
|
183
|
+
const hlMatch = trimmed.match(/\bhl_lines="([^"]*)"/);
|
|
184
|
+
const highlights = hlMatch ? hlMatch[1] : null;
|
|
185
|
+
// Extract linenums if present (e.g. linenums="1")
|
|
186
|
+
const lineNumbers = /\blinenums=/.test(trimmed);
|
|
187
|
+
// Lang is the first word (before any space, brace, or title= attribute)
|
|
188
|
+
// Must be a word-like string, not empty or starting with special chars
|
|
189
|
+
const firstWord = trimmed.split(/[\s{]/)[0];
|
|
190
|
+
const lang = firstWord && !firstWord.includes("=") ? firstWord : null;
|
|
191
|
+
return { lang, title, highlights, lineNumbers };
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,SAAS,IAAI;QACX,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1B,iCAAiC;YACjC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,GAAG,EAAE,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;YAED,qDAAqD;YACrD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,EAAE,CAAC;gBACN,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,+CAA+C;YAC/C,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAY;IACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,IAAI;oBACnB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI;oBAChC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;iBACnC;aACF,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,IAAI;oBACnB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI;oBAChC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK;iBAChC;aACF,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAE1B,KAAK,gBAAgB;YACnB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;aAC7B,CAAC;QAEJ,KAAK,sBAAsB;YACzB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAErC,KAAK,gBAAgB;YACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,cAAc;YACjB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;aACnD,CAAC;QAEJ,KAAK,mBAAmB;YACtB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAElC,KAAK,kBAAkB;YACrB,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAEpC,KAAK,gBAAgB;YACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,iBAAiB;YACpB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAEhC,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAE7B,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAExB,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAExB,KAAK,qBAAqB;YACxB,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE;oBACL,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK;oBAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;iBAC/B;aACF,CAAC;QAEJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE;aAC1C,CAAC;QAEJ;YACE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAY;IACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9D,4DAA4D;YAC5D,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,YAAY;YACf,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE;aAC3D,CAAC;QAEJ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5E,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE;oBACL,IAAI;oBACJ,KAAK,EAAE,KAAK,IAAI,SAAS;oBACzB,IAAI,EAAE,KAAK,CAAC,OAAO;oBACnB,UAAU,EAAE,UAAU,IAAI,SAAS;oBACnC,WAAW,EAAE,WAAW,IAAI,SAAS;oBACrC,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,IAAI,KAAK;oBACnD,KAAK,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;iBACxD;aACF,CAAC;QACJ,CAAC;QAED,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAE1D,KAAK,IAAI;YACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAExB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,8EAA8E;YAC9E,kEAAkE;YAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAClC,wFAAwF,CACzF,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACxB,+CAA+C;gBAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;yBAC/C;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QAED,2BAA2B;QAC3B,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QAEd;YACE,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAAY;IAMlC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAEpF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAEvF,iCAAiC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhD,8EAA8E;IAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/C,kDAAkD;IAClD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEhD,wEAAwE;IACxE,uEAAuE;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAClD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dogsbay/format-mkdocs",
|
|
3
|
+
"version": "0.2.0-beta.0",
|
|
4
|
+
"description": "MkDocs format plugin for Dogsbay — import/export MkDocs projects via TreeNode[]",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./loader": {
|
|
14
|
+
"types": "./dist/loader.d.ts",
|
|
15
|
+
"import": "./dist/loader.js"
|
|
16
|
+
},
|
|
17
|
+
"./cli": {
|
|
18
|
+
"types": "./dist/cli.d.ts",
|
|
19
|
+
"import": "./dist/cli.js"
|
|
20
|
+
},
|
|
21
|
+
"./export/to-astro": {
|
|
22
|
+
"types": "./dist/export/to-astro.d.ts",
|
|
23
|
+
"import": "./dist/export/to-astro.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"README.md"
|
|
29
|
+
],
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"markdown-it": "^14.0.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@mermaid-js/mermaid-cli": "^11.12.0",
|
|
35
|
+
"@types/markdown-it": "^14.1.2",
|
|
36
|
+
"@types/node": "^25.5.0",
|
|
37
|
+
"@types/nunjucks": "^3.2.6",
|
|
38
|
+
"markdown-it": "^14.1.0",
|
|
39
|
+
"tsx": "^4.21.0",
|
|
40
|
+
"typescript": "^5.7.0",
|
|
41
|
+
"vitest": "^3.0.0"
|
|
42
|
+
},
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"markdown-it": "^14.1.0",
|
|
46
|
+
"markdown-it-deflist": "^3.0.0",
|
|
47
|
+
"nunjucks": "^3.2.4",
|
|
48
|
+
"tree-sitter-python": "^0.25.0",
|
|
49
|
+
"web-tree-sitter": "^0.26.8",
|
|
50
|
+
"yaml": "^2.8.3",
|
|
51
|
+
"@dogsbay/types": "0.2.0-beta.0"
|
|
52
|
+
},
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/dogsbay/dogsbay.git",
|
|
56
|
+
"directory": "packages/format-mkdocs"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/dogsbay/dogsbay/tree/main/packages/format-mkdocs",
|
|
59
|
+
"bugs": {
|
|
60
|
+
"url": "https://github.com/dogsbay/dogsbay/issues"
|
|
61
|
+
},
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build": "tsc",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"test:watch": "vitest",
|
|
66
|
+
"compare": "tsx scripts/build-comparison.ts",
|
|
67
|
+
"demo:build": "tsx scripts/build-trees.ts && cd demo && npx astro build",
|
|
68
|
+
"demo:preview": "cd demo && npx astro preview",
|
|
69
|
+
"demo:dev": "tsx scripts/build-trees.ts && cd demo && npx astro dev"
|
|
70
|
+
}
|
|
71
|
+
}
|