@redocly/recheck 0.1.0 → 0.2.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 +1006 -56
- package/dist/cli.js +27 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/markdoc-schema.d.ts +17 -0
- package/dist/commands/markdoc-schema.d.ts.map +1 -0
- package/dist/commands/markdoc-schema.js +127 -0
- package/dist/commands/markdoc-schema.js.map +1 -0
- package/dist/commands/run.d.ts +0 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +68 -5
- package/dist/commands/run.js.map +1 -1
- package/dist/config/load.d.ts +11 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +12 -2
- package/dist/config/load.js.map +1 -1
- package/dist/config/presets/google.d.ts +3 -0
- package/dist/config/presets/google.d.ts.map +1 -0
- package/dist/config/presets/google.js +1671 -0
- package/dist/config/presets/google.js.map +1 -0
- package/dist/config/presets/inclusive-language.d.ts +3 -0
- package/dist/config/presets/inclusive-language.d.ts.map +1 -0
- package/dist/config/presets/inclusive-language.js +321 -0
- package/dist/config/presets/inclusive-language.js.map +1 -0
- package/dist/config/presets/index.d.ts +67 -0
- package/dist/config/presets/index.d.ts.map +1 -0
- package/dist/config/presets/index.js +137 -0
- package/dist/config/presets/index.js.map +1 -0
- package/dist/config/presets/markdoc.d.ts +21 -0
- package/dist/config/presets/markdoc.d.ts.map +1 -0
- package/dist/config/presets/markdoc.js +101 -0
- package/dist/config/presets/markdoc.js.map +1 -0
- package/dist/config/presets/markdown-relaxed.d.ts +3 -0
- package/dist/config/presets/markdown-relaxed.d.ts.map +1 -0
- package/dist/config/presets/markdown-relaxed.js +98 -0
- package/dist/config/presets/markdown-relaxed.js.map +1 -0
- package/dist/config/presets/markdown.d.ts +43 -0
- package/dist/config/presets/markdown.d.ts.map +1 -0
- package/dist/config/presets/markdown.js +132 -0
- package/dist/config/presets/markdown.js.map +1 -0
- package/dist/config/presets/microsoft.d.ts +3 -0
- package/dist/config/presets/microsoft.d.ts.map +1 -0
- package/dist/config/presets/microsoft.js +2268 -0
- package/dist/config/presets/microsoft.js.map +1 -0
- package/dist/config/presets/minimal.d.ts +3 -0
- package/dist/config/presets/minimal.d.ts.map +1 -0
- package/dist/config/presets/minimal.js +21 -0
- package/dist/config/presets/minimal.js.map +1 -0
- package/dist/config/presets/plain-language.d.ts +3 -0
- package/dist/config/presets/plain-language.d.ts.map +1 -0
- package/dist/config/presets/plain-language.js +351 -0
- package/dist/config/presets/plain-language.js.map +1 -0
- package/dist/config/presets/prose.d.ts +52 -0
- package/dist/config/presets/prose.d.ts.map +1 -0
- package/dist/config/presets/prose.js +138 -0
- package/dist/config/presets/prose.js.map +1 -0
- package/dist/config/schema.d.ts +128 -22
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +105 -21
- package/dist/config/schema.js.map +1 -1
- package/dist/config/validate.d.ts +12 -2
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +1200 -44
- package/dist/config/validate.js.map +1 -1
- package/dist/core/auto-fix.d.ts +8 -13
- package/dist/core/auto-fix.d.ts.map +1 -1
- package/dist/core/auto-fix.js +94 -75
- package/dist/core/auto-fix.js.map +1 -1
- package/dist/core/case-preserve.d.ts +46 -0
- package/dist/core/case-preserve.d.ts.map +1 -0
- package/dist/core/case-preserve.js +57 -0
- package/dist/core/case-preserve.js.map +1 -0
- package/dist/core/directives.d.ts +9 -0
- package/dist/core/directives.d.ts.map +1 -0
- package/dist/core/directives.js +73 -0
- package/dist/core/directives.js.map +1 -0
- package/dist/core/files.d.ts +63 -0
- package/dist/core/files.d.ts.map +1 -1
- package/dist/core/files.js +185 -0
- package/dist/core/files.js.map +1 -1
- package/dist/core/inline-code.d.ts +87 -0
- package/dist/core/inline-code.d.ts.map +1 -0
- package/dist/core/inline-code.js +104 -0
- package/dist/core/inline-code.js.map +1 -0
- package/dist/core/line-endings.d.ts +32 -0
- package/dist/core/line-endings.d.ts.map +1 -0
- package/dist/core/line-endings.js +65 -0
- package/dist/core/line-endings.js.map +1 -0
- package/dist/core/markdoc-tags.d.ts +79 -0
- package/dist/core/markdoc-tags.d.ts.map +1 -0
- package/dist/core/markdoc-tags.js +131 -0
- package/dist/core/markdoc-tags.js.map +1 -0
- package/dist/core/runner.d.ts +92 -3
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +348 -110
- package/dist/core/runner.js.map +1 -1
- package/dist/core/timing.d.ts.map +1 -1
- package/dist/data/markdoc-realm-schema.d.ts +3 -0
- package/dist/data/markdoc-realm-schema.d.ts.map +1 -0
- package/dist/data/markdoc-realm-schema.js +760 -0
- package/dist/data/markdoc-realm-schema.js.map +1 -0
- package/dist/data/proper-nouns.d.ts +2 -0
- package/dist/data/proper-nouns.d.ts.map +1 -0
- package/dist/data/proper-nouns.js +208 -0
- package/dist/data/proper-nouns.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/formulas.d.ts +17 -0
- package/dist/metrics/formulas.d.ts.map +1 -0
- package/dist/metrics/formulas.js +70 -0
- package/dist/metrics/formulas.js.map +1 -0
- package/dist/metrics/index.d.ts +5 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +3 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/statistics.d.ts +27 -0
- package/dist/metrics/statistics.d.ts.map +1 -0
- package/dist/metrics/statistics.js +56 -0
- package/dist/metrics/statistics.js.map +1 -0
- package/dist/parser/index.d.ts +18 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +168 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/markdoc/extract-statics.d.ts +45 -0
- package/dist/parser/markdoc/extract-statics.d.ts.map +1 -0
- package/dist/parser/markdoc/extract-statics.js +139 -0
- package/dist/parser/markdoc/extract-statics.js.map +1 -0
- package/dist/parser/markdoc/pairing.d.ts +63 -0
- package/dist/parser/markdoc/pairing.d.ts.map +1 -0
- package/dist/parser/markdoc/pairing.js +94 -0
- package/dist/parser/markdoc/pairing.js.map +1 -0
- package/dist/parser/markdoc/schema.d.ts +85 -0
- package/dist/parser/markdoc/schema.d.ts.map +1 -0
- package/dist/parser/markdoc/schema.js +86 -0
- package/dist/parser/markdoc/schema.js.map +1 -0
- package/dist/parser/markdoc/span.d.ts +64 -0
- package/dist/parser/markdoc/span.d.ts.map +1 -0
- package/dist/parser/markdoc/span.js +729 -0
- package/dist/parser/markdoc/span.js.map +1 -0
- package/dist/parser/markdoc/structure.d.ts +28 -0
- package/dist/parser/markdoc/structure.d.ts.map +1 -0
- package/dist/parser/markdoc/structure.js +153 -0
- package/dist/parser/markdoc/structure.js.map +1 -0
- package/dist/parser/markdoc/syntax.d.ts +44 -0
- package/dist/parser/markdoc/syntax.d.ts.map +1 -0
- package/dist/parser/markdoc/syntax.js +317 -0
- package/dist/parser/markdoc/syntax.js.map +1 -0
- package/dist/parser/types.d.ts +18 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/reporter/fixes.d.ts.map +1 -1
- package/dist/reporter/fixes.js +22 -1
- package/dist/reporter/fixes.js.map +1 -1
- package/dist/reporter/statistics.d.ts +1 -8
- package/dist/reporter/statistics.d.ts.map +1 -1
- package/dist/reporter/statistics.js.map +1 -1
- package/dist/rules/registry.d.ts +15 -0
- package/dist/rules/registry.d.ts.map +1 -0
- package/dist/rules/registry.js +81 -0
- package/dist/rules/registry.js.map +1 -0
- package/dist/rules/scope/capitalization.d.ts +3 -0
- package/dist/rules/scope/capitalization.d.ts.map +1 -0
- package/dist/rules/scope/capitalization.js +161 -0
- package/dist/rules/scope/capitalization.js.map +1 -0
- package/dist/rules/scope/conditional.d.ts +3 -0
- package/dist/rules/scope/conditional.d.ts.map +1 -0
- package/dist/rules/scope/conditional.js +112 -0
- package/dist/rules/scope/conditional.js.map +1 -0
- package/dist/rules/scope/consistency.d.ts +3 -0
- package/dist/rules/scope/consistency.d.ts.map +1 -0
- package/dist/rules/scope/consistency.js +178 -0
- package/dist/rules/scope/consistency.js.map +1 -0
- package/dist/rules/scope/length.d.ts +3 -0
- package/dist/rules/scope/length.d.ts.map +1 -0
- package/dist/rules/scope/length.js +69 -0
- package/dist/rules/scope/length.js.map +1 -0
- package/dist/rules/scope/max-image-size.d.ts +3 -0
- package/dist/rules/scope/max-image-size.d.ts.map +1 -0
- package/dist/rules/scope/max-image-size.js +65 -0
- package/dist/rules/scope/max-image-size.js.map +1 -0
- package/dist/rules/scope/metric.d.ts +17 -0
- package/dist/rules/scope/metric.d.ts.map +1 -0
- package/dist/rules/scope/metric.js +216 -0
- package/dist/rules/scope/metric.js.map +1 -0
- package/dist/rules/scope/occurrence.d.ts +3 -0
- package/dist/rules/scope/occurrence.d.ts.map +1 -0
- package/dist/rules/scope/occurrence.js +48 -0
- package/dist/rules/scope/occurrence.js.map +1 -0
- package/dist/rules/scope/pattern.d.ts +3 -0
- package/dist/rules/scope/pattern.d.ts.map +1 -0
- package/dist/rules/scope/pattern.js +75 -0
- package/dist/rules/scope/pattern.js.map +1 -0
- package/dist/rules/scope/repetition.d.ts +3 -0
- package/dist/rules/scope/repetition.d.ts.map +1 -0
- package/dist/rules/scope/repetition.js +139 -0
- package/dist/rules/scope/repetition.js.map +1 -0
- package/dist/rules/scope/semantic-line-breaks.d.ts +3 -0
- package/dist/rules/scope/semantic-line-breaks.d.ts.map +1 -0
- package/dist/rules/scope/semantic-line-breaks.js +213 -0
- package/dist/rules/scope/semantic-line-breaks.js.map +1 -0
- package/dist/rules/scope/spelling.d.ts +27 -0
- package/dist/rules/scope/spelling.d.ts.map +1 -0
- package/dist/rules/scope/spelling.js +227 -0
- package/dist/rules/scope/spelling.js.map +1 -0
- package/dist/rules/scope/swap.d.ts +3 -0
- package/dist/rules/scope/swap.d.ts.map +1 -0
- package/dist/rules/scope/swap.js +149 -0
- package/dist/rules/scope/swap.js.map +1 -0
- package/dist/rules/scope/title-case.d.ts +42 -0
- package/dist/rules/scope/title-case.d.ts.map +1 -0
- package/dist/rules/scope/title-case.js +264 -0
- package/dist/rules/scope/title-case.js.map +1 -0
- package/dist/rules/token/blanks-around-fences.d.ts +3 -0
- package/dist/rules/token/blanks-around-fences.d.ts.map +1 -0
- package/dist/rules/token/blanks-around-fences.js +44 -0
- package/dist/rules/token/blanks-around-fences.js.map +1 -0
- package/dist/rules/token/blanks-around-headings.d.ts +3 -0
- package/dist/rules/token/blanks-around-headings.d.ts.map +1 -0
- package/dist/rules/token/blanks-around-headings.js +108 -0
- package/dist/rules/token/blanks-around-headings.js.map +1 -0
- package/dist/rules/token/blanks-around-lists.d.ts +3 -0
- package/dist/rules/token/blanks-around-lists.d.ts.map +1 -0
- package/dist/rules/token/blanks-around-lists.js +56 -0
- package/dist/rules/token/blanks-around-lists.js.map +1 -0
- package/dist/rules/token/blanks-around-tables.d.ts +3 -0
- package/dist/rules/token/blanks-around-tables.d.ts.map +1 -0
- package/dist/rules/token/blanks-around-tables.js +42 -0
- package/dist/rules/token/blanks-around-tables.js.map +1 -0
- package/dist/rules/token/code-block-style.d.ts +3 -0
- package/dist/rules/token/code-block-style.d.ts.map +1 -0
- package/dist/rules/token/code-block-style.js +30 -0
- package/dist/rules/token/code-block-style.js.map +1 -0
- package/dist/rules/token/code-fence-style.d.ts +3 -0
- package/dist/rules/token/code-fence-style.d.ts.map +1 -0
- package/dist/rules/token/code-fence-style.js +35 -0
- package/dist/rules/token/code-fence-style.js.map +1 -0
- package/dist/rules/token/commands-show-output.d.ts +3 -0
- package/dist/rules/token/commands-show-output.d.ts.map +1 -0
- package/dist/rules/token/commands-show-output.js +38 -0
- package/dist/rules/token/commands-show-output.js.map +1 -0
- package/dist/rules/token/descriptive-link-text.d.ts +3 -0
- package/dist/rules/token/descriptive-link-text.d.ts.map +1 -0
- package/dist/rules/token/descriptive-link-text.js +53 -0
- package/dist/rules/token/descriptive-link-text.js.map +1 -0
- package/dist/rules/token/emphasis-style.d.ts +3 -0
- package/dist/rules/token/emphasis-style.d.ts.map +1 -0
- package/dist/rules/token/emphasis-style.js +51 -0
- package/dist/rules/token/emphasis-style.js.map +1 -0
- package/dist/rules/token/fenced-code-language.d.ts +3 -0
- package/dist/rules/token/fenced-code-language.d.ts.map +1 -0
- package/dist/rules/token/fenced-code-language.js +35 -0
- package/dist/rules/token/fenced-code-language.js.map +1 -0
- package/dist/rules/token/first-line-h1.d.ts +3 -0
- package/dist/rules/token/first-line-h1.d.ts.map +1 -0
- package/dist/rules/token/first-line-h1.js +107 -0
- package/dist/rules/token/first-line-h1.js.map +1 -0
- package/dist/rules/token/heading-increment.d.ts +3 -0
- package/dist/rules/token/heading-increment.d.ts.map +1 -0
- package/dist/rules/token/heading-increment.js +27 -0
- package/dist/rules/token/heading-increment.js.map +1 -0
- package/dist/rules/token/heading-start-left.d.ts +3 -0
- package/dist/rules/token/heading-start-left.d.ts.map +1 -0
- package/dist/rules/token/heading-start-left.js +31 -0
- package/dist/rules/token/heading-start-left.js.map +1 -0
- package/dist/rules/token/heading-style.d.ts +3 -0
- package/dist/rules/token/heading-style.d.ts.map +1 -0
- package/dist/rules/token/heading-style.js +41 -0
- package/dist/rules/token/heading-style.js.map +1 -0
- package/dist/rules/token/helpers.d.ts +313 -0
- package/dist/rules/token/helpers.d.ts.map +1 -0
- package/dist/rules/token/helpers.js +746 -0
- package/dist/rules/token/helpers.js.map +1 -0
- package/dist/rules/token/hr-style.d.ts +3 -0
- package/dist/rules/token/hr-style.d.ts.map +1 -0
- package/dist/rules/token/hr-style.js +28 -0
- package/dist/rules/token/hr-style.js.map +1 -0
- package/dist/rules/token/index.d.ts +75 -0
- package/dist/rules/token/index.d.ts.map +1 -0
- package/dist/rules/token/index.js +226 -0
- package/dist/rules/token/index.js.map +1 -0
- package/dist/rules/token/line-length.d.ts +3 -0
- package/dist/rules/token/line-length.d.ts.map +1 -0
- package/dist/rules/token/line-length.js +120 -0
- package/dist/rules/token/line-length.js.map +1 -0
- package/dist/rules/token/link-fragments.d.ts +3 -0
- package/dist/rules/token/link-fragments.d.ts.map +1 -0
- package/dist/rules/token/link-fragments.js +145 -0
- package/dist/rules/token/link-fragments.js.map +1 -0
- package/dist/rules/token/link-image-reference-definitions.d.ts +3 -0
- package/dist/rules/token/link-image-reference-definitions.d.ts.map +1 -0
- package/dist/rules/token/link-image-reference-definitions.js +50 -0
- package/dist/rules/token/link-image-reference-definitions.js.map +1 -0
- package/dist/rules/token/link-image-style.d.ts +3 -0
- package/dist/rules/token/link-image-style.d.ts.map +1 -0
- package/dist/rules/token/link-image-style.js +131 -0
- package/dist/rules/token/link-image-style.js.map +1 -0
- package/dist/rules/token/list-indent.d.ts +3 -0
- package/dist/rules/token/list-indent.d.ts.map +1 -0
- package/dist/rules/token/list-indent.js +60 -0
- package/dist/rules/token/list-indent.js.map +1 -0
- package/dist/rules/token/list-length.d.ts +3 -0
- package/dist/rules/token/list-length.d.ts.map +1 -0
- package/dist/rules/token/list-length.js +55 -0
- package/dist/rules/token/list-length.js.map +1 -0
- package/dist/rules/token/list-marker-space.d.ts +3 -0
- package/dist/rules/token/list-marker-space.d.ts.map +1 -0
- package/dist/rules/token/list-marker-space.js +52 -0
- package/dist/rules/token/list-marker-space.js.map +1 -0
- package/dist/rules/token/markdoc-attributes.d.ts +3 -0
- package/dist/rules/token/markdoc-attributes.d.ts.map +1 -0
- package/dist/rules/token/markdoc-attributes.js +269 -0
- package/dist/rules/token/markdoc-attributes.js.map +1 -0
- package/dist/rules/token/markdoc-pairing.d.ts +3 -0
- package/dist/rules/token/markdoc-pairing.d.ts.map +1 -0
- package/dist/rules/token/markdoc-pairing.js +73 -0
- package/dist/rules/token/markdoc-pairing.js.map +1 -0
- package/dist/rules/token/markdoc-syntax.d.ts +3 -0
- package/dist/rules/token/markdoc-syntax.d.ts.map +1 -0
- package/dist/rules/token/markdoc-syntax.js +119 -0
- package/dist/rules/token/markdoc-syntax.js.map +1 -0
- package/dist/rules/token/markdoc-unknown-tag.d.ts +3 -0
- package/dist/rules/token/markdoc-unknown-tag.d.ts.map +1 -0
- package/dist/rules/token/markdoc-unknown-tag.js +64 -0
- package/dist/rules/token/markdoc-unknown-tag.js.map +1 -0
- package/dist/rules/token/messages.d.ts +4 -0
- package/dist/rules/token/messages.d.ts.map +1 -0
- package/dist/rules/token/messages.js +20 -0
- package/dist/rules/token/messages.js.map +1 -0
- package/dist/rules/token/no-alt-text.d.ts +3 -0
- package/dist/rules/token/no-alt-text.d.ts.map +1 -0
- package/dist/rules/token/no-alt-text.js +47 -0
- package/dist/rules/token/no-alt-text.js.map +1 -0
- package/dist/rules/token/no-bare-urls.d.ts +3 -0
- package/dist/rules/token/no-bare-urls.d.ts.map +1 -0
- package/dist/rules/token/no-bare-urls.js +88 -0
- package/dist/rules/token/no-bare-urls.js.map +1 -0
- package/dist/rules/token/no-blanks-blockquote.d.ts +3 -0
- package/dist/rules/token/no-blanks-blockquote.d.ts.map +1 -0
- package/dist/rules/token/no-blanks-blockquote.js +39 -0
- package/dist/rules/token/no-blanks-blockquote.js.map +1 -0
- package/dist/rules/token/no-duplicate-heading.d.ts +3 -0
- package/dist/rules/token/no-duplicate-heading.d.ts.map +1 -0
- package/dist/rules/token/no-duplicate-heading.js +101 -0
- package/dist/rules/token/no-duplicate-heading.js.map +1 -0
- package/dist/rules/token/no-duplicate-link-destinations.d.ts +3 -0
- package/dist/rules/token/no-duplicate-link-destinations.d.ts.map +1 -0
- package/dist/rules/token/no-duplicate-link-destinations.js +65 -0
- package/dist/rules/token/no-duplicate-link-destinations.js.map +1 -0
- package/dist/rules/token/no-emphasis-as-heading.d.ts +3 -0
- package/dist/rules/token/no-emphasis-as-heading.d.ts.map +1 -0
- package/dist/rules/token/no-emphasis-as-heading.js +44 -0
- package/dist/rules/token/no-emphasis-as-heading.js.map +1 -0
- package/dist/rules/token/no-empty-headings.d.ts +3 -0
- package/dist/rules/token/no-empty-headings.d.ts.map +1 -0
- package/dist/rules/token/no-empty-headings.js +28 -0
- package/dist/rules/token/no-empty-headings.js.map +1 -0
- package/dist/rules/token/no-empty-links.d.ts +3 -0
- package/dist/rules/token/no-empty-links.d.ts.map +1 -0
- package/dist/rules/token/no-empty-links.js +67 -0
- package/dist/rules/token/no-empty-links.js.map +1 -0
- package/dist/rules/token/no-hard-tabs.d.ts +3 -0
- package/dist/rules/token/no-hard-tabs.d.ts.map +1 -0
- package/dist/rules/token/no-hard-tabs.js +76 -0
- package/dist/rules/token/no-hard-tabs.js.map +1 -0
- package/dist/rules/token/no-inline-html.d.ts +3 -0
- package/dist/rules/token/no-inline-html.d.ts.map +1 -0
- package/dist/rules/token/no-inline-html.js +45 -0
- package/dist/rules/token/no-inline-html.js.map +1 -0
- package/dist/rules/token/no-missing-space-atx.d.ts +3 -0
- package/dist/rules/token/no-missing-space-atx.d.ts.map +1 -0
- package/dist/rules/token/no-missing-space-atx.js +36 -0
- package/dist/rules/token/no-missing-space-atx.js.map +1 -0
- package/dist/rules/token/no-missing-space-closed-atx.d.ts +3 -0
- package/dist/rules/token/no-missing-space-closed-atx.d.ts.map +1 -0
- package/dist/rules/token/no-missing-space-closed-atx.js +45 -0
- package/dist/rules/token/no-missing-space-closed-atx.js.map +1 -0
- package/dist/rules/token/no-multiple-blanks.d.ts +3 -0
- package/dist/rules/token/no-multiple-blanks.d.ts.map +1 -0
- package/dist/rules/token/no-multiple-blanks.js +35 -0
- package/dist/rules/token/no-multiple-blanks.js.map +1 -0
- package/dist/rules/token/no-multiple-space-atx.d.ts +13 -0
- package/dist/rules/token/no-multiple-space-atx.d.ts.map +1 -0
- package/dist/rules/token/no-multiple-space-atx.js +50 -0
- package/dist/rules/token/no-multiple-space-atx.js.map +1 -0
- package/dist/rules/token/no-multiple-space-blockquote.d.ts +3 -0
- package/dist/rules/token/no-multiple-space-blockquote.d.ts.map +1 -0
- package/dist/rules/token/no-multiple-space-blockquote.js +43 -0
- package/dist/rules/token/no-multiple-space-blockquote.js.map +1 -0
- package/dist/rules/token/no-multiple-space-closed-atx.d.ts +3 -0
- package/dist/rules/token/no-multiple-space-closed-atx.d.ts.map +1 -0
- package/dist/rules/token/no-multiple-space-closed-atx.js +19 -0
- package/dist/rules/token/no-multiple-space-closed-atx.js.map +1 -0
- package/dist/rules/token/no-reversed-links.d.ts +3 -0
- package/dist/rules/token/no-reversed-links.d.ts.map +1 -0
- package/dist/rules/token/no-reversed-links.js +52 -0
- package/dist/rules/token/no-reversed-links.js.map +1 -0
- package/dist/rules/token/no-space-in-code.d.ts +3 -0
- package/dist/rules/token/no-space-in-code.d.ts.map +1 -0
- package/dist/rules/token/no-space-in-code.js +75 -0
- package/dist/rules/token/no-space-in-code.js.map +1 -0
- package/dist/rules/token/no-space-in-emphasis.d.ts +3 -0
- package/dist/rules/token/no-space-in-emphasis.d.ts.map +1 -0
- package/dist/rules/token/no-space-in-emphasis.js +79 -0
- package/dist/rules/token/no-space-in-emphasis.js.map +1 -0
- package/dist/rules/token/no-space-in-links.d.ts +3 -0
- package/dist/rules/token/no-space-in-links.d.ts.map +1 -0
- package/dist/rules/token/no-space-in-links.js +48 -0
- package/dist/rules/token/no-space-in-links.js.map +1 -0
- package/dist/rules/token/no-trailing-punctuation.d.ts +3 -0
- package/dist/rules/token/no-trailing-punctuation.d.ts.map +1 -0
- package/dist/rules/token/no-trailing-punctuation.js +38 -0
- package/dist/rules/token/no-trailing-punctuation.js.map +1 -0
- package/dist/rules/token/no-trailing-spaces.d.ts +3 -0
- package/dist/rules/token/no-trailing-spaces.d.ts.map +1 -0
- package/dist/rules/token/no-trailing-spaces.js +89 -0
- package/dist/rules/token/no-trailing-spaces.js.map +1 -0
- package/dist/rules/token/ol-prefix.d.ts +3 -0
- package/dist/rules/token/ol-prefix.d.ts.map +1 -0
- package/dist/rules/token/ol-prefix.js +70 -0
- package/dist/rules/token/ol-prefix.js.map +1 -0
- package/dist/rules/token/proper-names.d.ts +3 -0
- package/dist/rules/token/proper-names.d.ts.map +1 -0
- package/dist/rules/token/proper-names.js +93 -0
- package/dist/rules/token/proper-names.js.map +1 -0
- package/dist/rules/token/reference-links-images.d.ts +3 -0
- package/dist/rules/token/reference-links-images.d.ts.map +1 -0
- package/dist/rules/token/reference-links-images.js +36 -0
- package/dist/rules/token/reference-links-images.js.map +1 -0
- package/dist/rules/token/required-headings.d.ts +3 -0
- package/dist/rules/token/required-headings.d.ts.map +1 -0
- package/dist/rules/token/required-headings.js +83 -0
- package/dist/rules/token/required-headings.js.map +1 -0
- package/dist/rules/token/single-h1.d.ts +3 -0
- package/dist/rules/token/single-h1.d.ts.map +1 -0
- package/dist/rules/token/single-h1.js +56 -0
- package/dist/rules/token/single-h1.js.map +1 -0
- package/dist/rules/token/single-trailing-newline.d.ts +3 -0
- package/dist/rules/token/single-trailing-newline.d.ts.map +1 -0
- package/dist/rules/token/single-trailing-newline.js +25 -0
- package/dist/rules/token/single-trailing-newline.js.map +1 -0
- package/dist/rules/token/strong-style.d.ts +3 -0
- package/dist/rules/token/strong-style.d.ts.map +1 -0
- package/dist/rules/token/strong-style.js +51 -0
- package/dist/rules/token/strong-style.js.map +1 -0
- package/dist/rules/token/table-column-count.d.ts +3 -0
- package/dist/rules/token/table-column-count.d.ts.map +1 -0
- package/dist/rules/token/table-column-count.js +44 -0
- package/dist/rules/token/table-column-count.js.map +1 -0
- package/dist/rules/token/table-column-style.d.ts +3 -0
- package/dist/rules/token/table-column-style.d.ts.map +1 -0
- package/dist/rules/token/table-column-style.js +179 -0
- package/dist/rules/token/table-column-style.js.map +1 -0
- package/dist/rules/token/table-pipe-style.d.ts +3 -0
- package/dist/rules/token/table-pipe-style.d.ts.map +1 -0
- package/dist/rules/token/table-pipe-style.js +54 -0
- package/dist/rules/token/table-pipe-style.js.map +1 -0
- package/dist/rules/token/ul-indent.d.ts +3 -0
- package/dist/rules/token/ul-indent.d.ts.map +1 -0
- package/dist/rules/token/ul-indent.js +72 -0
- package/dist/rules/token/ul-indent.js.map +1 -0
- package/dist/rules/token/ul-style.d.ts +3 -0
- package/dist/rules/token/ul-style.d.ts.map +1 -0
- package/dist/rules/token/ul-style.js +80 -0
- package/dist/rules/token/ul-style.js.map +1 -0
- package/dist/rules/types.d.ts +81 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/utils.d.ts +29 -0
- package/dist/rules/utils.d.ts.map +1 -0
- package/dist/{assertions → rules}/utils.js +27 -0
- package/dist/rules/utils.js.map +1 -0
- package/dist/scopes/extractor.d.ts +7 -0
- package/dist/scopes/extractor.d.ts.map +1 -0
- package/dist/scopes/extractor.js +475 -0
- package/dist/scopes/extractor.js.map +1 -0
- package/dist/scopes/selector.d.ts +51 -0
- package/dist/scopes/selector.d.ts.map +1 -0
- package/dist/scopes/selector.js +121 -0
- package/dist/scopes/selector.js.map +1 -0
- package/dist/scopes/sentences.d.ts +7 -0
- package/dist/scopes/sentences.d.ts.map +1 -0
- package/dist/scopes/sentences.js +115 -0
- package/dist/scopes/sentences.js.map +1 -0
- package/dist/scopes/types.d.ts +44 -0
- package/dist/scopes/types.d.ts.map +1 -0
- package/dist/scopes/types.js +2 -0
- package/dist/scopes/types.js.map +1 -0
- package/dist/scopes/vocabulary.d.ts +16 -0
- package/dist/scopes/vocabulary.d.ts.map +1 -0
- package/dist/scopes/vocabulary.js +70 -0
- package/dist/scopes/vocabulary.js.map +1 -0
- package/dist/types/assertions.d.ts +95 -32
- package/dist/types/assertions.d.ts.map +1 -1
- package/dist/types/problems.d.ts +4 -5
- package/dist/types/problems.d.ts.map +1 -1
- package/dist/types/rules.d.ts +4 -6
- package/dist/types/rules.d.ts.map +1 -1
- package/examples/appendices/google.appendix.yaml +91 -0
- package/examples/appendices/inclusive-language.appendix.yaml +61 -0
- package/examples/appendices/microsoft.appendix.yaml +99 -0
- package/examples/appendices/plain-language.appendix.yaml +88 -0
- package/examples/google.yaml +1525 -0
- package/examples/inclusive-language.yaml +304 -0
- package/examples/microsoft.yaml +1542 -0
- package/examples/plain-language.yaml +325 -0
- package/package.json +49 -16
- package/presets/google/PROVENANCE.md +1022 -0
- package/presets/google/sources.json +192 -0
- package/presets/inclusive-language/PROVENANCE.md +174 -0
- package/presets/inclusive-language/sources.json +107 -0
- package/presets/microsoft/PROVENANCE.md +1555 -0
- package/presets/microsoft/sources.json +494 -0
- package/presets/plain-language/PROVENANCE.md +364 -0
- package/presets/plain-language/sources.json +108 -0
- package/dist/assertions/bullet-style.d.ts +0 -3
- package/dist/assertions/bullet-style.d.ts.map +0 -1
- package/dist/assertions/bullet-style.js +0 -60
- package/dist/assertions/bullet-style.js.map +0 -1
- package/dist/assertions/index.d.ts +0 -21
- package/dist/assertions/index.d.ts.map +0 -1
- package/dist/assertions/index.js +0 -30
- package/dist/assertions/index.js.map +0 -1
- package/dist/assertions/max-image-size.d.ts +0 -3
- package/dist/assertions/max-image-size.d.ts.map +0 -1
- package/dist/assertions/max-image-size.js +0 -73
- package/dist/assertions/max-image-size.js.map +0 -1
- package/dist/assertions/max-line-length.d.ts +0 -3
- package/dist/assertions/max-line-length.d.ts.map +0 -1
- package/dist/assertions/max-line-length.js +0 -68
- package/dist/assertions/max-line-length.js.map +0 -1
- package/dist/assertions/no-broken-fragment-links.d.ts +0 -3
- package/dist/assertions/no-broken-fragment-links.d.ts.map +0 -1
- package/dist/assertions/no-broken-fragment-links.js +0 -79
- package/dist/assertions/no-broken-fragment-links.js.map +0 -1
- package/dist/assertions/no-duplicate-headings.d.ts +0 -3
- package/dist/assertions/no-duplicate-headings.d.ts.map +0 -1
- package/dist/assertions/no-duplicate-headings.js +0 -66
- package/dist/assertions/no-duplicate-headings.js.map +0 -1
- package/dist/assertions/no-hard-tabs.d.ts +0 -3
- package/dist/assertions/no-hard-tabs.d.ts.map +0 -1
- package/dist/assertions/no-hard-tabs.js +0 -63
- package/dist/assertions/no-hard-tabs.js.map +0 -1
- package/dist/assertions/no-trailing-spaces.d.ts +0 -3
- package/dist/assertions/no-trailing-spaces.d.ts.map +0 -1
- package/dist/assertions/no-trailing-spaces.js +0 -72
- package/dist/assertions/no-trailing-spaces.js.map +0 -1
- package/dist/assertions/pattern.d.ts +0 -3
- package/dist/assertions/pattern.d.ts.map +0 -1
- package/dist/assertions/pattern.js +0 -39
- package/dist/assertions/pattern.js.map +0 -1
- package/dist/assertions/semantic-line-breaks.d.ts +0 -3
- package/dist/assertions/semantic-line-breaks.d.ts.map +0 -1
- package/dist/assertions/semantic-line-breaks.js +0 -152
- package/dist/assertions/semantic-line-breaks.js.map +0 -1
- package/dist/assertions/swap.d.ts +0 -3
- package/dist/assertions/swap.d.ts.map +0 -1
- package/dist/assertions/swap.js +0 -39
- package/dist/assertions/swap.js.map +0 -1
- package/dist/assertions/utils.d.ts +0 -8
- package/dist/assertions/utils.d.ts.map +0 -1
- package/dist/assertions/utils.js.map +0 -1
- package/dist/core/scope-parser.d.ts +0 -26
- package/dist/core/scope-parser.d.ts.map +0 -1
- package/dist/core/scope-parser.js +0 -110
- package/dist/core/scope-parser.js.map +0 -1
- package/dist/files.d.ts +0 -2
- package/dist/files.d.ts.map +0 -1
- package/dist/files.js +0 -39
- package/dist/files.js.map +0 -1
- package/dist/load-config.d.ts +0 -25
- package/dist/load-config.d.ts.map +0 -1
- package/dist/load-config.js +0 -104
- package/dist/load-config.js.map +0 -1
- package/dist/load.d.ts +0 -25
- package/dist/load.d.ts.map +0 -1
- package/dist/load.js +0 -112
- package/dist/load.js.map +0 -1
- package/dist/scope.d.ts +0 -26
- package/dist/scope.d.ts.map +0 -1
- package/dist/scope.js +0 -110
- package/dist/scope.js.map +0 -1
- package/dist/types.d.ts +0 -109
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/validate.d.ts +0 -31
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -154
- package/dist/validate.js.map +0 -1
- /package/dist/{types.js → parser/types.js} +0 -0
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
import { filterByTypes } from '../parser/index.js';
|
|
2
|
+
import { newLineRe, offsetToLineColumn } from '../core/line-endings.js';
|
|
3
|
+
import { MARKDOC_TAG_MASK_CHAR } from '../core/markdoc-tags.js';
|
|
4
|
+
import { splitSentences } from './sentences.js';
|
|
5
|
+
function segmentFromToken(scope, token, content) {
|
|
6
|
+
return {
|
|
7
|
+
scope,
|
|
8
|
+
content: content ?? token.text,
|
|
9
|
+
startLine: token.startLine,
|
|
10
|
+
startColumn: token.startColumn,
|
|
11
|
+
endLine: token.endLine,
|
|
12
|
+
endColumn: token.endColumn,
|
|
13
|
+
tokens: [token],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function findChild(token, type) {
|
|
17
|
+
return token.children.find((child) => child.type === type);
|
|
18
|
+
}
|
|
19
|
+
// Explicit-stack DFS (not call-stack recursion), same pre-order,
|
|
20
|
+
// first-match semantics as the recursive original: pathological nesting
|
|
21
|
+
// must not be able to overflow the call stack anywhere in the extractor —
|
|
22
|
+
// see `extractScopes`'s own iterative walk below for the full rationale.
|
|
23
|
+
function findDescendant(token, type) {
|
|
24
|
+
const stack = [];
|
|
25
|
+
for (let i = token.children.length - 1; i >= 0; i--)
|
|
26
|
+
stack.push(token.children[i]);
|
|
27
|
+
while (stack.length > 0) {
|
|
28
|
+
const current = stack.pop();
|
|
29
|
+
if (current === undefined)
|
|
30
|
+
break;
|
|
31
|
+
if (current.type === type)
|
|
32
|
+
return current;
|
|
33
|
+
for (let i = current.children.length - 1; i >= 0; i--)
|
|
34
|
+
stack.push(current.children[i]);
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
// Like `findDescendant` above, but collects every match instead of stopping
|
|
39
|
+
// at the first. Children are pushed in reverse so they pop left to right,
|
|
40
|
+
// which returns the matches in source order — `maskProse` below depends on
|
|
41
|
+
// that ordering.
|
|
42
|
+
function findAllDescendants(token, type) {
|
|
43
|
+
const found = [];
|
|
44
|
+
const stack = [];
|
|
45
|
+
for (let i = token.children.length - 1; i >= 0; i--)
|
|
46
|
+
stack.push(token.children[i]);
|
|
47
|
+
while (stack.length > 0) {
|
|
48
|
+
const current = stack.pop();
|
|
49
|
+
if (current === undefined)
|
|
50
|
+
break;
|
|
51
|
+
if (current.type === type)
|
|
52
|
+
found.push(current);
|
|
53
|
+
for (let i = current.children.length - 1; i >= 0; i--)
|
|
54
|
+
stack.push(current.children[i]);
|
|
55
|
+
}
|
|
56
|
+
return found;
|
|
57
|
+
}
|
|
58
|
+
// Inverse of `offsetToLineColumn`: the character offset within `text` that
|
|
59
|
+
// corresponds to an absolute (line, column), given `text`'s own absolute
|
|
60
|
+
// start position. Needed to turn a `markdocTag` descendant's absolute
|
|
61
|
+
// position into an offset inside its container's text, so `maskProse` knows
|
|
62
|
+
// which slice of that text to blank.
|
|
63
|
+
function lineColumnToOffset(text, startLine, startColumn, line, column) {
|
|
64
|
+
if (line === startLine)
|
|
65
|
+
return column - startColumn;
|
|
66
|
+
let offset = 0;
|
|
67
|
+
let currentLine = startLine;
|
|
68
|
+
for (const match of text.matchAll(newLineRe)) {
|
|
69
|
+
currentLine++;
|
|
70
|
+
offset = match.index + match[0].length;
|
|
71
|
+
if (currentLine === line)
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
return offset + (column - 1);
|
|
75
|
+
}
|
|
76
|
+
// Blanks every `markdocTag` descendant's span to same-width
|
|
77
|
+
// MARKDOC_TAG_MASK_CHAR so prose containers (paragraph, heading, list item,
|
|
78
|
+
// blockquote, table cell) stop carrying the tag's literal source characters
|
|
79
|
+
// into word counts and sentence splitting. Newlines inside the span are left
|
|
80
|
+
// alone: only a block tag can contain one, and keeping them exact costs
|
|
81
|
+
// nothing. Blanking in place rather than removing is the point — content
|
|
82
|
+
// length and line structure are unchanged, so every other character keeps
|
|
83
|
+
// its true column and positions computed downstream stay correct with no
|
|
84
|
+
// special-casing.
|
|
85
|
+
//
|
|
86
|
+
// Callers pass `hasTags`, which `extractScopes` derives once per document
|
|
87
|
+
// from the tree's own `markdocTag` tokens. That check must be exact rather
|
|
88
|
+
// than a `text.includes('{%')` heuristic: most real documents merely mention
|
|
89
|
+
// `{%` in prose, and walking every container's subtree on all of them is
|
|
90
|
+
// pure cost with no possible result.
|
|
91
|
+
//
|
|
92
|
+
// The single left-to-right pass matters for the same reason: rebuilding the
|
|
93
|
+
// whole string once per tag would be quadratic in a container holding many
|
|
94
|
+
// tags. Spans are sorted and clamped so an overlapping one (tags don't nest,
|
|
95
|
+
// so this shouldn't happen) can only shorten the pass, never rewind the
|
|
96
|
+
// cursor.
|
|
97
|
+
function maskProse(container, hasTags) {
|
|
98
|
+
const { text } = container;
|
|
99
|
+
const unmasked = { content: text, masked: false, maskedRanges: [] };
|
|
100
|
+
if (!hasTags)
|
|
101
|
+
return unmasked;
|
|
102
|
+
const tags = findAllDescendants(container, 'markdocTag');
|
|
103
|
+
if (tags.length === 0)
|
|
104
|
+
return unmasked;
|
|
105
|
+
const offsetOf = (line, column) => lineColumnToOffset(text, container.startLine, container.startColumn, line, column);
|
|
106
|
+
const spans = tags
|
|
107
|
+
.map((tag) => ({
|
|
108
|
+
start: offsetOf(tag.startLine, tag.startColumn),
|
|
109
|
+
end: offsetOf(tag.endLine, tag.endColumn),
|
|
110
|
+
}))
|
|
111
|
+
.sort((a, b) => a.start - b.start);
|
|
112
|
+
const maskedRanges = [];
|
|
113
|
+
const pieces = [];
|
|
114
|
+
let cursor = 0;
|
|
115
|
+
for (const span of spans) {
|
|
116
|
+
const start = Math.max(span.start, cursor);
|
|
117
|
+
const end = Math.max(span.end, start);
|
|
118
|
+
if (end === start)
|
|
119
|
+
continue;
|
|
120
|
+
pieces.push(text.slice(cursor, start));
|
|
121
|
+
pieces.push(text.slice(start, end).replace(/[^\r\n]/g, MARKDOC_TAG_MASK_CHAR));
|
|
122
|
+
maskedRanges.push({ start, end });
|
|
123
|
+
cursor = end;
|
|
124
|
+
}
|
|
125
|
+
if (maskedRanges.length === 0)
|
|
126
|
+
return unmasked;
|
|
127
|
+
pieces.push(text.slice(cursor));
|
|
128
|
+
return { content: pieces.join(''), masked: true, maskedRanges };
|
|
129
|
+
}
|
|
130
|
+
// A prose segment that masking reduced to blanks and whitespace carries no
|
|
131
|
+
// prose at all — its entire text was a markdoc tag. Emitting it only adds
|
|
132
|
+
// noise: a blank `summary` entry, a character count for invisible text, a
|
|
133
|
+
// sentence span with no words in it. Gated on `masked` so a genuinely empty
|
|
134
|
+
// source construct (an `||` table cell) still emits its `''` segment.
|
|
135
|
+
function isProseless(masked) {
|
|
136
|
+
return masked.masked && masked.content.trim() === '';
|
|
137
|
+
}
|
|
138
|
+
// Re-bases masked ranges onto a slice `[offset, offset + length)` of the
|
|
139
|
+
// text they were measured against, dropping anything the slice cut away.
|
|
140
|
+
// Only table cells need this — they are the one scope that trims its
|
|
141
|
+
// content after masking (see the `tableRow` case).
|
|
142
|
+
function shiftRanges(ranges, offset, length) {
|
|
143
|
+
const shifted = [];
|
|
144
|
+
for (const range of ranges) {
|
|
145
|
+
const start = Math.max(range.start - offset, 0);
|
|
146
|
+
const end = Math.min(range.end - offset, length);
|
|
147
|
+
if (end > start)
|
|
148
|
+
shifted.push({ start, end });
|
|
149
|
+
}
|
|
150
|
+
return shifted;
|
|
151
|
+
}
|
|
152
|
+
function headingLevel(token) {
|
|
153
|
+
if (token.type === 'atxHeading') {
|
|
154
|
+
const sequence = findChild(token, 'atxHeadingSequence');
|
|
155
|
+
return sequence ? sequence.text.length : 1;
|
|
156
|
+
}
|
|
157
|
+
// setextHeading: '=' underline → h1, '-' → h2
|
|
158
|
+
const underline = findDescendant(token, 'setextHeadingLineSequence');
|
|
159
|
+
return underline && underline.text.startsWith('=') ? 1 : 2;
|
|
160
|
+
}
|
|
161
|
+
function headingText(token) {
|
|
162
|
+
return findDescendant(token, 'atxHeadingText') ?? findDescendant(token, 'setextHeadingText');
|
|
163
|
+
}
|
|
164
|
+
function ancestorCount(token, types) {
|
|
165
|
+
let count = 0;
|
|
166
|
+
for (let current = token.parent; current; current = current.parent) {
|
|
167
|
+
if (types.includes(current.type))
|
|
168
|
+
count++;
|
|
169
|
+
}
|
|
170
|
+
return count;
|
|
171
|
+
}
|
|
172
|
+
const LIST_TYPES = ['listOrdered', 'listUnordered'];
|
|
173
|
+
// True when `token` (a `paragraph`) is the direct inline body of a
|
|
174
|
+
// container's `content` token whose own parent is a list item or blockquote
|
|
175
|
+
// — i.e. the paragraph text duplicates the container segment already
|
|
176
|
+
// produced for `list-item` / `blockquote`, so it should not get its own
|
|
177
|
+
// standalone `paragraph` segment.
|
|
178
|
+
function isNestedContainerParagraph(token) {
|
|
179
|
+
const content = token.parent;
|
|
180
|
+
if (!content || content.type !== 'content')
|
|
181
|
+
return false;
|
|
182
|
+
const container = content.parent;
|
|
183
|
+
if (!container)
|
|
184
|
+
return false;
|
|
185
|
+
if (LIST_TYPES.includes(container.type))
|
|
186
|
+
return true;
|
|
187
|
+
return container.type === 'blockQuote';
|
|
188
|
+
}
|
|
189
|
+
// `sentence` segments are derived from EXACTLY these three scope kinds —
|
|
190
|
+
// running prose where sentence boundaries are meaningful. Headings and
|
|
191
|
+
// table cells are deliberately NOT sentence sources: their content is
|
|
192
|
+
// label-like, not sentence-structured, and `scope: sentence` consumers
|
|
193
|
+
// (e.g. an oxford-comma rule) depend on this exact source set.
|
|
194
|
+
const SENTENCE_SOURCES = new Set(['paragraph', 'list-item', 'blockquote']);
|
|
195
|
+
// `summary` = the document's prose: every scope kind whose content is
|
|
196
|
+
// human-readable text. That's the sentence sources above PLUS headings
|
|
197
|
+
// (all levels) and table header/body cells. `code`, `frontmatter`, `html`,
|
|
198
|
+
// `comment`, `alt`, and `link` are never prose.
|
|
199
|
+
//
|
|
200
|
+
// This set also defines which scopes get markdoc-masked: prose is exactly the
|
|
201
|
+
// content a tag's `{% ... %}` syntax must not leak into. Exported so tests
|
|
202
|
+
// can enumerate it and require a masking fixture per member, so a new prose
|
|
203
|
+
// scope can't be added without a deliberate decision about masking.
|
|
204
|
+
export const SUMMARY_BLOCK_SOURCES = new Set([...SENTENCE_SOURCES, 'table.header', 'table.cell']);
|
|
205
|
+
// Headings only ever arrive as level-qualified segments (the walker emits
|
|
206
|
+
// `heading.h1`..`heading.h6`, never a bare 'heading' scope).
|
|
207
|
+
export function isSummarySource(scope) {
|
|
208
|
+
return SUMMARY_BLOCK_SOURCES.has(scope) || scope.startsWith('heading.');
|
|
209
|
+
}
|
|
210
|
+
export function extractScopes(tree, _content) {
|
|
211
|
+
const segments = [];
|
|
212
|
+
// Every `markdocTag` token in the document, resolved once. It has two jobs:
|
|
213
|
+
// it is the source for the `markdoc.tag` scope emitted at the bottom of this
|
|
214
|
+
// function, and its emptiness is the gate that keeps `maskProse` from
|
|
215
|
+
// walking a subtree that cannot contain a tag. With markdoc parsing off no
|
|
216
|
+
// `markdocTag` tokens exist, so masking is skipped outright rather than
|
|
217
|
+
// guessed at from the text.
|
|
218
|
+
//
|
|
219
|
+
// `filterByTypes` rather than a raw `tree.flat.filter` so htmlFlow-reparsed
|
|
220
|
+
// tokens are excluded on the same terms every other consumer uses. One list
|
|
221
|
+
// can serve both jobs because reparsed content hangs under an `htmlFlow`
|
|
222
|
+
// token, which the walk below never descends into, so a tag this filter
|
|
223
|
+
// drops was never maskable anyway.
|
|
224
|
+
const markdocTags = filterByTypes(tree, ['markdocTag']);
|
|
225
|
+
const hasMarkdocTags = markdocTags.length > 0;
|
|
226
|
+
// The single place prose segments are emitted, so masking and everything
|
|
227
|
+
// that follows from it are decided once instead of at each call site: the
|
|
228
|
+
// mask itself, the `maskedRanges` a rule needs to reject a match inside a
|
|
229
|
+
// tag, the verbatim `sourceText` a rule needs to quote real source, and the
|
|
230
|
+
// suppression of a segment masking left with no prose in it. Table cells are
|
|
231
|
+
// the one caller that can't use this, because they re-anchor onto trimmed
|
|
232
|
+
// content, but they still mask through the same `maskProse`.
|
|
233
|
+
const emitProse = (scope, anchor) => {
|
|
234
|
+
const masked = maskProse(anchor, hasMarkdocTags);
|
|
235
|
+
if (isProseless(masked))
|
|
236
|
+
return undefined;
|
|
237
|
+
const segment = segmentFromToken(scope, anchor, masked.content);
|
|
238
|
+
if (masked.masked) {
|
|
239
|
+
segment.sourceText = anchor.text;
|
|
240
|
+
segment.maskedRanges = masked.maskedRanges;
|
|
241
|
+
}
|
|
242
|
+
segments.push(segment);
|
|
243
|
+
return segment;
|
|
244
|
+
};
|
|
245
|
+
// Returns whether the walk should descend into `token`'s children —
|
|
246
|
+
// replacing the recursive walker's `return` (skip children) vs `break`
|
|
247
|
+
// (descend) convention. Kept as a per-token visitor so the iterative
|
|
248
|
+
// driver below is a plain pre-order DFS over an explicit stack: the old
|
|
249
|
+
// call-stack recursion overflowed on deeply nested input (e.g. ~10,000
|
|
250
|
+
// nested blockquotes) that micromark itself parses without issue, so
|
|
251
|
+
// recursion depth here must not track document nesting depth.
|
|
252
|
+
const visit = (token) => {
|
|
253
|
+
switch (token.type) {
|
|
254
|
+
case 'atxHeading':
|
|
255
|
+
case 'setextHeading': {
|
|
256
|
+
const level = headingLevel(token);
|
|
257
|
+
const text = headingText(token);
|
|
258
|
+
const anchor = text ?? token;
|
|
259
|
+
// An annotation tag (`# Head {% #main %}`) is tokenized as a child of
|
|
260
|
+
// the heading's own text token, so heading content needs the same
|
|
261
|
+
// masking as paragraph content — otherwise `summary`, which includes
|
|
262
|
+
// every heading level, would leak the tag's text.
|
|
263
|
+
const segment = emitProse(`heading.h${level}`, anchor);
|
|
264
|
+
if (segment)
|
|
265
|
+
segment.metadata = { headingLevel: level };
|
|
266
|
+
return false; // no scopes nested inside headings
|
|
267
|
+
}
|
|
268
|
+
case 'paragraph': {
|
|
269
|
+
// Paragraphs nested directly inside a list-item's `content` or a
|
|
270
|
+
// blockquote's `content` are the inline representation of that
|
|
271
|
+
// container's own segment (list-item / blockquote already cover the
|
|
272
|
+
// same span) — only emit a standalone `paragraph` segment when this
|
|
273
|
+
// paragraph isn't merely restating an ancestor container segment, so
|
|
274
|
+
// summary derivation doesn't double-count the same text twice.
|
|
275
|
+
if (!isNestedContainerParagraph(token))
|
|
276
|
+
emitProse('paragraph', token);
|
|
277
|
+
return true; // continue walking for inline scopes
|
|
278
|
+
}
|
|
279
|
+
// `alt` and `link` are deliberately NOT masked, unlike the prose scopes
|
|
280
|
+
// around them, even though a markdoc tag can appear inside a label
|
|
281
|
+
// (`[text {% x /%} more](url)`). They aren't prose: neither feeds
|
|
282
|
+
// `summary` or `sentence`, and nothing splits them into words or
|
|
283
|
+
// sentences, so the reasons prose is masked don't apply. Rules pointed
|
|
284
|
+
// at these scopes — an alt-text length cap, a pattern rule on link text
|
|
285
|
+
// — are pointed at the label as authored, and blanking part of it would
|
|
286
|
+
// hide authored content from the very rule asked to inspect it. Nothing
|
|
287
|
+
// is at risk either: `--fix` tag safety comes from `protectMarkdocTags`
|
|
288
|
+
// in core/markdoc-tags.ts, not from masking.
|
|
289
|
+
case 'image': {
|
|
290
|
+
const label = findDescendant(token, 'labelText');
|
|
291
|
+
if (label)
|
|
292
|
+
segments.push(segmentFromToken('alt', label));
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
case 'link': {
|
|
296
|
+
const label = findDescendant(token, 'labelText');
|
|
297
|
+
if (label)
|
|
298
|
+
segments.push(segmentFromToken('link', label));
|
|
299
|
+
return true; // link text may contain other inline tokens
|
|
300
|
+
}
|
|
301
|
+
case 'codeFenced':
|
|
302
|
+
case 'codeIndented': {
|
|
303
|
+
const info = findDescendant(token, 'codeFencedFenceInfo');
|
|
304
|
+
const segment = segmentFromToken('code', token);
|
|
305
|
+
segment.metadata = { codeLanguage: info?.text ?? '' };
|
|
306
|
+
segments.push(segment);
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
case 'blockQuote': {
|
|
310
|
+
emitProse('blockquote', token);
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
case 'listItemPrefix': {
|
|
314
|
+
return true; // marker only; content handled via parent list walk
|
|
315
|
+
}
|
|
316
|
+
case 'content': {
|
|
317
|
+
if (token.parent && LIST_TYPES.includes(token.parent.type)) {
|
|
318
|
+
const segment = emitProse('list-item', token);
|
|
319
|
+
if (segment) {
|
|
320
|
+
segment.metadata = {
|
|
321
|
+
listDepth: ancestorCount(token, LIST_TYPES),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
case 'tableRow': {
|
|
328
|
+
// Header row vs body row is determined by the ancestor: `tableHead`
|
|
329
|
+
// wraps the header `tableRow` (plus the delimiter row), `tableBody`
|
|
330
|
+
// wraps body rows. Cells are `tableHeader` (in the header row) or
|
|
331
|
+
// `tableData` (in body rows), each containing a `tableContent` with
|
|
332
|
+
// the cell's inline text.
|
|
333
|
+
//
|
|
334
|
+
// Positions anchor on the `tableContent` token, NOT the cell token:
|
|
335
|
+
// the cell spans its leading '|' and padding (`| colour ` for
|
|
336
|
+
// `| colour |`), so a segment carrying trimmed content with the
|
|
337
|
+
// cell's startColumn put every match 2+ columns LEFT of the real
|
|
338
|
+
// text — and a swap --fix then rewrote the pipe/padding instead of
|
|
339
|
+
// the matched word. The content is still trimmed (semantic cell
|
|
340
|
+
// text), so the anchor shifts by the leading-trim length and the
|
|
341
|
+
// end by the trailing-trim length, keeping the recorded span
|
|
342
|
+
// byte-identical to `content` in the source (the alignment
|
|
343
|
+
// invariant locked in scopes/__tests__/extractor.test.ts). Trim
|
|
344
|
+
// lengths and columns both count UTF-16 code units, matching
|
|
345
|
+
// offsetToLineColumn and Fix.editColumn arithmetic. Table cells are
|
|
346
|
+
// single-line by construction, so plain column arithmetic is safe.
|
|
347
|
+
// Cells with no `tableContent` (empty `||` / whitespace-only) keep
|
|
348
|
+
// the cell token's own position: content '' has no text to anchor
|
|
349
|
+
// on, trivially satisfies the invariant, and can never contain a
|
|
350
|
+
// match.
|
|
351
|
+
const inHead = token.parent?.type === 'tableHead';
|
|
352
|
+
const scope = inHead ? 'table.header' : 'table.cell';
|
|
353
|
+
const cellTypes = inHead ? ['tableHeader'] : ['tableData'];
|
|
354
|
+
for (const cell of token.children.filter((child) => cellTypes.includes(child.type))) {
|
|
355
|
+
const text = findDescendant(cell, 'tableContent');
|
|
356
|
+
if (!text) {
|
|
357
|
+
segments.push(segmentFromToken(scope, cell, ''));
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
// Masked before trimming, not after: a tag flush against the cell's
|
|
361
|
+
// pipe padding becomes whitespace too, so `trim()` folds it into
|
|
362
|
+
// `leadingTrim` exactly like real padding. Same leading-trim-adjusted
|
|
363
|
+
// anchor as above, just computed over the masked text.
|
|
364
|
+
const masked = maskProse(text, hasMarkdocTags);
|
|
365
|
+
if (isProseless(masked))
|
|
366
|
+
continue;
|
|
367
|
+
const leadingTrim = masked.content.length - masked.content.trimStart().length;
|
|
368
|
+
const content = masked.content.trim();
|
|
369
|
+
const segment = segmentFromToken(scope, cell, content);
|
|
370
|
+
segment.startLine = text.startLine;
|
|
371
|
+
segment.startColumn = text.startColumn + leadingTrim;
|
|
372
|
+
segment.endLine = text.startLine;
|
|
373
|
+
segment.endColumn = segment.startColumn + content.length;
|
|
374
|
+
if (masked.masked) {
|
|
375
|
+
// Shifted by the same leading trim the content was, and clipped
|
|
376
|
+
// to what survived it, so the ranges stay offsets into THIS
|
|
377
|
+
// segment's `content` (a tag folded entirely into the trim
|
|
378
|
+
// leaves no range at all).
|
|
379
|
+
segment.sourceText = text.text.slice(leadingTrim, leadingTrim + content.length);
|
|
380
|
+
segment.maskedRanges = shiftRanges(masked.maskedRanges, leadingTrim, content.length);
|
|
381
|
+
}
|
|
382
|
+
segments.push(segment);
|
|
383
|
+
}
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
case 'yaml': {
|
|
387
|
+
segments.push(segmentFromToken('frontmatter', token));
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
case 'htmlFlow': {
|
|
391
|
+
const isComment = token.text.trimStart().startsWith('<!--');
|
|
392
|
+
segments.push(segmentFromToken(isComment ? 'comment' : 'html', token));
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
default:
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
// Iterative pre-order DFS: children are pushed in reverse so they pop in
|
|
400
|
+
// document order, reproducing the recursive walker's segment ordering
|
|
401
|
+
// exactly (visit parent, then each child subtree left to right).
|
|
402
|
+
const stack = [];
|
|
403
|
+
for (let i = tree.children.length - 1; i >= 0; i--)
|
|
404
|
+
stack.push(tree.children[i]);
|
|
405
|
+
while (stack.length > 0) {
|
|
406
|
+
const token = stack.pop();
|
|
407
|
+
if (token === undefined)
|
|
408
|
+
break;
|
|
409
|
+
if (visit(token)) {
|
|
410
|
+
for (let i = token.children.length - 1; i >= 0; i--)
|
|
411
|
+
stack.push(token.children[i]);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
const summarySegments = segments
|
|
415
|
+
.filter((segment) => isSummarySource(segment.scope))
|
|
416
|
+
.map((segment) => ({ ...segment, scope: 'summary' }));
|
|
417
|
+
const sentenceSegments = [];
|
|
418
|
+
for (const segment of segments) {
|
|
419
|
+
if (!SENTENCE_SOURCES.has(segment.scope))
|
|
420
|
+
continue;
|
|
421
|
+
for (const span of splitSentences(segment.content)) {
|
|
422
|
+
// offsetToLineColumn (never a bare '\n' split): segment content is a
|
|
423
|
+
// verbatim source slice, so on a CR-only file a '\n'-based mapping
|
|
424
|
+
// kept every sentence on the segment's first line with a column
|
|
425
|
+
// counted straight through the '\r'. On the segment's first line the
|
|
426
|
+
// sentence offset is added to the segment's own startColumn (the
|
|
427
|
+
// segment may begin mid-source-line); later lines start at column 1
|
|
428
|
+
// of the source, so the in-segment column is already the source
|
|
429
|
+
// column.
|
|
430
|
+
const start = offsetToLineColumn(segment.content, span.start);
|
|
431
|
+
const end = offsetToLineColumn(segment.content, span.end);
|
|
432
|
+
const sentence = {
|
|
433
|
+
scope: 'sentence',
|
|
434
|
+
content: span.text,
|
|
435
|
+
startLine: segment.startLine + start.line - 1,
|
|
436
|
+
startColumn: start.line === 1 ? segment.startColumn + span.start : start.column,
|
|
437
|
+
endLine: segment.startLine + end.line - 1,
|
|
438
|
+
endColumn: end.line === 1 ? segment.startColumn + span.end : end.column,
|
|
439
|
+
tokens: segment.tokens,
|
|
440
|
+
};
|
|
441
|
+
// A sentence carved out of a masked segment is masked too — re-based
|
|
442
|
+
// onto its own span so `sourceText`/`maskedRanges` keep meaning what
|
|
443
|
+
// they mean everywhere else: offsets into THIS segment's `content`.
|
|
444
|
+
if (segment.sourceText !== undefined) {
|
|
445
|
+
sentence.sourceText = segment.sourceText.slice(span.start, span.start + span.text.length);
|
|
446
|
+
sentence.maskedRanges = shiftRanges(segment.maskedRanges ?? [], span.start, span.text.length);
|
|
447
|
+
}
|
|
448
|
+
sentenceSegments.push(sentence);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// `markdoc.tag` emits one segment per `markdocTag` token, whatever its
|
|
452
|
+
// `markdocKind` (malformed spans included — a pattern rule may well want to
|
|
453
|
+
// target those) and wherever it sits: a block sibling, an inline child of a
|
|
454
|
+
// paragraph or heading, or nested in a table cell. Sourced from the
|
|
455
|
+
// document's token list rather than from the walk, because the walk stops
|
|
456
|
+
// descending once a `tableRow` has emitted its cell segments and so never
|
|
457
|
+
// reaches a tag inside a cell. With markdoc parsing off no `markdocTag`
|
|
458
|
+
// tokens exist, so this is always `[]`.
|
|
459
|
+
//
|
|
460
|
+
// The sort is a no-op today: `filterByTypes` excludes `inHtmlFlow` tokens,
|
|
461
|
+
// and no `markdocTag` token is ever produced with that flag anyway, because
|
|
462
|
+
// `reparseHtmlFlow` re-tokenizes an html block's text with the base
|
|
463
|
+
// extensions only — `markdocSyntax` is not among them, so a `{% ... %}` span
|
|
464
|
+
// inside `<div>...</div>` never becomes a `markdocTag` at all. Every entry
|
|
465
|
+
// therefore arrives in strict document order. Kept because it costs nothing
|
|
466
|
+
// and becomes load-bearing again the moment something (a markdoc-aware
|
|
467
|
+
// `reparseHtmlFlow`, most plausibly) can append a `markdocTag` out of order,
|
|
468
|
+
// which `computeMarkdocPairing` in parser/markdoc/pairing.ts already has to
|
|
469
|
+
// handle.
|
|
470
|
+
const markdocTagSegments = [...markdocTags]
|
|
471
|
+
.sort((a, b) => a.startLine - b.startLine || a.startColumn - b.startColumn)
|
|
472
|
+
.map((token) => segmentFromToken('markdoc.tag', token));
|
|
473
|
+
return [...segments, ...summarySegments, ...sentenceSegments, ...markdocTagSegments];
|
|
474
|
+
}
|
|
475
|
+
//# sourceMappingURL=extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/scopes/extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAY,EAAE,OAAgB;IACrE,OAAO;QACL,KAAK;QACL,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,IAAI;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,CAAC,KAAK,CAAC;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAY,EAAE,IAAY;IAC3C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,iEAAiE;AACjE,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,SAAS,cAAc,CAAC,KAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,iBAAiB;AACjB,SAAS,kBAAkB,CAAC,KAAY,EAAE,IAAY;IACpD,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,yEAAyE;AACzE,sEAAsE;AACtE,4EAA4E;AAC5E,qCAAqC;AACrC,SAAS,kBAAkB,CACzB,IAAY,EACZ,SAAiB,EACjB,WAAmB,EACnB,IAAY,EACZ,MAAc;IAEd,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,GAAG,WAAW,CAAC;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,IAAI,WAAW,KAAK,IAAI;YAAE,MAAM;IAClC,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAWD,4DAA4D;AAC5D,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,qCAAqC;AACrC,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,UAAU;AACV,SAAS,SAAS,CAAC,SAAgB,EAAE,OAAgB;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,QAAQ,GAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEvC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAChD,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI;SACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC;QAC/C,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;KAC1C,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,YAAY,GAAgB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,KAAK;YAAE,SAAS;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/E,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC;IACf,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAClE,CAAC;AAED,2EAA2E;AAC3E,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAAmB;IACtC,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,mDAAmD;AACnD,SAAS,WAAW,CAAC,MAAmB,EAAE,MAAc,EAAE,MAAc;IACtE,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,8CAA8C;IAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IACrE,OAAO,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAC/B,OAAO,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,KAAwB;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,eAAe,CAAU,CAAC;AAE7D,mEAAmE;AACnE,4EAA4E;AAC5E,qEAAqE;AACrE,wEAAwE;AACxE,kCAAkC;AAClC,SAAS,0BAA0B,CAAC,KAAY;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAmC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAE3E,sEAAsE;AACtE,uEAAuE;AACvE,2EAA2E;AAC3E,gDAAgD;AAChD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;AAElG,0EAA0E;AAC1E,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAe,EAAE,QAAgB;IAC7D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,6EAA6E;IAC7E,sEAAsE;IACtE,2EAA2E;IAC3E,wEAAwE;IACxE,4BAA4B;IAC5B,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,mCAAmC;IACnC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9C,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,6DAA6D;IAC7D,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,MAAa,EAA6B,EAAE;QAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,WAAW,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACjC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,oEAAoE;IACpE,uEAAuE;IACvE,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,KAAY,EAAW,EAAE;QACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC;gBAC7B,sEAAsE;gBACtE,kEAAkE;gBAClE,qEAAqE;gBACrE,kDAAkD;gBAClD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;gBACvD,IAAI,OAAO;oBAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC,CAAC,mCAAmC;YACnD,CAAC;YACD,KAAK,WAAW,EAAE,CAAC;gBACjB,iEAAiE;gBACjE,+DAA+D;gBAC/D,oEAAoE;gBACpE,oEAAoE;gBACpE,qEAAqE;gBACrE,+DAA+D;gBAC/D,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC,CAAC,qCAAqC;YACpD,CAAC;YACD,wEAAwE;YACxE,mEAAmE;YACnE,kEAAkE;YAClE,iEAAiE;YACjE,uEAAuE;YACvE,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,6CAA6C;YAC7C,KAAK,OAAO,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,CAAC,4CAA4C;YAC3D,CAAC;YACD,KAAK,YAAY,CAAC;YAClB,KAAK,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChD,OAAO,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,CAAC,oDAAoD;YACnE,CAAC;YACD,KAAK,SAAS,EAAE,CAAC;gBACf,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAmC,CAAC,EAAE,CAAC;oBAC1F,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC9C,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,QAAQ,GAAG;4BACjB,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,UAAiC,CAAC;yBACnE,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,oEAAoE;gBACpE,oEAAoE;gBACpE,kEAAkE;gBAClE,oEAAoE;gBACpE,0BAA0B;gBAC1B,EAAE;gBACF,oEAAoE;gBACpE,8DAA8D;gBAC9D,gEAAgE;gBAChE,iEAAiE;gBACjE,mEAAmE;gBACnE,gEAAgE;gBAChE,iEAAiE;gBACjE,6DAA6D;gBAC7D,2DAA2D;gBAC3D,gEAAgE;gBAChE,6DAA6D;gBAC7D,oEAAoE;gBACpE,mEAAmE;gBACnE,mEAAmE;gBACnE,kEAAkE;gBAClE,iEAAiE;gBACjE,SAAS;gBACT,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;gBACrD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACpF,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAClD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;wBACjD,SAAS;oBACX,CAAC;oBACD,oEAAoE;oBACpE,iEAAiE;oBACjE,sEAAsE;oBACtE,uDAAuD;oBACvD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC/C,IAAI,WAAW,CAAC,MAAM,CAAC;wBAAE,SAAS;oBAClC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;oBAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBACvD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBACnC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBACrD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;oBACjC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;oBACzD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAClB,gEAAgE;wBAChE,4DAA4D;wBAC5D,2DAA2D;wBAC3D,2BAA2B;wBAC3B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChF,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACvF,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YACD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,yEAAyE;IACzE,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM;QAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ;SAC7B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACnD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAoB,EAAE,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACnD,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,qEAAqE;YACrE,mEAAmE;YACnE,gEAAgE;YAChE,qEAAqE;YACrE,iEAAiE;YACjE,oEAAoE;YACpE,gEAAgE;YAChE,UAAU;YACV,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAkB;gBAC9B,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;gBAC7C,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;gBAC/E,OAAO,EAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;gBACzC,SAAS,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM;gBACvE,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YACF,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1F,QAAQ,CAAC,YAAY,GAAG,WAAW,CACjC,OAAO,CAAC,YAAY,IAAI,EAAE,EAC1B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC;YACJ,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,4EAA4E;IAC5E,4EAA4E;IAC5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,wCAAwC;IACxC,EAAE;IACF,2EAA2E;IAC3E,4EAA4E;IAC5E,oEAAoE;IACpE,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,UAAU;IACV,MAAM,kBAAkB,GAAG,CAAC,GAAG,WAAW,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,EAAE,GAAG,gBAAgB,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ScopedSegment } from './types.js';
|
|
2
|
+
export type ScopePredicate = (segment: ScopedSegment) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* One `&`-joined clause of a scope selector entry, e.g. `'~heading'` inside
|
|
5
|
+
* `'paragraph & ~heading'`.
|
|
6
|
+
*/
|
|
7
|
+
export interface SelectorClause {
|
|
8
|
+
/** The clause text as written (trimmed), including any leading `~`. */
|
|
9
|
+
clause: string;
|
|
10
|
+
/** True when the clause is `~`-negated. */
|
|
11
|
+
negated: boolean;
|
|
12
|
+
/** The scope name with negation marker and whitespace stripped. */
|
|
13
|
+
term: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Splits a selector entry into its `&`-joined clauses. This is THE selector
|
|
17
|
+
* tokenizer: compilation (compileSelector below) and config validation
|
|
18
|
+
* (scopes/vocabulary.ts validateScopeSelector, config/validate.ts) must all
|
|
19
|
+
* parse selector entries through here, so the two sides can never drift
|
|
20
|
+
* apart on what counts as a term.
|
|
21
|
+
*/
|
|
22
|
+
export declare function tokenizeSelector(raw: string): SelectorClause[];
|
|
23
|
+
/**
|
|
24
|
+
* Order-preserving removal of duplicate messages within a single selector's
|
|
25
|
+
* problem list. A selector that repeats the same mistake per clause
|
|
26
|
+
* (`all & all`, `bogus & bogus`) produces the identical message once per
|
|
27
|
+
* clause — reporting it twice adds noise, not information. Applied inside
|
|
28
|
+
* the problem-producing helpers (wholeDocumentKeywordProblems here,
|
|
29
|
+
* validateScopeSelector in vocabulary.ts) so every consumer — config
|
|
30
|
+
* validation's error list and compileSelector's throw alike — gets the
|
|
31
|
+
* deduplicated form.
|
|
32
|
+
*/
|
|
33
|
+
export declare function dedupeProblems(problems: string[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Problems with `all`/`raw` used as selector TERMS inside a compound or
|
|
36
|
+
* negated expression. Both are whole-document keywords, not segment names —
|
|
37
|
+
* extractScopes never emits segments with those scopes — so:
|
|
38
|
+
* - as a conjunction term (`heading & all`) the keyword clause can never
|
|
39
|
+
* match a segment, and the whole rule silently reports nothing;
|
|
40
|
+
* - negated (`~all`, `~raw`) the clause matches EVERY segment, silently
|
|
41
|
+
* meaning "everything" when the set-theoretic reading of `~all` is
|
|
42
|
+
* "nothing".
|
|
43
|
+
* Bare `all`/`raw` as an entire single entry is NOT a problem — that's the
|
|
44
|
+
* valid whole-document form compileSelector normalizes to `null`. Config
|
|
45
|
+
* validation (config/validate.ts validateScope) surfaces these as
|
|
46
|
+
* validation errors; compileSelector throws on them so direct runRules
|
|
47
|
+
* callers that skip validation fail loudly instead of silently.
|
|
48
|
+
*/
|
|
49
|
+
export declare function wholeDocumentKeywordProblems(entry: string): string[];
|
|
50
|
+
export declare function compileSelector(scope: string | string[] | undefined): ScopePredicate | null;
|
|
51
|
+
//# sourceMappingURL=selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/scopes/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;AAIjE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAO9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBpE;AAgBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAyC3F"}
|