@openuji/speculator 0.3.1 → 0.4.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/README.md +111 -50
- package/dist/file-provider/__tests__/compliance.test.d.ts +5 -0
- package/dist/file-provider/__tests__/compliance.test.d.ts.map +1 -0
- package/dist/file-provider/__tests__/compliance.test.js +52 -0
- package/dist/file-provider/__tests__/compliance.test.js.map +1 -0
- package/dist/file-provider/index.d.ts +8 -0
- package/dist/file-provider/index.d.ts.map +1 -0
- package/dist/file-provider/index.js +10 -0
- package/dist/file-provider/index.js.map +1 -0
- package/dist/file-provider/memory.d.ts +46 -0
- package/dist/file-provider/memory.d.ts.map +1 -0
- package/dist/file-provider/memory.js +99 -0
- package/dist/file-provider/memory.js.map +1 -0
- package/dist/file-provider/node.d.ts +32 -0
- package/dist/file-provider/node.d.ts.map +1 -0
- package/dist/file-provider/node.js +65 -0
- package/dist/file-provider/node.js.map +1 -0
- package/dist/file-provider/types.d.ts +69 -0
- package/dist/file-provider/types.d.ts.map +1 -0
- package/dist/file-provider/types.js +47 -0
- package/dist/file-provider/types.js.map +1 -0
- package/dist/file-provider/web.d.ts +32 -0
- package/dist/file-provider/web.d.ts.map +1 -0
- package/dist/file-provider/web.js +77 -0
- package/dist/file-provider/web.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/parse/AsideHtmlParser.d.ts +12 -0
- package/dist/parse/AsideHtmlParser.d.ts.map +1 -0
- package/dist/parse/AsideHtmlParser.js +74 -0
- package/dist/parse/AsideHtmlParser.js.map +1 -0
- package/dist/parse/BlockquoteHtmlParser.d.ts +11 -0
- package/dist/parse/BlockquoteHtmlParser.d.ts.map +1 -0
- package/dist/parse/BlockquoteHtmlParser.js +28 -0
- package/dist/parse/BlockquoteHtmlParser.js.map +1 -0
- package/dist/parse/BlockquoteMarkdownParser.d.ts +11 -0
- package/dist/parse/BlockquoteMarkdownParser.d.ts.map +1 -0
- package/dist/parse/BlockquoteMarkdownParser.js +26 -0
- package/dist/parse/BlockquoteMarkdownParser.js.map +1 -0
- package/dist/parse/CodeHtmlParser.d.ts +11 -0
- package/dist/parse/CodeHtmlParser.d.ts.map +1 -0
- package/dist/parse/CodeHtmlParser.js +38 -0
- package/dist/parse/CodeHtmlParser.js.map +1 -0
- package/dist/parse/CodeMarkdownParser.d.ts +11 -0
- package/dist/parse/CodeMarkdownParser.d.ts.map +1 -0
- package/dist/parse/CodeMarkdownParser.js +29 -0
- package/dist/parse/CodeMarkdownParser.js.map +1 -0
- package/dist/parse/DfnHtmlParser.d.ts +12 -0
- package/dist/parse/DfnHtmlParser.d.ts.map +1 -0
- package/dist/parse/DfnHtmlParser.js +53 -0
- package/dist/parse/DfnHtmlParser.js.map +1 -0
- package/dist/parse/HeadingsHtmlParser.d.ts +11 -0
- package/dist/parse/HeadingsHtmlParser.d.ts.map +1 -0
- package/dist/parse/HeadingsHtmlParser.js +30 -0
- package/dist/parse/HeadingsHtmlParser.js.map +1 -0
- package/dist/parse/HeadingsMarkdownParser.d.ts +11 -0
- package/dist/parse/HeadingsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/HeadingsMarkdownParser.js +26 -0
- package/dist/parse/HeadingsMarkdownParser.js.map +1 -0
- package/dist/parse/InlinesHtmlParser.d.ts +12 -0
- package/dist/parse/InlinesHtmlParser.d.ts.map +1 -0
- package/dist/parse/InlinesHtmlParser.js +150 -0
- package/dist/parse/InlinesHtmlParser.js.map +1 -0
- package/dist/parse/InlinesMarkdownParser.d.ts +11 -0
- package/dist/parse/InlinesMarkdownParser.d.ts.map +1 -0
- package/dist/parse/InlinesMarkdownParser.js +91 -0
- package/dist/parse/InlinesMarkdownParser.js.map +1 -0
- package/dist/parse/ListsHtmlParser.d.ts +11 -0
- package/dist/parse/ListsHtmlParser.d.ts.map +1 -0
- package/dist/parse/ListsHtmlParser.js +71 -0
- package/dist/parse/ListsHtmlParser.js.map +1 -0
- package/dist/parse/ListsMarkdownParser.d.ts +11 -0
- package/dist/parse/ListsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/ListsMarkdownParser.js +46 -0
- package/dist/parse/ListsMarkdownParser.js.map +1 -0
- package/dist/parse/MiscHtmlParser.d.ts +12 -0
- package/dist/parse/MiscHtmlParser.d.ts.map +1 -0
- package/dist/parse/MiscHtmlParser.js +85 -0
- package/dist/parse/MiscHtmlParser.js.map +1 -0
- package/dist/parse/MiscMarkdownParser.d.ts +11 -0
- package/dist/parse/MiscMarkdownParser.d.ts.map +1 -0
- package/dist/parse/MiscMarkdownParser.js +38 -0
- package/dist/parse/MiscMarkdownParser.js.map +1 -0
- package/dist/parse/ParagraphsHtmlParser.d.ts +11 -0
- package/dist/parse/ParagraphsHtmlParser.d.ts.map +1 -0
- package/dist/parse/ParagraphsHtmlParser.js +30 -0
- package/dist/parse/ParagraphsHtmlParser.js.map +1 -0
- package/dist/parse/ParagraphsMarkdownParser.d.ts +11 -0
- package/dist/parse/ParagraphsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/ParagraphsMarkdownParser.js +25 -0
- package/dist/parse/ParagraphsMarkdownParser.js.map +1 -0
- package/dist/parse/SectionsHtmlParser.d.ts +12 -0
- package/dist/parse/SectionsHtmlParser.d.ts.map +1 -0
- package/dist/parse/SectionsHtmlParser.js +58 -0
- package/dist/parse/SectionsHtmlParser.js.map +1 -0
- package/dist/parse/TablesHtmlParser.d.ts +11 -0
- package/dist/parse/TablesHtmlParser.d.ts.map +1 -0
- package/dist/parse/TablesHtmlParser.js +81 -0
- package/dist/parse/TablesHtmlParser.js.map +1 -0
- package/dist/parse/TablesMarkdownParser.d.ts +11 -0
- package/dist/parse/TablesMarkdownParser.d.ts.map +1 -0
- package/dist/parse/TablesMarkdownParser.js +56 -0
- package/dist/parse/TablesMarkdownParser.js.map +1 -0
- package/dist/parse/XrefHtmlParser.d.ts +12 -0
- package/dist/parse/XrefHtmlParser.d.ts.map +1 -0
- package/dist/parse/XrefHtmlParser.js +124 -0
- package/dist/parse/XrefHtmlParser.js.map +1 -0
- package/dist/parse/__tests__/assembler.test.d.ts +5 -0
- package/dist/parse/__tests__/assembler.test.d.ts.map +1 -0
- package/dist/parse/__tests__/assembler.test.js +135 -0
- package/dist/parse/__tests__/assembler.test.js.map +1 -0
- package/dist/parse/__tests__/html.test.d.ts +5 -0
- package/dist/parse/__tests__/html.test.d.ts.map +1 -0
- package/dist/parse/__tests__/html.test.js +149 -0
- package/dist/parse/__tests__/html.test.js.map +1 -0
- package/dist/parse/__tests__/markdown.test.d.ts +5 -0
- package/dist/parse/__tests__/markdown.test.d.ts.map +1 -0
- package/dist/parse/__tests__/markdown.test.js +133 -0
- package/dist/parse/__tests__/markdown.test.js.map +1 -0
- package/dist/parse/__tests__/pipeline.test.d.ts +5 -0
- package/dist/parse/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/parse/__tests__/pipeline.test.js +215 -0
- package/dist/parse/__tests__/pipeline.test.js.map +1 -0
- package/dist/parse/__tests__/respec.test.d.ts +7 -0
- package/dist/parse/__tests__/respec.test.d.ts.map +1 -0
- package/dist/parse/__tests__/respec.test.js +151 -0
- package/dist/parse/__tests__/respec.test.js.map +1 -0
- package/dist/parse/assembler.d.ts +20 -0
- package/dist/parse/assembler.d.ts.map +1 -0
- package/dist/parse/assembler.js +175 -0
- package/dist/parse/assembler.js.map +1 -0
- package/dist/parse/html/AsideHtmlParser.d.ts +12 -0
- package/dist/parse/html/AsideHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/AsideHtmlParser.js +74 -0
- package/dist/parse/html/AsideHtmlParser.js.map +1 -0
- package/dist/parse/html/BlockquoteHtmlParser.d.ts +11 -0
- package/dist/parse/html/BlockquoteHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/BlockquoteHtmlParser.js +28 -0
- package/dist/parse/html/BlockquoteHtmlParser.js.map +1 -0
- package/dist/parse/html/CodeHtmlParser.d.ts +11 -0
- package/dist/parse/html/CodeHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/CodeHtmlParser.js +38 -0
- package/dist/parse/html/CodeHtmlParser.js.map +1 -0
- package/dist/parse/html/DfnHtmlParser.d.ts +12 -0
- package/dist/parse/html/DfnHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/DfnHtmlParser.js +53 -0
- package/dist/parse/html/DfnHtmlParser.js.map +1 -0
- package/dist/parse/html/HeadingsHtmlParser.d.ts +11 -0
- package/dist/parse/html/HeadingsHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/HeadingsHtmlParser.js +30 -0
- package/dist/parse/html/HeadingsHtmlParser.js.map +1 -0
- package/dist/parse/html/InlinesHtmlParser.d.ts +12 -0
- package/dist/parse/html/InlinesHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/InlinesHtmlParser.js +150 -0
- package/dist/parse/html/InlinesHtmlParser.js.map +1 -0
- package/dist/parse/html/ListsHtmlParser.d.ts +11 -0
- package/dist/parse/html/ListsHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/ListsHtmlParser.js +71 -0
- package/dist/parse/html/ListsHtmlParser.js.map +1 -0
- package/dist/parse/html/MiscHtmlParser.d.ts +12 -0
- package/dist/parse/html/MiscHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/MiscHtmlParser.js +85 -0
- package/dist/parse/html/MiscHtmlParser.js.map +1 -0
- package/dist/parse/html/ParagraphsHtmlParser.d.ts +11 -0
- package/dist/parse/html/ParagraphsHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/ParagraphsHtmlParser.js +30 -0
- package/dist/parse/html/ParagraphsHtmlParser.js.map +1 -0
- package/dist/parse/html/SectionsHtmlParser.d.ts +12 -0
- package/dist/parse/html/SectionsHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/SectionsHtmlParser.js +58 -0
- package/dist/parse/html/SectionsHtmlParser.js.map +1 -0
- package/dist/parse/html/TablesHtmlParser.d.ts +11 -0
- package/dist/parse/html/TablesHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/TablesHtmlParser.js +81 -0
- package/dist/parse/html/TablesHtmlParser.js.map +1 -0
- package/dist/parse/html/XrefHtmlParser.d.ts +12 -0
- package/dist/parse/html/XrefHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/XrefHtmlParser.js +125 -0
- package/dist/parse/html/XrefHtmlParser.js.map +1 -0
- package/dist/parse/html/handlers/blockquote.d.ts +9 -0
- package/dist/parse/html/handlers/blockquote.d.ts.map +1 -0
- package/dist/parse/html/handlers/blockquote.js +21 -0
- package/dist/parse/html/handlers/blockquote.js.map +1 -0
- package/dist/parse/html/handlers/code.d.ts +9 -0
- package/dist/parse/html/handlers/code.d.ts.map +1 -0
- package/dist/parse/html/handlers/code.js +31 -0
- package/dist/parse/html/handlers/code.js.map +1 -0
- package/dist/parse/html/handlers/containers.d.ts +16 -0
- package/dist/parse/html/handlers/containers.d.ts.map +1 -0
- package/dist/parse/html/handlers/containers.js +25 -0
- package/dist/parse/html/handlers/containers.js.map +1 -0
- package/dist/parse/html/handlers/heading.d.ts +9 -0
- package/dist/parse/html/handlers/heading.d.ts.map +1 -0
- package/dist/parse/html/handlers/heading.js +26 -0
- package/dist/parse/html/handlers/heading.js.map +1 -0
- package/dist/parse/html/handlers/index.d.ts +23 -0
- package/dist/parse/html/handlers/index.d.ts.map +1 -0
- package/dist/parse/html/handlers/index.js +47 -0
- package/dist/parse/html/handlers/index.js.map +1 -0
- package/dist/parse/html/handlers/inline.d.ts +35 -0
- package/dist/parse/html/handlers/inline.d.ts.map +1 -0
- package/dist/parse/html/handlers/inline.js +119 -0
- package/dist/parse/html/handlers/inline.js.map +1 -0
- package/dist/parse/html/handlers/list.d.ts +9 -0
- package/dist/parse/html/handlers/list.d.ts.map +1 -0
- package/dist/parse/html/handlers/list.js +63 -0
- package/dist/parse/html/handlers/list.js.map +1 -0
- package/dist/parse/html/handlers/paragraph.d.ts +9 -0
- package/dist/parse/html/handlers/paragraph.d.ts.map +1 -0
- package/dist/parse/html/handlers/paragraph.js +20 -0
- package/dist/parse/html/handlers/paragraph.js.map +1 -0
- package/dist/parse/html/handlers/section.d.ts +9 -0
- package/dist/parse/html/handlers/section.d.ts.map +1 -0
- package/dist/parse/html/handlers/section.js +53 -0
- package/dist/parse/html/handlers/section.js.map +1 -0
- package/dist/parse/html/index.d.ts +5 -0
- package/dist/parse/html/index.d.ts.map +1 -0
- package/dist/parse/html/index.js +12 -0
- package/dist/parse/html/index.js.map +1 -0
- package/dist/parse/html/parser.d.ts +51 -0
- package/dist/parse/html/parser.d.ts.map +1 -0
- package/dist/parse/html/parser.js +228 -0
- package/dist/parse/html/parser.js.map +1 -0
- package/dist/parse/index.d.ts +16 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +19 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/parse/markdown/BlockquoteMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/BlockquoteMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/BlockquoteMarkdownParser.js +26 -0
- package/dist/parse/markdown/BlockquoteMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/CodeMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/CodeMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/CodeMarkdownParser.js +29 -0
- package/dist/parse/markdown/CodeMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/HeadingsMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/HeadingsMarkdownParser.js +26 -0
- package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/InlinesMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/InlinesMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/InlinesMarkdownParser.js +91 -0
- package/dist/parse/markdown/InlinesMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/ListsMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/ListsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/ListsMarkdownParser.js +46 -0
- package/dist/parse/markdown/ListsMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/MiscMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/MiscMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/MiscMarkdownParser.js +38 -0
- package/dist/parse/markdown/MiscMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/ParagraphsMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/ParagraphsMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/ParagraphsMarkdownParser.js +25 -0
- package/dist/parse/markdown/ParagraphsMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/TablesMarkdownParser.d.ts +11 -0
- package/dist/parse/markdown/TablesMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/TablesMarkdownParser.js +56 -0
- package/dist/parse/markdown/TablesMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/handlers/blockquote.d.ts +9 -0
- package/dist/parse/markdown/handlers/blockquote.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/blockquote.js +22 -0
- package/dist/parse/markdown/handlers/blockquote.js.map +1 -0
- package/dist/parse/markdown/handlers/code.d.ts +9 -0
- package/dist/parse/markdown/handlers/code.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/code.js +25 -0
- package/dist/parse/markdown/handlers/code.js.map +1 -0
- package/dist/parse/markdown/handlers/heading.d.ts +9 -0
- package/dist/parse/markdown/handlers/heading.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/heading.js +22 -0
- package/dist/parse/markdown/handlers/heading.js.map +1 -0
- package/dist/parse/markdown/handlers/index.d.ts +23 -0
- package/dist/parse/markdown/handlers/index.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/index.js +47 -0
- package/dist/parse/markdown/handlers/index.js.map +1 -0
- package/dist/parse/markdown/handlers/inline.d.ts +35 -0
- package/dist/parse/markdown/handlers/inline.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/inline.js +126 -0
- package/dist/parse/markdown/handlers/inline.js.map +1 -0
- package/dist/parse/markdown/handlers/list.d.ts +9 -0
- package/dist/parse/markdown/handlers/list.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/list.js +42 -0
- package/dist/parse/markdown/handlers/list.js.map +1 -0
- package/dist/parse/markdown/handlers/misc.d.ts +15 -0
- package/dist/parse/markdown/handlers/misc.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/misc.js +38 -0
- package/dist/parse/markdown/handlers/misc.js.map +1 -0
- package/dist/parse/markdown/handlers/paragraph.d.ts +9 -0
- package/dist/parse/markdown/handlers/paragraph.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/paragraph.js +21 -0
- package/dist/parse/markdown/handlers/paragraph.js.map +1 -0
- package/dist/parse/markdown/handlers/table.d.ts +9 -0
- package/dist/parse/markdown/handlers/table.d.ts.map +1 -0
- package/dist/parse/markdown/handlers/table.js +52 -0
- package/dist/parse/markdown/handlers/table.js.map +1 -0
- package/dist/parse/markdown/index.d.ts +5 -0
- package/dist/parse/markdown/index.d.ts.map +1 -0
- package/dist/parse/markdown/index.js +12 -0
- package/dist/parse/markdown/index.js.map +1 -0
- package/dist/parse/markdown/parser.d.ts +51 -0
- package/dist/parse/markdown/parser.d.ts.map +1 -0
- package/dist/parse/markdown/parser.js +134 -0
- package/dist/parse/markdown/parser.js.map +1 -0
- package/dist/parse/normalize.d.ts +51 -0
- package/dist/parse/normalize.d.ts.map +1 -0
- package/dist/parse/normalize.js +78 -0
- package/dist/parse/normalize.js.map +1 -0
- package/dist/parse/parsers.d.ts +37 -0
- package/dist/parse/parsers.d.ts.map +1 -0
- package/dist/parse/parsers.js +86 -0
- package/dist/parse/parsers.js.map +1 -0
- package/dist/parse/pipeline.d.ts +41 -0
- package/dist/parse/pipeline.d.ts.map +1 -0
- package/dist/parse/pipeline.js +120 -0
- package/dist/parse/pipeline.js.map +1 -0
- package/dist/parse/registry.d.ts +156 -0
- package/dist/parse/registry.d.ts.map +1 -0
- package/dist/parse/registry.js +104 -0
- package/dist/parse/registry.js.map +1 -0
- package/dist/parse/types.d.ts +67 -0
- package/dist/parse/types.d.ts.map +1 -0
- package/dist/parse/types.js +19 -0
- package/dist/parse/types.js.map +1 -0
- package/dist/pipeline/__tests__/pipeline.test.d.ts +5 -0
- package/dist/pipeline/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/pipeline.test.js +69 -0
- package/dist/pipeline/__tests__/pipeline.test.js.map +1 -0
- package/dist/pipeline/__tests__/single-as-workspace.test.d.ts +2 -0
- package/dist/pipeline/__tests__/single-as-workspace.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/single-as-workspace.test.js +19 -0
- package/dist/pipeline/__tests__/single-as-workspace.test.js.map +1 -0
- package/dist/pipeline/__tests__/workspace-rules.test.d.ts +11 -0
- package/dist/pipeline/__tests__/workspace-rules.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/workspace-rules.test.js +54 -0
- package/dist/pipeline/__tests__/workspace-rules.test.js.map +1 -0
- package/dist/pipeline/__tests__/workspace.test.d.ts +2 -0
- package/dist/pipeline/__tests__/workspace.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/workspace.test.js +61 -0
- package/dist/pipeline/__tests__/workspace.test.js.map +1 -0
- package/dist/pipeline/index.d.ts +34 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +45 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/runner.d.ts +38 -0
- package/dist/pipeline/runner.d.ts.map +1 -0
- package/dist/pipeline/runner.js +128 -0
- package/dist/pipeline/runner.js.map +1 -0
- package/dist/pipeline/types.d.ts +106 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +9 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/pipeline/workspace-index.d.ts +11 -0
- package/dist/pipeline/workspace-index.d.ts.map +1 -0
- package/dist/pipeline/workspace-index.js +57 -0
- package/dist/pipeline/workspace-index.js.map +1 -0
- package/dist/plugins/__tests__/citation-transform.test.d.ts +7 -0
- package/dist/plugins/__tests__/citation-transform.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/citation-transform.test.js +89 -0
- package/dist/plugins/__tests__/citation-transform.test.js.map +1 -0
- package/dist/plugins/__tests__/dfn-parsing.test.d.ts +2 -0
- package/dist/plugins/__tests__/dfn-parsing.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/dfn-parsing.test.js +65 -0
- package/dist/plugins/__tests__/dfn-parsing.test.js.map +1 -0
- package/dist/plugins/__tests__/dfn-resolve.test.d.ts +5 -0
- package/dist/plugins/__tests__/dfn-resolve.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/dfn-resolve.test.js +152 -0
- package/dist/plugins/__tests__/dfn-resolve.test.js.map +1 -0
- package/dist/plugins/__tests__/xref-parsing.test.d.ts +2 -0
- package/dist/plugins/__tests__/xref-parsing.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/xref-parsing.test.js +66 -0
- package/dist/plugins/__tests__/xref-parsing.test.js.map +1 -0
- package/dist/plugins/aside.d.ts +12 -0
- package/dist/plugins/aside.d.ts.map +1 -0
- package/dist/plugins/aside.js +78 -0
- package/dist/plugins/aside.js.map +1 -0
- package/dist/plugins/blockquote.d.ts +11 -0
- package/dist/plugins/blockquote.d.ts.map +1 -0
- package/dist/plugins/blockquote.js +47 -0
- package/dist/plugins/blockquote.js.map +1 -0
- package/dist/plugins/citation-transform.d.ts +19 -0
- package/dist/plugins/citation-transform.d.ts.map +1 -0
- package/dist/plugins/citation-transform.js +176 -0
- package/dist/plugins/citation-transform.js.map +1 -0
- package/dist/plugins/citation.d.ts +21 -0
- package/dist/plugins/citation.d.ts.map +1 -0
- package/dist/plugins/citation.js +131 -0
- package/dist/plugins/citation.js.map +1 -0
- package/dist/plugins/code.d.ts +11 -0
- package/dist/plugins/code.d.ts.map +1 -0
- package/dist/plugins/code.js +60 -0
- package/dist/plugins/code.js.map +1 -0
- package/dist/plugins/core-html.d.ts +27 -0
- package/dist/plugins/core-html.d.ts.map +1 -0
- package/dist/plugins/core-html.js +53 -0
- package/dist/plugins/core-html.js.map +1 -0
- package/dist/plugins/core-markdown.d.ts +26 -0
- package/dist/plugins/core-markdown.d.ts.map +1 -0
- package/dist/plugins/core-markdown.js +55 -0
- package/dist/plugins/core-markdown.js.map +1 -0
- package/dist/plugins/data-cite.d.ts +12 -0
- package/dist/plugins/data-cite.d.ts.map +1 -0
- package/dist/plugins/data-cite.js +50 -0
- package/dist/plugins/data-cite.js.map +1 -0
- package/dist/plugins/dfn-resolve.d.ts +15 -0
- package/dist/plugins/dfn-resolve.d.ts.map +1 -0
- package/dist/plugins/dfn-resolve.js +257 -0
- package/dist/plugins/dfn-resolve.js.map +1 -0
- package/dist/plugins/dfn.d.ts +12 -0
- package/dist/plugins/dfn.d.ts.map +1 -0
- package/dist/plugins/dfn.js +57 -0
- package/dist/plugins/dfn.js.map +1 -0
- package/dist/plugins/directives.d.ts +8 -0
- package/dist/plugins/directives.d.ts.map +1 -0
- package/dist/plugins/directives.js +34 -0
- package/dist/plugins/directives.js.map +1 -0
- package/dist/plugins/heading.d.ts +11 -0
- package/dist/plugins/heading.d.ts.map +1 -0
- package/dist/plugins/heading.js +49 -0
- package/dist/plugins/heading.js.map +1 -0
- package/dist/plugins/index.d.ts +12 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +26 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/inline.d.ts +12 -0
- package/dist/plugins/inline.d.ts.map +1 -0
- package/dist/plugins/inline.js +234 -0
- package/dist/plugins/inline.js.map +1 -0
- package/dist/plugins/list.d.ts +11 -0
- package/dist/plugins/list.d.ts.map +1 -0
- package/dist/plugins/list.js +110 -0
- package/dist/plugins/list.js.map +1 -0
- package/dist/plugins/misc.d.ts +12 -0
- package/dist/plugins/misc.d.ts.map +1 -0
- package/dist/plugins/misc.js +116 -0
- package/dist/plugins/misc.js.map +1 -0
- package/dist/plugins/paragraph.d.ts +11 -0
- package/dist/plugins/paragraph.d.ts.map +1 -0
- package/dist/plugins/paragraph.js +48 -0
- package/dist/plugins/paragraph.js.map +1 -0
- package/dist/plugins/section.d.ts +12 -0
- package/dist/plugins/section.d.ts.map +1 -0
- package/dist/plugins/section.js +62 -0
- package/dist/plugins/section.js.map +1 -0
- package/dist/plugins/table.d.ts +11 -0
- package/dist/plugins/table.d.ts.map +1 -0
- package/dist/plugins/table.js +130 -0
- package/dist/plugins/table.js.map +1 -0
- package/dist/plugins/xref.d.ts +12 -0
- package/dist/plugins/xref.d.ts.map +1 -0
- package/dist/plugins/xref.js +92 -0
- package/dist/plugins/xref.js.map +1 -0
- package/dist/postprocess/__tests__/citation-transform.test.d.ts +7 -0
- package/dist/postprocess/__tests__/citation-transform.test.d.ts.map +1 -0
- package/dist/postprocess/__tests__/citation-transform.test.js +89 -0
- package/dist/postprocess/__tests__/citation-transform.test.js.map +1 -0
- package/dist/postprocess/__tests__/dfn-resolve.test.d.ts +5 -0
- package/dist/postprocess/__tests__/dfn-resolve.test.d.ts.map +1 -0
- package/dist/postprocess/__tests__/dfn-resolve.test.js +160 -0
- package/dist/postprocess/__tests__/dfn-resolve.test.js.map +1 -0
- package/dist/postprocess/__tests__/section-id.test.d.ts +5 -0
- package/dist/postprocess/__tests__/section-id.test.d.ts.map +1 -0
- package/dist/postprocess/__tests__/section-id.test.js +222 -0
- package/dist/postprocess/__tests__/section-id.test.js.map +1 -0
- package/dist/postprocess/citation-transform.d.ts +19 -0
- package/dist/postprocess/citation-transform.d.ts.map +1 -0
- package/dist/postprocess/citation-transform.js +176 -0
- package/dist/postprocess/citation-transform.js.map +1 -0
- package/dist/postprocess/dfn-index.d.ts +16 -0
- package/dist/postprocess/dfn-index.d.ts.map +1 -0
- package/dist/postprocess/dfn-index.js +72 -0
- package/dist/postprocess/dfn-index.js.map +1 -0
- package/dist/postprocess/dfn-resolve.d.ts +15 -0
- package/dist/postprocess/dfn-resolve.d.ts.map +1 -0
- package/dist/postprocess/dfn-resolve.js +257 -0
- package/dist/postprocess/dfn-resolve.js.map +1 -0
- package/dist/postprocess/index.d.ts +15 -0
- package/dist/postprocess/index.d.ts.map +1 -0
- package/dist/postprocess/index.js +36 -0
- package/dist/postprocess/index.js.map +1 -0
- package/dist/postprocess/plugins/citation-transform.d.ts +19 -0
- package/dist/postprocess/plugins/citation-transform.d.ts.map +1 -0
- package/dist/postprocess/plugins/citation-transform.js +179 -0
- package/dist/postprocess/plugins/citation-transform.js.map +1 -0
- package/dist/postprocess/plugins/dfn-index.d.ts +16 -0
- package/dist/postprocess/plugins/dfn-index.d.ts.map +1 -0
- package/dist/postprocess/plugins/dfn-index.js +76 -0
- package/dist/postprocess/plugins/dfn-index.js.map +1 -0
- package/dist/postprocess/plugins/reference-resolve.d.ts +19 -0
- package/dist/postprocess/plugins/reference-resolve.d.ts.map +1 -0
- package/dist/postprocess/plugins/reference-resolve.js +103 -0
- package/dist/postprocess/plugins/reference-resolve.js.map +1 -0
- package/dist/postprocess/plugins/section-id.d.ts +16 -0
- package/dist/postprocess/plugins/section-id.d.ts.map +1 -0
- package/dist/postprocess/plugins/section-id.js +116 -0
- package/dist/postprocess/plugins/section-id.js.map +1 -0
- package/dist/postprocess/plugins/walk-ast.d.ts +38 -0
- package/dist/postprocess/plugins/walk-ast.d.ts.map +1 -0
- package/dist/postprocess/plugins/walk-ast.js +92 -0
- package/dist/postprocess/plugins/walk-ast.js.map +1 -0
- package/dist/postprocess/reference-resolve.d.ts +19 -0
- package/dist/postprocess/reference-resolve.d.ts.map +1 -0
- package/dist/postprocess/reference-resolve.js +105 -0
- package/dist/postprocess/reference-resolve.js.map +1 -0
- package/dist/postprocess/walk-ast.d.ts +38 -0
- package/dist/postprocess/walk-ast.d.ts.map +1 -0
- package/dist/postprocess/walk-ast.js +94 -0
- package/dist/postprocess/walk-ast.js.map +1 -0
- package/dist/preprocess/__tests__/pipeline.test.d.ts +5 -0
- package/dist/preprocess/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/preprocess/__tests__/pipeline.test.js +188 -0
- package/dist/preprocess/__tests__/pipeline.test.js.map +1 -0
- package/dist/preprocess/__tests__/resolver.test.d.ts +5 -0
- package/dist/preprocess/__tests__/resolver.test.d.ts.map +1 -0
- package/dist/preprocess/__tests__/resolver.test.js +165 -0
- package/dist/preprocess/__tests__/resolver.test.js.map +1 -0
- package/dist/preprocess/__tests__/scan-html.test.d.ts +5 -0
- package/dist/preprocess/__tests__/scan-html.test.d.ts.map +1 -0
- package/dist/preprocess/__tests__/scan-html.test.js +99 -0
- package/dist/preprocess/__tests__/scan-html.test.js.map +1 -0
- package/dist/preprocess/__tests__/scan-markdown.test.d.ts +5 -0
- package/dist/preprocess/__tests__/scan-markdown.test.d.ts.map +1 -0
- package/dist/preprocess/__tests__/scan-markdown.test.js +92 -0
- package/dist/preprocess/__tests__/scan-markdown.test.js.map +1 -0
- package/dist/preprocess/config/doc-config.d.ts +30 -0
- package/dist/preprocess/config/doc-config.d.ts.map +1 -0
- package/dist/preprocess/config/doc-config.js +85 -0
- package/dist/preprocess/config/doc-config.js.map +1 -0
- package/dist/preprocess/config/index.d.ts +9 -0
- package/dist/preprocess/config/index.d.ts.map +1 -0
- package/dist/preprocess/config/index.js +7 -0
- package/dist/preprocess/config/index.js.map +1 -0
- package/dist/preprocess/config/loader.d.ts +61 -0
- package/dist/preprocess/config/loader.d.ts.map +1 -0
- package/dist/preprocess/config/loader.js +40 -0
- package/dist/preprocess/config/loader.js.map +1 -0
- package/dist/preprocess/config/normalize.d.ts +19 -0
- package/dist/preprocess/config/normalize.d.ts.map +1 -0
- package/dist/preprocess/config/normalize.js +106 -0
- package/dist/preprocess/config/normalize.js.map +1 -0
- package/dist/preprocess/config/types.d.ts +40 -0
- package/dist/preprocess/config/types.d.ts.map +1 -0
- package/dist/preprocess/config/types.js +8 -0
- package/dist/preprocess/config/types.js.map +1 -0
- package/dist/preprocess/include/index.d.ts +7 -0
- package/dist/preprocess/include/index.d.ts.map +1 -0
- package/dist/preprocess/include/index.js +7 -0
- package/dist/preprocess/include/index.js.map +1 -0
- package/dist/preprocess/include/resolver.d.ts +40 -0
- package/dist/preprocess/include/resolver.d.ts.map +1 -0
- package/dist/preprocess/include/resolver.js +187 -0
- package/dist/preprocess/include/resolver.js.map +1 -0
- package/dist/preprocess/include/scan-html.d.ts +31 -0
- package/dist/preprocess/include/scan-html.d.ts.map +1 -0
- package/dist/preprocess/include/scan-html.js +100 -0
- package/dist/preprocess/include/scan-html.js.map +1 -0
- package/dist/preprocess/include/scan-markdown.d.ts +31 -0
- package/dist/preprocess/include/scan-markdown.d.ts.map +1 -0
- package/dist/preprocess/include/scan-markdown.js +83 -0
- package/dist/preprocess/include/scan-markdown.js.map +1 -0
- package/dist/preprocess/index.d.ts +16 -0
- package/dist/preprocess/index.d.ts.map +1 -0
- package/dist/preprocess/index.js +16 -0
- package/dist/preprocess/index.js.map +1 -0
- package/dist/preprocess/pipeline.d.ts +57 -0
- package/dist/preprocess/pipeline.d.ts.map +1 -0
- package/dist/preprocess/pipeline.js +100 -0
- package/dist/preprocess/pipeline.js.map +1 -0
- package/dist/preprocess/types.d.ts +197 -0
- package/dist/preprocess/types.d.ts.map +1 -0
- package/dist/preprocess/types.js +22 -0
- package/dist/preprocess/types.js.map +1 -0
- package/dist/types/ast.generated.d.ts +517 -0
- package/dist/types/ast.generated.d.ts.map +1 -0
- package/dist/types/ast.generated.js +66 -0
- package/dist/types/ast.generated.js.map +1 -0
- package/dist/validation/validate.d.ts +86 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +162 -0
- package/dist/validation/validate.js.map +1 -0
- package/dist/workspace/__tests__/sort.test.d.ts +2 -0
- package/dist/workspace/__tests__/sort.test.d.ts.map +1 -0
- package/dist/workspace/__tests__/sort.test.js +122 -0
- package/dist/workspace/__tests__/sort.test.js.map +1 -0
- package/dist/workspace/index.d.ts +8 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +7 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/sort.d.ts +49 -0
- package/dist/workspace/sort.d.ts.map +1 -0
- package/dist/workspace/sort.js +114 -0
- package/dist/workspace/sort.js.map +1 -0
- package/package.json +46 -81
- package/schema/spec-ast.schema.json +1440 -0
- package/bin/speculator.mjs +0 -76
- package/dist/browser.cjs +0 -1690
- package/dist/browser.d.cts +0 -418
- package/dist/browser.d.ts +0 -418
- package/dist/browser.js +0 -36
- package/dist/chunk-H7C7MOU6.js +0 -28
- package/dist/chunk-V4GSFQE7.js +0 -1646
- package/dist/cli/export-assertions.cjs +0 -1710
- package/dist/cli/export-assertions.d.cts +0 -25
- package/dist/cli/export-assertions.d.ts +0 -25
- package/dist/cli/export-assertions.js +0 -107
- package/dist/node.cjs +0 -1712
- package/dist/node.d.cts +0 -17
- package/dist/node.d.ts +0 -17
- package/dist/node.js +0 -40
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-resolve.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/reference-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAuFlE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MA2BpC,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Resolve Plugin
|
|
3
|
+
*
|
|
4
|
+
* Resolves cross-references (xref) to their target definitions (dfn).
|
|
5
|
+
*
|
|
6
|
+
* Process:
|
|
7
|
+
* 1. Build lookup map from document.indexes.definitions
|
|
8
|
+
* 2. Walk AST to find all InlineReference nodes
|
|
9
|
+
* 3. Match references to definitions using term/candidateTerms + forContext
|
|
10
|
+
* 4. Assign targetId to resolved references
|
|
11
|
+
*
|
|
12
|
+
* Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
|
|
13
|
+
*/
|
|
14
|
+
import { normalizeTerm } from '#src/parse/normalize';
|
|
15
|
+
import { walkDocument } from '../walk-ast.js';
|
|
16
|
+
/**
|
|
17
|
+
* Build lookup map from definition index
|
|
18
|
+
*/
|
|
19
|
+
function buildLookupMap(document) {
|
|
20
|
+
const map = new Map();
|
|
21
|
+
const definitions = document.indexes?.definitions || [];
|
|
22
|
+
for (const entry of definitions) {
|
|
23
|
+
const linkTexts = entry.linkTexts || [entry.term];
|
|
24
|
+
// Index by all link texts
|
|
25
|
+
for (const text of linkTexts) {
|
|
26
|
+
const key = normalizeTerm(text);
|
|
27
|
+
const existing = map.get(key) || [];
|
|
28
|
+
existing.push(entry);
|
|
29
|
+
map.set(key, existing);
|
|
30
|
+
}
|
|
31
|
+
// Also index by the primary term if different
|
|
32
|
+
const termKey = normalizeTerm(entry.term);
|
|
33
|
+
if (!linkTexts.some(lt => normalizeTerm(lt) === termKey)) {
|
|
34
|
+
const existing = map.get(termKey) || [];
|
|
35
|
+
existing.push(entry);
|
|
36
|
+
map.set(termKey, existing);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return map;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a reference to a definition
|
|
43
|
+
*/
|
|
44
|
+
function resolveReference(ref, index) {
|
|
45
|
+
const candidateTerms = ref.candidateTerms || [ref.targetTerm];
|
|
46
|
+
const forContexts = ref.forContexts || [null];
|
|
47
|
+
const preferredType = ref.preferredType;
|
|
48
|
+
// Try each candidate term
|
|
49
|
+
for (const term of candidateTerms) {
|
|
50
|
+
const key = normalizeTerm(term);
|
|
51
|
+
const entries = index.get(key);
|
|
52
|
+
if (!entries || entries.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
// Filter by forContext if specified
|
|
55
|
+
let matches = entries;
|
|
56
|
+
// If reference has a forContext, prefer definitions with that forContext
|
|
57
|
+
const refForContext = forContexts.find((fc) => fc !== null);
|
|
58
|
+
if (refForContext) {
|
|
59
|
+
const exactMatches = matches.filter(e => (e.forContexts || [null]).some(fc => fc && normalizeTerm(fc) === normalizeTerm(refForContext)));
|
|
60
|
+
if (exactMatches.length > 0) {
|
|
61
|
+
matches = exactMatches;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Filter by preferred type if specified
|
|
65
|
+
if (preferredType && matches.length > 1) {
|
|
66
|
+
const typeMatches = matches.filter(e => e.dfnType === preferredType);
|
|
67
|
+
if (typeMatches.length > 0) {
|
|
68
|
+
matches = typeMatches;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Return first match
|
|
72
|
+
if (matches.length > 0) {
|
|
73
|
+
return matches[0];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Reference resolve plugin
|
|
80
|
+
*/
|
|
81
|
+
export const referenceResolvePlugin = {
|
|
82
|
+
name: 'reference-resolve',
|
|
83
|
+
order: { resolve: 10 },
|
|
84
|
+
async resolve(ctx) {
|
|
85
|
+
// Use global index if in a workspace, otherwise build local lookup map
|
|
86
|
+
const index = ctx.workspace
|
|
87
|
+
? ctx.workspace.globalIndex.definitions
|
|
88
|
+
: buildLookupMap(ctx.document);
|
|
89
|
+
walkDocument(ctx.document, {
|
|
90
|
+
visitInline: (inline) => {
|
|
91
|
+
if (inline.type === 'reference') {
|
|
92
|
+
const ref = inline;
|
|
93
|
+
const match = resolveReference(ref, index);
|
|
94
|
+
if (match) {
|
|
95
|
+
// Assign the resolved target ID (mutation for resolution)
|
|
96
|
+
ref.targetId = match.id;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=reference-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-resolve.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/reference-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section ID Plugin
|
|
3
|
+
*
|
|
4
|
+
* Ensures all sections have unique, slug-based IDs.
|
|
5
|
+
*
|
|
6
|
+
* Process:
|
|
7
|
+
* 1. Walk AST to find all Section nodes
|
|
8
|
+
* 2. For sections without IDs or with non-slug IDs, generate from heading text
|
|
9
|
+
* 3. Ensure uniqueness by tracking used IDs and appending numbers (-2, -3, etc.)
|
|
10
|
+
*/
|
|
11
|
+
import type { Plugin } from '#src/pipeline/types';
|
|
12
|
+
/**
|
|
13
|
+
* Section ID plugin
|
|
14
|
+
*/
|
|
15
|
+
export declare const sectionIdPlugin: Plugin;
|
|
16
|
+
//# sourceMappingURL=section-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-id.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/section-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AA8GhE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAO7B,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section ID Plugin
|
|
3
|
+
*
|
|
4
|
+
* Ensures all sections have unique, slug-based IDs.
|
|
5
|
+
*
|
|
6
|
+
* Process:
|
|
7
|
+
* 1. Walk AST to find all Section nodes
|
|
8
|
+
* 2. For sections without IDs or with non-slug IDs, generate from heading text
|
|
9
|
+
* 3. Ensure uniqueness by tracking used IDs and appending numbers (-2, -3, etc.)
|
|
10
|
+
*/
|
|
11
|
+
import { walkDocument } from '../walk-ast.js';
|
|
12
|
+
/**
|
|
13
|
+
* Extract plain text from heading inline nodes
|
|
14
|
+
*/
|
|
15
|
+
function extractHeadingText(heading) {
|
|
16
|
+
function extractFromInlines(inlines) {
|
|
17
|
+
return inlines
|
|
18
|
+
.map(inline => {
|
|
19
|
+
switch (inline.type) {
|
|
20
|
+
case 'text':
|
|
21
|
+
return inline.value;
|
|
22
|
+
case 'emphasis':
|
|
23
|
+
case 'strong':
|
|
24
|
+
case 'link':
|
|
25
|
+
return extractFromInlines(inline.children);
|
|
26
|
+
case 'inlineCode':
|
|
27
|
+
return inline.value;
|
|
28
|
+
case 'definition':
|
|
29
|
+
return inline.term;
|
|
30
|
+
case 'reference':
|
|
31
|
+
return inline.targetTerm;
|
|
32
|
+
case 'issue':
|
|
33
|
+
return extractFromInlines(inline.children);
|
|
34
|
+
case 'cite':
|
|
35
|
+
return inline.children ? extractFromInlines(inline.children) : inline.key;
|
|
36
|
+
default:
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
.join('');
|
|
41
|
+
}
|
|
42
|
+
return extractFromInlines(heading.children);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert text to URL-safe slug
|
|
46
|
+
*/
|
|
47
|
+
function slugify(text) {
|
|
48
|
+
return text
|
|
49
|
+
.toLowerCase()
|
|
50
|
+
.trim()
|
|
51
|
+
// Replace spaces and underscores with hyphens
|
|
52
|
+
.replace(/[\s_]+/g, '-')
|
|
53
|
+
// Remove non-alphanumeric characters except hyphens
|
|
54
|
+
.replace(/[^a-z0-9-]+/g, '')
|
|
55
|
+
// Remove leading/trailing hyphens
|
|
56
|
+
.replace(/^-+|-+$/g, '')
|
|
57
|
+
// Collapse multiple hyphens
|
|
58
|
+
.replace(/-+/g, '-');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if a string looks like a slug (lowercase alphanumeric with hyphens)
|
|
62
|
+
*/
|
|
63
|
+
function isSlugLike(id) {
|
|
64
|
+
return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(id);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Ensure all sections have unique, slug-based IDs
|
|
68
|
+
*/
|
|
69
|
+
function ensureSectionIds(document) {
|
|
70
|
+
const usedIds = new Set();
|
|
71
|
+
/**
|
|
72
|
+
* Generate a unique ID from base slug
|
|
73
|
+
*/
|
|
74
|
+
function makeUniqueId(baseSlug) {
|
|
75
|
+
if (!baseSlug) {
|
|
76
|
+
baseSlug = 'section';
|
|
77
|
+
}
|
|
78
|
+
let id = baseSlug;
|
|
79
|
+
let counter = 2;
|
|
80
|
+
while (usedIds.has(id)) {
|
|
81
|
+
id = `${baseSlug}-${counter}`;
|
|
82
|
+
counter++;
|
|
83
|
+
}
|
|
84
|
+
usedIds.add(id);
|
|
85
|
+
return id;
|
|
86
|
+
}
|
|
87
|
+
walkDocument(document, {
|
|
88
|
+
visitSection: (section) => {
|
|
89
|
+
// Check if section needs an ID
|
|
90
|
+
const needsId = !section.id || !isSlugLike(section.id);
|
|
91
|
+
if (needsId && section.heading) {
|
|
92
|
+
// Generate ID from heading text
|
|
93
|
+
const headingText = extractHeadingText(section.heading);
|
|
94
|
+
const baseSlug = slugify(headingText);
|
|
95
|
+
const uniqueId = makeUniqueId(baseSlug);
|
|
96
|
+
// Assign the ID to the section
|
|
97
|
+
section.id = uniqueId;
|
|
98
|
+
}
|
|
99
|
+
else if (section.id) {
|
|
100
|
+
// Track existing ID to avoid duplicates
|
|
101
|
+
usedIds.add(section.id);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Section ID plugin
|
|
108
|
+
*/
|
|
109
|
+
export const sectionIdPlugin = {
|
|
110
|
+
name: 'section-id',
|
|
111
|
+
order: { index: 5 },
|
|
112
|
+
async index(ctx) {
|
|
113
|
+
ensureSectionIds(ctx.document);
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=section-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-id.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/section-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Walker Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a generic visitor pattern for walking the SpecAST.
|
|
5
|
+
* Used by postprocess plugins to traverse document structure.
|
|
6
|
+
*/
|
|
7
|
+
import type { SpeculatorASTSchema as Document, Section, Block, Inline } from '#src/types/ast.generated';
|
|
8
|
+
/**
|
|
9
|
+
* Visitor interface for AST traversal.
|
|
10
|
+
* Implement only the methods you need.
|
|
11
|
+
*/
|
|
12
|
+
export interface AstVisitor {
|
|
13
|
+
/** Called for each inline node */
|
|
14
|
+
visitInline?(inline: Inline): void;
|
|
15
|
+
/** Called for each block node */
|
|
16
|
+
visitBlock?(block: Block): void;
|
|
17
|
+
/** Called for each section node */
|
|
18
|
+
visitSection?(section: Section): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Walk an entire document, calling visitor methods for each node type.
|
|
22
|
+
*
|
|
23
|
+
* @param document - The document to traverse
|
|
24
|
+
* @param visitor - Visitor with optional callbacks for each node type
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* walkDocument(doc, {
|
|
29
|
+
* visitInline: (inline) => {
|
|
30
|
+
* if (inline.type === 'definition') {
|
|
31
|
+
* // process definition
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function walkDocument(document: Document, visitor: AstVisitor): void;
|
|
38
|
+
//# sourceMappingURL=walk-ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,mBAAmB,IAAI,QAAQ,EAC/B,OAAO,EACP,KAAK,EACL,MAAM,EACT,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iCAAiC;IACjC,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAiED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAQ1E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Walker Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a generic visitor pattern for walking the SpecAST.
|
|
5
|
+
* Used by postprocess plugins to traverse document structure.
|
|
6
|
+
*/
|
|
7
|
+
/** Inline type names for detection */
|
|
8
|
+
const INLINE_TYPES = new Set([
|
|
9
|
+
'text', 'emphasis', 'strong', 'inlineCode', 'link', 'image',
|
|
10
|
+
'definition', 'reference', 'requirement', 'issue', 'cite'
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Walk all inline nodes, calling visitor.visitInline for each
|
|
14
|
+
*/
|
|
15
|
+
function walkInlines(inlines, visitor) {
|
|
16
|
+
for (const inline of inlines) {
|
|
17
|
+
visitor.visitInline?.(inline);
|
|
18
|
+
// Recurse into children
|
|
19
|
+
if ('children' in inline && Array.isArray(inline.children)) {
|
|
20
|
+
walkInlines(inline.children, visitor);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Walk a block node and its children
|
|
26
|
+
*/
|
|
27
|
+
function walkBlock(block, visitor) {
|
|
28
|
+
visitor.visitBlock?.(block);
|
|
29
|
+
if ('children' in block) {
|
|
30
|
+
const children = block.children;
|
|
31
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
32
|
+
const firstChild = children[0];
|
|
33
|
+
if (firstChild && typeof firstChild === 'object' && 'type' in firstChild) {
|
|
34
|
+
if (INLINE_TYPES.has(firstChild.type)) {
|
|
35
|
+
walkInlines(children, visitor);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
for (const child of children) {
|
|
39
|
+
walkBlock(child, visitor);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Walk a section node and its children
|
|
48
|
+
*/
|
|
49
|
+
function walkSection(section, visitor) {
|
|
50
|
+
visitor.visitSection?.(section);
|
|
51
|
+
// Walk heading if present
|
|
52
|
+
if (section.heading) {
|
|
53
|
+
walkInlines(section.heading.children, visitor);
|
|
54
|
+
}
|
|
55
|
+
// Walk children
|
|
56
|
+
for (const child of section.children) {
|
|
57
|
+
if (child.type === 'section') {
|
|
58
|
+
walkSection(child, visitor);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
walkBlock(child, visitor);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Walk an entire document, calling visitor methods for each node type.
|
|
67
|
+
*
|
|
68
|
+
* @param document - The document to traverse
|
|
69
|
+
* @param visitor - Visitor with optional callbacks for each node type
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* walkDocument(doc, {
|
|
74
|
+
* visitInline: (inline) => {
|
|
75
|
+
* if (inline.type === 'definition') {
|
|
76
|
+
* // process definition
|
|
77
|
+
* }
|
|
78
|
+
* }
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function walkDocument(document, visitor) {
|
|
83
|
+
for (const child of document.children) {
|
|
84
|
+
if (child.type === 'section') {
|
|
85
|
+
walkSection(child, visitor);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
walkBlock(child, visitor);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=walk-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-ast.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,sCAAsC;AACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IACzB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;IAC3D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAC5D,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,WAAW,CAAC,OAAiB,EAAE,OAAmB;IACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9B,wBAAwB;QACxB,IAAI,UAAU,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAE,MAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,WAAW,CAAE,MAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAY,EAAE,OAAmB;IAChD,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAI,KAAa,CAAC,QAAQ,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;gBACvE,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC3B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,OAAmB;IACtD,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;IAEhC,0BAA0B;IAC1B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,OAAmB;IAChE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Resolve Plugin
|
|
3
|
+
*
|
|
4
|
+
* Resolves cross-references (xref) to their target definitions (dfn).
|
|
5
|
+
*
|
|
6
|
+
* Process:
|
|
7
|
+
* 1. Build lookup map from document.indexes.definitions
|
|
8
|
+
* 2. Walk AST to find all InlineReference nodes
|
|
9
|
+
* 3. Match references to definitions using term/candidateTerms + forContext
|
|
10
|
+
* 4. Assign targetId to resolved references
|
|
11
|
+
*
|
|
12
|
+
* Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
|
|
13
|
+
*/
|
|
14
|
+
import type { Plugin } from '#src/pipeline/types';
|
|
15
|
+
/**
|
|
16
|
+
* Reference resolve plugin
|
|
17
|
+
*/
|
|
18
|
+
export declare const referenceResolvePlugin: Plugin;
|
|
19
|
+
//# sourceMappingURL=reference-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-resolve.d.ts","sourceRoot":"","sources":["../../src/postprocess/reference-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAyGlE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAQpC,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Resolve Plugin
|
|
3
|
+
*
|
|
4
|
+
* Resolves cross-references (xref) to their target definitions (dfn).
|
|
5
|
+
*
|
|
6
|
+
* Process:
|
|
7
|
+
* 1. Build lookup map from document.indexes.definitions
|
|
8
|
+
* 2. Walk AST to find all InlineReference nodes
|
|
9
|
+
* 3. Match references to definitions using term/candidateTerms + forContext
|
|
10
|
+
* 4. Assign targetId to resolved references
|
|
11
|
+
*
|
|
12
|
+
* Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
|
|
13
|
+
*/
|
|
14
|
+
import { normalizeTerm } from '#src/parse/normalize';
|
|
15
|
+
import { walkDocument } from './walk-ast.js';
|
|
16
|
+
/**
|
|
17
|
+
* Build lookup map from definition index
|
|
18
|
+
*/
|
|
19
|
+
function buildLookupMap(document) {
|
|
20
|
+
const map = new Map();
|
|
21
|
+
const definitions = document.indexes?.definitions || [];
|
|
22
|
+
for (const entry of definitions) {
|
|
23
|
+
const linkTexts = entry.linkTexts || [entry.term];
|
|
24
|
+
// Index by all link texts
|
|
25
|
+
for (const text of linkTexts) {
|
|
26
|
+
const key = normalizeTerm(text);
|
|
27
|
+
const existing = map.get(key) || [];
|
|
28
|
+
existing.push(entry);
|
|
29
|
+
map.set(key, existing);
|
|
30
|
+
}
|
|
31
|
+
// Also index by the primary term if different
|
|
32
|
+
const termKey = normalizeTerm(entry.term);
|
|
33
|
+
if (!linkTexts.some(lt => normalizeTerm(lt) === termKey)) {
|
|
34
|
+
const existing = map.get(termKey) || [];
|
|
35
|
+
existing.push(entry);
|
|
36
|
+
map.set(termKey, existing);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return map;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a reference to a definition
|
|
43
|
+
*/
|
|
44
|
+
function resolveReference(ref, index) {
|
|
45
|
+
const candidateTerms = ref.candidateTerms || [ref.targetTerm];
|
|
46
|
+
const forContexts = ref.forContexts || [null];
|
|
47
|
+
const preferredType = ref.preferredType;
|
|
48
|
+
// Try each candidate term
|
|
49
|
+
for (const term of candidateTerms) {
|
|
50
|
+
const key = normalizeTerm(term);
|
|
51
|
+
const entries = index.get(key);
|
|
52
|
+
if (!entries || entries.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
// Filter by forContext if specified
|
|
55
|
+
let matches = entries;
|
|
56
|
+
// If reference has a forContext, prefer definitions with that forContext
|
|
57
|
+
const refForContext = forContexts.find((fc) => fc !== null);
|
|
58
|
+
if (refForContext) {
|
|
59
|
+
const exactMatches = matches.filter(e => (e.forContexts || [null]).some(fc => fc && normalizeTerm(fc) === normalizeTerm(refForContext)));
|
|
60
|
+
if (exactMatches.length > 0) {
|
|
61
|
+
matches = exactMatches;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Filter by preferred type if specified
|
|
65
|
+
if (preferredType && matches.length > 1) {
|
|
66
|
+
const typeMatches = matches.filter(e => e.dfnType === preferredType);
|
|
67
|
+
if (typeMatches.length > 0) {
|
|
68
|
+
matches = typeMatches;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Return first match
|
|
72
|
+
if (matches.length > 0) {
|
|
73
|
+
return matches[0];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Walk document and resolve all references
|
|
80
|
+
*/
|
|
81
|
+
function resolveReferences(document, index) {
|
|
82
|
+
walkDocument(document, {
|
|
83
|
+
visitInline: (inline) => {
|
|
84
|
+
if (inline.type === 'reference') {
|
|
85
|
+
const ref = inline;
|
|
86
|
+
const match = resolveReference(ref, index);
|
|
87
|
+
if (match) {
|
|
88
|
+
ref.targetId = match.id;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reference resolve plugin
|
|
96
|
+
*/
|
|
97
|
+
export const referenceResolvePlugin = {
|
|
98
|
+
name: 'reference-resolve',
|
|
99
|
+
order: { resolve: 10 },
|
|
100
|
+
async resolve(ctx) {
|
|
101
|
+
const index = buildLookupMap(ctx.document);
|
|
102
|
+
resolveReferences(ctx.document, index);
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=reference-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-resolve.js","sourceRoot":"","sources":["../../src/postprocess/reference-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Walker Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a generic visitor pattern for walking the SpecAST.
|
|
5
|
+
* Used by postprocess plugins to traverse document structure.
|
|
6
|
+
*/
|
|
7
|
+
import type { Document, Section, Block, Inline } from '#src/types/ast.generated';
|
|
8
|
+
/**
|
|
9
|
+
* Visitor interface for AST traversal.
|
|
10
|
+
* Implement only the methods you need.
|
|
11
|
+
*/
|
|
12
|
+
export interface AstVisitor {
|
|
13
|
+
/** Called for each inline node */
|
|
14
|
+
visitInline?(inline: Inline): void;
|
|
15
|
+
/** Called for each block node */
|
|
16
|
+
visitBlock?(block: Block): void;
|
|
17
|
+
/** Called for each section node */
|
|
18
|
+
visitSection?(section: Section): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Walk an entire document, calling visitor methods for each node type.
|
|
22
|
+
*
|
|
23
|
+
* @param document - The document to traverse
|
|
24
|
+
* @param visitor - Visitor with optional callbacks for each node type
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* walkDocument(doc, {
|
|
29
|
+
* visitInline: (inline) => {
|
|
30
|
+
* if (inline.type === 'definition') {
|
|
31
|
+
* // process definition
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function walkDocument(document: Document, visitor: AstVisitor): void;
|
|
38
|
+
//# sourceMappingURL=walk-ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../src/postprocess/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACT,MAAM,0BAA0B,CAAC;AAGlC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iCAAiC;IACjC,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAmED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAQ1E"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Walker Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides a generic visitor pattern for walking the SpecAST.
|
|
5
|
+
* Used by postprocess plugins to traverse document structure.
|
|
6
|
+
*/
|
|
7
|
+
/** Inline type names for detection */
|
|
8
|
+
const INLINE_TYPES = new Set([
|
|
9
|
+
'text', 'emphasis', 'strong', 'inlineCode', 'link', 'image',
|
|
10
|
+
'definition', 'reference', 'requirement', 'issue', 'cite'
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Walk all inline nodes, calling visitor.visitInline for each
|
|
14
|
+
*/
|
|
15
|
+
function walkInlines(inlines, visitor) {
|
|
16
|
+
for (const inline of inlines) {
|
|
17
|
+
visitor.visitInline?.(inline);
|
|
18
|
+
// Recurse into children
|
|
19
|
+
if ('children' in inline && Array.isArray(inline.children)) {
|
|
20
|
+
const inlineWithChildren = inline;
|
|
21
|
+
walkInlines(inlineWithChildren.children, visitor);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Walk a block node and its children
|
|
27
|
+
*/
|
|
28
|
+
function walkBlock(block, visitor) {
|
|
29
|
+
visitor.visitBlock?.(block);
|
|
30
|
+
if ('children' in block) {
|
|
31
|
+
const blockWithChildren = block;
|
|
32
|
+
const children = blockWithChildren.children;
|
|
33
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
34
|
+
const firstChild = children[0];
|
|
35
|
+
if (firstChild && typeof firstChild === 'object' && 'type' in firstChild) {
|
|
36
|
+
if (INLINE_TYPES.has(firstChild.type)) {
|
|
37
|
+
walkInlines(children, visitor);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
for (const child of children) {
|
|
41
|
+
walkBlock(child, visitor);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Walk a section node and its children
|
|
50
|
+
*/
|
|
51
|
+
function walkSection(section, visitor) {
|
|
52
|
+
visitor.visitSection?.(section);
|
|
53
|
+
// Walk heading if present
|
|
54
|
+
if (section.heading) {
|
|
55
|
+
walkInlines(section.heading.children, visitor);
|
|
56
|
+
}
|
|
57
|
+
// Walk children
|
|
58
|
+
for (const child of section.children) {
|
|
59
|
+
if (child.type === 'section') {
|
|
60
|
+
walkSection(child, visitor);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
walkBlock(child, visitor);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Walk an entire document, calling visitor methods for each node type.
|
|
69
|
+
*
|
|
70
|
+
* @param document - The document to traverse
|
|
71
|
+
* @param visitor - Visitor with optional callbacks for each node type
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* walkDocument(doc, {
|
|
76
|
+
* visitInline: (inline) => {
|
|
77
|
+
* if (inline.type === 'definition') {
|
|
78
|
+
* // process definition
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function walkDocument(document, visitor) {
|
|
85
|
+
for (const child of document.children) {
|
|
86
|
+
if (child.type === 'section') {
|
|
87
|
+
walkSection(child, visitor);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
walkBlock(child, visitor);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=walk-ast.js.map
|