@greyworld/code-check-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/facade/code-checker.d.ts +14 -0
- package/dist/facade/code-checker.d.ts.map +1 -0
- package/dist/facade/code-checker.js +63 -0
- package/dist/facade/code-checker.js.map +1 -0
- package/dist/facade/index.d.ts +3 -0
- package/dist/facade/index.d.ts.map +1 -0
- package/dist/facade/index.js +6 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/types.d.ts +24 -0
- package/dist/facade/types.d.ts.map +1 -0
- package/dist/facade/types.js +3 -0
- package/dist/facade/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/ast-parser/go/index.d.ts +3 -0
- package/dist/tools/ast-parser/go/index.d.ts.map +1 -0
- package/dist/tools/ast-parser/go/index.js +6 -0
- package/dist/tools/ast-parser/go/index.js.map +1 -0
- package/dist/tools/ast-parser/go/parser.d.ts +56 -0
- package/dist/tools/ast-parser/go/parser.d.ts.map +1 -0
- package/dist/tools/ast-parser/go/parser.js +147 -0
- package/dist/tools/ast-parser/go/parser.js.map +1 -0
- package/dist/tools/ast-parser/go/schema-extractor.d.ts +103 -0
- package/dist/tools/ast-parser/go/schema-extractor.d.ts.map +1 -0
- package/dist/tools/ast-parser/go/schema-extractor.js +487 -0
- package/dist/tools/ast-parser/go/schema-extractor.js.map +1 -0
- package/dist/tools/ast-parser/go/semantic-normalizer.d.ts +51 -0
- package/dist/tools/ast-parser/go/semantic-normalizer.d.ts.map +1 -0
- package/dist/tools/ast-parser/go/semantic-normalizer.js +263 -0
- package/dist/tools/ast-parser/go/semantic-normalizer.js.map +1 -0
- package/dist/tools/ast-parser/go/types.d.ts +131 -0
- package/dist/tools/ast-parser/go/types.d.ts.map +1 -0
- package/dist/tools/ast-parser/go/types.js +3 -0
- package/dist/tools/ast-parser/go/types.js.map +1 -0
- package/dist/tools/ast-parser/markdown/index.d.ts +28 -0
- package/dist/tools/ast-parser/markdown/index.d.ts.map +1 -0
- package/dist/tools/ast-parser/markdown/index.js +31 -0
- package/dist/tools/ast-parser/markdown/index.js.map +1 -0
- package/dist/tools/ast-parser/markdown/parser.d.ts +271 -0
- package/dist/tools/ast-parser/markdown/parser.d.ts.map +1 -0
- package/dist/tools/ast-parser/markdown/parser.js +613 -0
- package/dist/tools/ast-parser/markdown/parser.js.map +1 -0
- package/dist/tools/ast-parser/markdown/types.d.ts +131 -0
- package/dist/tools/ast-parser/markdown/types.d.ts.map +1 -0
- package/dist/tools/ast-parser/markdown/types.js +3 -0
- package/dist/tools/ast-parser/markdown/types.js.map +1 -0
- package/dist/tools/env/index.d.ts +2 -0
- package/dist/tools/env/index.d.ts.map +1 -0
- package/dist/tools/env/index.js +6 -0
- package/dist/tools/env/index.js.map +1 -0
- package/dist/tools/env/load-env.d.ts +9 -0
- package/dist/tools/env/load-env.d.ts.map +1 -0
- package/dist/tools/env/load-env.js +39 -0
- package/dist/tools/env/load-env.js.map +1 -0
- package/dist/tools/line-pattern/index.d.ts +15 -0
- package/dist/tools/line-pattern/index.d.ts.map +1 -0
- package/dist/tools/line-pattern/index.js +25 -0
- package/dist/tools/line-pattern/index.js.map +1 -0
- package/dist/tools/line-pattern/line-pattern.d.ts +53 -0
- package/dist/tools/line-pattern/line-pattern.d.ts.map +1 -0
- package/dist/tools/line-pattern/line-pattern.js +88 -0
- package/dist/tools/line-pattern/line-pattern.js.map +1 -0
- package/dist/tools/line-pattern/segment.d.ts +24 -0
- package/dist/tools/line-pattern/segment.d.ts.map +1 -0
- package/dist/tools/line-pattern/segment.js +15 -0
- package/dist/tools/line-pattern/segment.js.map +1 -0
- package/dist/tools/line-pattern/segments.d.ts +43 -0
- package/dist/tools/line-pattern/segments.d.ts.map +1 -0
- package/dist/tools/line-pattern/segments.js +91 -0
- package/dist/tools/line-pattern/segments.js.map +1 -0
- package/dist/tools/llm/description-intent/format-spec.d.ts +3 -0
- package/dist/tools/llm/description-intent/format-spec.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/format-spec.js +167 -0
- package/dist/tools/llm/description-intent/format-spec.js.map +1 -0
- package/dist/tools/llm/description-intent/index.d.ts +7 -0
- package/dist/tools/llm/description-intent/index.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/index.js +15 -0
- package/dist/tools/llm/description-intent/index.js.map +1 -0
- package/dist/tools/llm/description-intent/intent-detector.d.ts +8 -0
- package/dist/tools/llm/description-intent/intent-detector.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/intent-detector.js +103 -0
- package/dist/tools/llm/description-intent/intent-detector.js.map +1 -0
- package/dist/tools/llm/description-intent/normalizer.d.ts +12 -0
- package/dist/tools/llm/description-intent/normalizer.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/normalizer.js +73 -0
- package/dist/tools/llm/description-intent/normalizer.js.map +1 -0
- package/dist/tools/llm/description-intent/slot-extractor.d.ts +3 -0
- package/dist/tools/llm/description-intent/slot-extractor.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/slot-extractor.js +66 -0
- package/dist/tools/llm/description-intent/slot-extractor.js.map +1 -0
- package/dist/tools/llm/description-intent/types.d.ts +28 -0
- package/dist/tools/llm/description-intent/types.d.ts.map +1 -0
- package/dist/tools/llm/description-intent/types.js +19 -0
- package/dist/tools/llm/description-intent/types.js.map +1 -0
- package/dist/tools/llm/index.d.ts +16 -0
- package/dist/tools/llm/index.d.ts.map +1 -0
- package/dist/tools/llm/index.js +26 -0
- package/dist/tools/llm/index.js.map +1 -0
- package/dist/tools/llm/model.d.ts +3 -0
- package/dist/tools/llm/model.d.ts.map +1 -0
- package/dist/tools/llm/model.js +18 -0
- package/dist/tools/llm/model.js.map +1 -0
- package/dist/tools/llm/structured-caller.d.ts +86 -0
- package/dist/tools/llm/structured-caller.d.ts.map +1 -0
- package/dist/tools/llm/structured-caller.js +181 -0
- package/dist/tools/llm/structured-caller.js.map +1 -0
- package/dist/tools/node-pattern/index.d.ts +17 -0
- package/dist/tools/node-pattern/index.d.ts.map +1 -0
- package/dist/tools/node-pattern/index.js +36 -0
- package/dist/tools/node-pattern/index.js.map +1 -0
- package/dist/tools/node-pattern/matchers.d.ts +61 -0
- package/dist/tools/node-pattern/matchers.d.ts.map +1 -0
- package/dist/tools/node-pattern/matchers.js +154 -0
- package/dist/tools/node-pattern/matchers.js.map +1 -0
- package/dist/tools/node-pattern/node-matcher.d.ts +69 -0
- package/dist/tools/node-pattern/node-matcher.d.ts.map +1 -0
- package/dist/tools/node-pattern/node-matcher.js +122 -0
- package/dist/tools/node-pattern/node-matcher.js.map +1 -0
- package/dist/tools/node-pattern/node-pattern.d.ts +65 -0
- package/dist/tools/node-pattern/node-pattern.d.ts.map +1 -0
- package/dist/tools/node-pattern/node-pattern.js +129 -0
- package/dist/tools/node-pattern/node-pattern.js.map +1 -0
- package/dist/tools/section-check/index.d.ts +4 -0
- package/dist/tools/section-check/index.d.ts.map +1 -0
- package/dist/tools/section-check/index.js +10 -0
- package/dist/tools/section-check/index.js.map +1 -0
- package/dist/tools/section-check/section-check.d.ts +46 -0
- package/dist/tools/section-check/section-check.d.ts.map +1 -0
- package/dist/tools/section-check/section-check.js +264 -0
- package/dist/tools/section-check/section-check.js.map +1 -0
- package/dist/tools/section-check/types.d.ts +35 -0
- package/dist/tools/section-check/types.d.ts.map +1 -0
- package/dist/tools/section-check/types.js +23 -0
- package/dist/tools/section-check/types.js.map +1 -0
- package/dist/tools/text-grep/index.d.ts +10 -0
- package/dist/tools/text-grep/index.d.ts.map +1 -0
- package/dist/tools/text-grep/index.js +13 -0
- package/dist/tools/text-grep/index.js.map +1 -0
- package/dist/tools/text-grep/regex-grep.d.ts +92 -0
- package/dist/tools/text-grep/regex-grep.d.ts.map +1 -0
- package/dist/tools/text-grep/regex-grep.js +141 -0
- package/dist/tools/text-grep/regex-grep.js.map +1 -0
- package/dist/workflow/context/context.d.ts +13 -0
- package/dist/workflow/context/context.d.ts.map +1 -0
- package/dist/workflow/context/context.js +29 -0
- package/dist/workflow/context/context.js.map +1 -0
- package/dist/workflow/implement/resource-check/context-keys.d.ts +30 -0
- package/dist/workflow/implement/resource-check/context-keys.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/context-keys.js +33 -0
- package/dist/workflow/implement/resource-check/context-keys.js.map +1 -0
- package/dist/workflow/implement/resource-check/resource-check-workflow.d.ts +20 -0
- package/dist/workflow/implement/resource-check/resource-check-workflow.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/resource-check-workflow.js +325 -0
- package/dist/workflow/implement/resource-check/resource-check-workflow.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/index.d.ts +5 -0
- package/dist/workflow/implement/resource-check/rules/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/index.js +21 -0
- package/dist/workflow/implement/resource-check/rules/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/arguments/argument-section-format-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/arguments/argument-section-format-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/arguments/argument-section-format-rule.js +51 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/arguments/argument-section-format-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/attributes/attribute-section-format-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/attributes/attribute-section-format-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/attributes/attribute-section-format-rule.js +60 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/attributes/attribute-section-format-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/blank-line-between-blocks-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/blank-line-between-blocks-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/blank-line-between-blocks-rule.js +80 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/blank-line-between-blocks-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example/example-section-exists-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example/example-section-exists-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example/example-section-exists-rule.js +42 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example/example-section-exists-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example-section-exists-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example-section-exists-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example-section-exists-rule.js +34 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/example-section-exists-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter/frontmatter-check-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter/frontmatter-check-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter/frontmatter-check-rule.js +33 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter/frontmatter-check-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter-check-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter-check-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter-check-rule.js +33 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/frontmatter-check-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/h1-exists-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/h1-exists-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/h1-exists-rule.js +34 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/h1-exists-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/index.d.ts +11 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/index.js +38 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/line-length-rule.d.ts +15 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/line-length-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/line-length-rule.js +77 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/line-length-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/number-format-rule.d.ts +23 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/number-format-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/number-format-rule.js +128 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/number-format-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/shared/section-check-result.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/shared/section-check-result.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/shared/section-check-result.js +19 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/shared/section-check-result.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/title/h1-exists-rule.d.ts +8 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/title/h1-exists-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/title/h1-exists-rule.js +44 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/title/h1-exists-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/blank-line-between-blocks-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/blank-line-between-blocks-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/blank-line-between-blocks-rule.js +80 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/blank-line-between-blocks-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/line-length-rule.d.ts +15 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/line-length-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/line-length-rule.js +77 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/line-length-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/number-format-rule.d.ts +23 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/number-format-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/number-format-rule.js +128 -0
- package/dist/workflow/implement/resource-check/rules/markdown-format/total/number-format-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/argument-section-semantic-rule.d.ts +11 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/argument-section-semantic-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/argument-section-semantic-rule.js +145 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/argument-section-semantic-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/arguments/argument-section-semantic-rule.d.ts +11 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/arguments/argument-section-semantic-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/arguments/argument-section-semantic-rule.js +145 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/arguments/argument-section-semantic-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attribute-section-semantic-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attribute-section-semantic-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attribute-section-semantic-rule.js +83 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attribute-section-semantic-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attributes/attribute-section-semantic-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attributes/attribute-section-semantic-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attributes/attribute-section-semantic-rule.js +83 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/attributes/attribute-section-semantic-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/index.d.ts +7 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/index.js +15 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/section-existence-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/section-existence-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/section-existence-rule.js +96 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/section-existence-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/total/section-existence-rule.d.ts +9 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/total/section-existence-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/total/section-existence-rule.js +109 -0
- package/dist/workflow/implement/resource-check/rules/markdown-semantic/total/section-existence-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/rules/stage-placeholder-rule.d.ts +19 -0
- package/dist/workflow/implement/resource-check/rules/stage-placeholder-rule.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/rules/stage-placeholder-rule.js +31 -0
- package/dist/workflow/implement/resource-check/rules/stage-placeholder-rule.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/builder.d.ts +15 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/builder.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/builder.js +554 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/builder.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/index.d.ts +5 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/index.js +16 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/types.d.ts +94 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/types.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/types.js +42 -0
- package/dist/workflow/implement/resource-check/tools/doc-semantic/types.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/builder.d.ts +4 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/builder.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/builder.js +103 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/builder.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/index.d.ts +3 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/index.js +6 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/types.d.ts +47 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/types.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/types.js +3 -0
- package/dist/workflow/implement/resource-check/tools/schema-semantic/types.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/index.d.ts +4 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/index.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/index.js +8 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/index.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/schema-extractor.d.ts +108 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/schema-extractor.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/schema-extractor.js +498 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/schema-extractor.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/semantic-normalizer.d.ts +51 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/semantic-normalizer.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/semantic-normalizer.js +271 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/semantic-normalizer.js.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/types.d.ts +133 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/types.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/types.js +3 -0
- package/dist/workflow/implement/resource-check/tools/terraform-schema/types.js.map +1 -0
- package/dist/workflow/implement/resource-check/types.d.ts +18 -0
- package/dist/workflow/implement/resource-check/types.d.ts.map +1 -0
- package/dist/workflow/implement/resource-check/types.js +107 -0
- package/dist/workflow/implement/resource-check/types.js.map +1 -0
- package/dist/workflow/types/rule/rule.d.ts +72 -0
- package/dist/workflow/types/rule/rule.d.ts.map +1 -0
- package/dist/workflow/types/rule/rule.js +110 -0
- package/dist/workflow/types/rule/rule.js.map +1 -0
- package/dist/workflow/workflow.d.ts +52 -0
- package/dist/workflow/workflow.d.ts.map +1 -0
- package/dist/workflow/workflow.js +121 -0
- package/dist/workflow/workflow.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createModel = createModel;
|
|
4
|
+
const openai_1 = require("@langchain/openai");
|
|
5
|
+
const env_1 = require("../env");
|
|
6
|
+
(0, env_1.loadEnvFile)();
|
|
7
|
+
function createModel(modelName = process.env.QWEN_MODEL || "qwen-plus", temperature = 0.7, streaming = false, baseURL = process.env.DASHSCOPE_BASE_URL || "", apiKey = process.env.DASHSCOPE_API_KEY || "") {
|
|
8
|
+
return new openai_1.ChatOpenAI({
|
|
9
|
+
modelName,
|
|
10
|
+
temperature,
|
|
11
|
+
streaming,
|
|
12
|
+
configuration: {
|
|
13
|
+
baseURL,
|
|
14
|
+
apiKey,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/tools/llm/model.ts"],"names":[],"mappings":";;AAKA,kCAgBC;AArBD,8CAA+C;AAC/C,gCAAqC;AAErC,IAAA,iBAAW,GAAE,CAAC;AAEd,SAAgB,WAAW,CACvB,YAAoB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,EACzD,cAAsB,GAAG,EACzB,YAAqB,KAAK,EAC1B,UAAkB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EACtD,SAAiB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;IAEpD,OAAO,IAAI,mBAAU,CAAC;QAClB,SAAS;QACT,WAAW;QACX,SAAS;QACT,aAAa,EAAE;YACX,OAAO;YACP,MAAM;SACT;KACJ,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
3
|
+
/**
|
|
4
|
+
* Options for creating a StructuredCaller.
|
|
5
|
+
*/
|
|
6
|
+
export interface StructuredCallerOptions {
|
|
7
|
+
/** Maximum retry attempts on parse / validation failure (default: 2). */
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface StructuredCallSuccess<T> {
|
|
11
|
+
ok: true;
|
|
12
|
+
data: T;
|
|
13
|
+
/** Number of retries consumed (0 = first attempt succeeded). */
|
|
14
|
+
retries: number;
|
|
15
|
+
}
|
|
16
|
+
export interface StructuredCallFailure {
|
|
17
|
+
ok: false;
|
|
18
|
+
error: string;
|
|
19
|
+
retries: number;
|
|
20
|
+
/** Raw model output from the last attempt, useful for debugging. */
|
|
21
|
+
lastRaw?: string;
|
|
22
|
+
}
|
|
23
|
+
export type StructuredCallResult<T> = StructuredCallSuccess<T> | StructuredCallFailure;
|
|
24
|
+
/**
|
|
25
|
+
* Stateless tool that calls an LLM and validates the response against a
|
|
26
|
+
* Zod schema.
|
|
27
|
+
*
|
|
28
|
+
* Workflow:
|
|
29
|
+
* 1. Append JSON format instructions (derived from the Zod schema) to
|
|
30
|
+
* the system prompt.
|
|
31
|
+
* 2. Invoke the model.
|
|
32
|
+
* 3. Extract JSON from the raw response (handles code fences, leading
|
|
33
|
+
* text, etc.).
|
|
34
|
+
* 4. Validate the JSON with Zod.
|
|
35
|
+
* 5. On failure, feed the error back to the model and retry up to
|
|
36
|
+
* `maxRetries` times.
|
|
37
|
+
*
|
|
38
|
+
* Temperature is intentionally NOT managed here — configure it when
|
|
39
|
+
* creating the model (recommend 0–0.2 for structured output).
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { StructuredCaller } from "@code-check/core";
|
|
44
|
+
* import { z } from "zod";
|
|
45
|
+
*
|
|
46
|
+
* const caller = new StructuredCaller(model);
|
|
47
|
+
* const result = await caller.call(
|
|
48
|
+
* z.object({
|
|
49
|
+
* pass: z.boolean().describe("Whether the check passed"),
|
|
50
|
+
* reason: z.string().describe("Short explanation"),
|
|
51
|
+
* }),
|
|
52
|
+
* "You are a document reviewer.",
|
|
53
|
+
* "Check whether the title matches: ...",
|
|
54
|
+
* );
|
|
55
|
+
*
|
|
56
|
+
* if (result.ok) {
|
|
57
|
+
* console.log(result.data.pass, result.data.reason);
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class StructuredCaller {
|
|
62
|
+
private readonly model;
|
|
63
|
+
private readonly maxRetries;
|
|
64
|
+
constructor(model: BaseChatModel, options?: StructuredCallerOptions);
|
|
65
|
+
/**
|
|
66
|
+
* Call the model and return a schema-validated result.
|
|
67
|
+
*
|
|
68
|
+
* @param schema Zod schema defining the expected output shape.
|
|
69
|
+
* @param systemPrompt System-level instruction (what the model should do).
|
|
70
|
+
* @param userPrompt User-level input (the data to process).
|
|
71
|
+
*/
|
|
72
|
+
call<S extends z.ZodType>(schema: S, systemPrompt: string, userPrompt: string): Promise<StructuredCallResult<z.infer<S>>>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract a JSON value from a string that may contain surrounding text
|
|
76
|
+
* or markdown code fences.
|
|
77
|
+
*
|
|
78
|
+
* Tries three strategies in order:
|
|
79
|
+
* 1. Direct `JSON.parse` on the trimmed text.
|
|
80
|
+
* 2. Extract content from the first ``` code fence.
|
|
81
|
+
* 3. Locate the outermost `{ … }` bracket pair.
|
|
82
|
+
*
|
|
83
|
+
* Returns `null` when no valid JSON can be extracted.
|
|
84
|
+
*/
|
|
85
|
+
export declare function extractJson(text: string): unknown;
|
|
86
|
+
//# sourceMappingURL=structured-caller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-caller.d.ts","sourceRoot":"","sources":["../../../src/tools/llm/structured-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAQjF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,CAAC,CAAC;IACR,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAC5B,qBAAqB,CAAC,CAAC,CAAC,GACxB,qBAAqB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,KAAK,EAAE,aAAa,EAAE,OAAO,GAAE,uBAA4B;IAKvE;;;;;;OAMG;IACU,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EACjC,MAAM,EAAE,CAAC,EACT,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;CAsE/C;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0BjD"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StructuredCaller = void 0;
|
|
4
|
+
exports.extractJson = extractJson;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const messages_1 = require("@langchain/core/messages");
|
|
7
|
+
/**
|
|
8
|
+
* Stateless tool that calls an LLM and validates the response against a
|
|
9
|
+
* Zod schema.
|
|
10
|
+
*
|
|
11
|
+
* Workflow:
|
|
12
|
+
* 1. Append JSON format instructions (derived from the Zod schema) to
|
|
13
|
+
* the system prompt.
|
|
14
|
+
* 2. Invoke the model.
|
|
15
|
+
* 3. Extract JSON from the raw response (handles code fences, leading
|
|
16
|
+
* text, etc.).
|
|
17
|
+
* 4. Validate the JSON with Zod.
|
|
18
|
+
* 5. On failure, feed the error back to the model and retry up to
|
|
19
|
+
* `maxRetries` times.
|
|
20
|
+
*
|
|
21
|
+
* Temperature is intentionally NOT managed here — configure it when
|
|
22
|
+
* creating the model (recommend 0–0.2 for structured output).
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { StructuredCaller } from "@code-check/core";
|
|
27
|
+
* import { z } from "zod";
|
|
28
|
+
*
|
|
29
|
+
* const caller = new StructuredCaller(model);
|
|
30
|
+
* const result = await caller.call(
|
|
31
|
+
* z.object({
|
|
32
|
+
* pass: z.boolean().describe("Whether the check passed"),
|
|
33
|
+
* reason: z.string().describe("Short explanation"),
|
|
34
|
+
* }),
|
|
35
|
+
* "You are a document reviewer.",
|
|
36
|
+
* "Check whether the title matches: ...",
|
|
37
|
+
* );
|
|
38
|
+
*
|
|
39
|
+
* if (result.ok) {
|
|
40
|
+
* console.log(result.data.pass, result.data.reason);
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
class StructuredCaller {
|
|
45
|
+
constructor(model, options = {}) {
|
|
46
|
+
this.model = model;
|
|
47
|
+
this.maxRetries = options.maxRetries ?? 2;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Call the model and return a schema-validated result.
|
|
51
|
+
*
|
|
52
|
+
* @param schema Zod schema defining the expected output shape.
|
|
53
|
+
* @param systemPrompt System-level instruction (what the model should do).
|
|
54
|
+
* @param userPrompt User-level input (the data to process).
|
|
55
|
+
*/
|
|
56
|
+
async call(schema, systemPrompt, userPrompt) {
|
|
57
|
+
const formatBlock = buildFormatInstruction(schema);
|
|
58
|
+
const messages = [
|
|
59
|
+
new messages_1.SystemMessage(systemPrompt + "\n\n" + formatBlock),
|
|
60
|
+
new messages_1.HumanMessage(userPrompt),
|
|
61
|
+
];
|
|
62
|
+
let lastRaw;
|
|
63
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
64
|
+
let raw;
|
|
65
|
+
try {
|
|
66
|
+
const response = await this.model.invoke(messages);
|
|
67
|
+
raw = typeof response.content === "string"
|
|
68
|
+
? response.content
|
|
69
|
+
: JSON.stringify(response.content);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
error: `Model invocation failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
75
|
+
retries: attempt,
|
|
76
|
+
lastRaw,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
lastRaw = raw;
|
|
80
|
+
// ── Step 1: extract JSON ──
|
|
81
|
+
const json = extractJson(raw);
|
|
82
|
+
if (json === null) {
|
|
83
|
+
if (attempt < this.maxRetries) {
|
|
84
|
+
messages.push(new messages_1.AIMessage(raw), new messages_1.HumanMessage("Your response could not be parsed as JSON. " +
|
|
85
|
+
"Please respond with ONLY a valid JSON object, " +
|
|
86
|
+
"no extra text or markdown fences."));
|
|
87
|
+
}
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// ── Step 2: validate against schema ──
|
|
91
|
+
const parsed = schema.safeParse(json);
|
|
92
|
+
if (parsed.success) {
|
|
93
|
+
return { ok: true, data: parsed.data, retries: attempt };
|
|
94
|
+
}
|
|
95
|
+
if (attempt < this.maxRetries) {
|
|
96
|
+
messages.push(new messages_1.AIMessage(raw), new messages_1.HumanMessage("Your JSON was valid but did not match the required schema.\n" +
|
|
97
|
+
`Validation errors:\n${formatZodError(parsed.error)}\n` +
|
|
98
|
+
"Please fix and respond with ONLY the corrected JSON."));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
ok: false,
|
|
103
|
+
error: `Failed to get valid structured output after ${this.maxRetries + 1} attempts`,
|
|
104
|
+
retries: this.maxRetries,
|
|
105
|
+
lastRaw,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.StructuredCaller = StructuredCaller;
|
|
110
|
+
// ── Utilities ──────────────────────────────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Extract a JSON value from a string that may contain surrounding text
|
|
113
|
+
* or markdown code fences.
|
|
114
|
+
*
|
|
115
|
+
* Tries three strategies in order:
|
|
116
|
+
* 1. Direct `JSON.parse` on the trimmed text.
|
|
117
|
+
* 2. Extract content from the first ``` code fence.
|
|
118
|
+
* 3. Locate the outermost `{ … }` bracket pair.
|
|
119
|
+
*
|
|
120
|
+
* Returns `null` when no valid JSON can be extracted.
|
|
121
|
+
*/
|
|
122
|
+
function extractJson(text) {
|
|
123
|
+
const trimmed = text.trim();
|
|
124
|
+
// 1. Direct parse
|
|
125
|
+
try {
|
|
126
|
+
return JSON.parse(trimmed);
|
|
127
|
+
}
|
|
128
|
+
catch { /* continue */ }
|
|
129
|
+
// 2. Markdown code fence
|
|
130
|
+
const fenceMatch = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
|
|
131
|
+
if (fenceMatch) {
|
|
132
|
+
try {
|
|
133
|
+
return JSON.parse(fenceMatch[1].trim());
|
|
134
|
+
}
|
|
135
|
+
catch { /* continue */ }
|
|
136
|
+
}
|
|
137
|
+
// 3. Outermost braces
|
|
138
|
+
const open = trimmed.indexOf("{");
|
|
139
|
+
const close = trimmed.lastIndexOf("}");
|
|
140
|
+
if (open !== -1 && close > open) {
|
|
141
|
+
try {
|
|
142
|
+
return JSON.parse(trimmed.slice(open, close + 1));
|
|
143
|
+
}
|
|
144
|
+
catch { /* continue */ }
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
// ── Internal helpers ──────────────────────────────────────────────────
|
|
149
|
+
function buildFormatInstruction(schema) {
|
|
150
|
+
let schemaStr;
|
|
151
|
+
try {
|
|
152
|
+
const jsonSchema = zod_1.z.toJSONSchema(schema);
|
|
153
|
+
const { $schema: _dropped, ...rest } = jsonSchema;
|
|
154
|
+
schemaStr = JSON.stringify(rest, null, 2);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
schemaStr = "(schema unavailable — follow the instructions above)";
|
|
158
|
+
}
|
|
159
|
+
return [
|
|
160
|
+
"## Response Format",
|
|
161
|
+
"",
|
|
162
|
+
"You MUST respond with ONLY a valid JSON object.",
|
|
163
|
+
"Do NOT wrap it in markdown code fences or add any explanatory text.",
|
|
164
|
+
"The JSON must conform to this schema:",
|
|
165
|
+
"",
|
|
166
|
+
schemaStr,
|
|
167
|
+
].join("\n");
|
|
168
|
+
}
|
|
169
|
+
function formatZodError(error) {
|
|
170
|
+
if (error &&
|
|
171
|
+
typeof error === "object" &&
|
|
172
|
+
"issues" in error &&
|
|
173
|
+
Array.isArray(error.issues)) {
|
|
174
|
+
const issues = error.issues;
|
|
175
|
+
return issues
|
|
176
|
+
.map((i) => ` - ${i.path.join(".")}: ${i.message}`)
|
|
177
|
+
.join("\n");
|
|
178
|
+
}
|
|
179
|
+
return String(error);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=structured-caller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-caller.js","sourceRoot":"","sources":["../../../src/tools/llm/structured-caller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Pattern Module
|
|
3
|
+
*
|
|
4
|
+
* Provides a composable, matcher-based approach to defining
|
|
5
|
+
* and validating AST node sequence patterns.
|
|
6
|
+
*
|
|
7
|
+
* Analogous to LinePattern for text lines — NodePattern works
|
|
8
|
+
* on flat arrays of MarkdownNode siblings.
|
|
9
|
+
*
|
|
10
|
+
* @module tools/node-pattern
|
|
11
|
+
*/
|
|
12
|
+
export { NodePattern } from "./node-pattern";
|
|
13
|
+
export type { NodeMatchResult, NodePatternMatch, NodeMatchFailure, } from "./node-pattern";
|
|
14
|
+
export type { NodeMatcher, GroupMatcher, NodeMatchElement, Quantifier, NodeMatchSegmentResult, GroupMatchSegmentResult, } from "./node-matcher";
|
|
15
|
+
export { matchNodes, matchGroup, isGroupMatcher } from "./node-matcher";
|
|
16
|
+
export { nodeType, heading, codeBlock, list, nodeWhere, anyNode, optionalNode, zeroOrMore, oneOrMore, tagged, group, optionalGroup, zeroOrMoreGroup, oneOrMoreGroup, } from "./matchers";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/node-pattern/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EACH,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,EACN,KAAK,EACL,aAAa,EACb,eAAe,EACf,cAAc,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Node Pattern Module
|
|
4
|
+
*
|
|
5
|
+
* Provides a composable, matcher-based approach to defining
|
|
6
|
+
* and validating AST node sequence patterns.
|
|
7
|
+
*
|
|
8
|
+
* Analogous to LinePattern for text lines — NodePattern works
|
|
9
|
+
* on flat arrays of MarkdownNode siblings.
|
|
10
|
+
*
|
|
11
|
+
* @module tools/node-pattern
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.oneOrMoreGroup = exports.zeroOrMoreGroup = exports.optionalGroup = exports.group = exports.tagged = exports.oneOrMore = exports.zeroOrMore = exports.optionalNode = exports.anyNode = exports.nodeWhere = exports.list = exports.codeBlock = exports.heading = exports.nodeType = exports.isGroupMatcher = exports.matchGroup = exports.matchNodes = exports.NodePattern = void 0;
|
|
15
|
+
var node_pattern_1 = require("./node-pattern");
|
|
16
|
+
Object.defineProperty(exports, "NodePattern", { enumerable: true, get: function () { return node_pattern_1.NodePattern; } });
|
|
17
|
+
var node_matcher_1 = require("./node-matcher");
|
|
18
|
+
Object.defineProperty(exports, "matchNodes", { enumerable: true, get: function () { return node_matcher_1.matchNodes; } });
|
|
19
|
+
Object.defineProperty(exports, "matchGroup", { enumerable: true, get: function () { return node_matcher_1.matchGroup; } });
|
|
20
|
+
Object.defineProperty(exports, "isGroupMatcher", { enumerable: true, get: function () { return node_matcher_1.isGroupMatcher; } });
|
|
21
|
+
var matchers_1 = require("./matchers");
|
|
22
|
+
Object.defineProperty(exports, "nodeType", { enumerable: true, get: function () { return matchers_1.nodeType; } });
|
|
23
|
+
Object.defineProperty(exports, "heading", { enumerable: true, get: function () { return matchers_1.heading; } });
|
|
24
|
+
Object.defineProperty(exports, "codeBlock", { enumerable: true, get: function () { return matchers_1.codeBlock; } });
|
|
25
|
+
Object.defineProperty(exports, "list", { enumerable: true, get: function () { return matchers_1.list; } });
|
|
26
|
+
Object.defineProperty(exports, "nodeWhere", { enumerable: true, get: function () { return matchers_1.nodeWhere; } });
|
|
27
|
+
Object.defineProperty(exports, "anyNode", { enumerable: true, get: function () { return matchers_1.anyNode; } });
|
|
28
|
+
Object.defineProperty(exports, "optionalNode", { enumerable: true, get: function () { return matchers_1.optionalNode; } });
|
|
29
|
+
Object.defineProperty(exports, "zeroOrMore", { enumerable: true, get: function () { return matchers_1.zeroOrMore; } });
|
|
30
|
+
Object.defineProperty(exports, "oneOrMore", { enumerable: true, get: function () { return matchers_1.oneOrMore; } });
|
|
31
|
+
Object.defineProperty(exports, "tagged", { enumerable: true, get: function () { return matchers_1.tagged; } });
|
|
32
|
+
Object.defineProperty(exports, "group", { enumerable: true, get: function () { return matchers_1.group; } });
|
|
33
|
+
Object.defineProperty(exports, "optionalGroup", { enumerable: true, get: function () { return matchers_1.optionalGroup; } });
|
|
34
|
+
Object.defineProperty(exports, "zeroOrMoreGroup", { enumerable: true, get: function () { return matchers_1.zeroOrMoreGroup; } });
|
|
35
|
+
Object.defineProperty(exports, "oneOrMoreGroup", { enumerable: true, get: function () { return matchers_1.oneOrMoreGroup; } });
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/node-pattern/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAepB,+CAAwE;AAA/D,0GAAA,UAAU,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,8GAAA,cAAc,OAAA;AAE/C,uCAeoB;AAdhB,oGAAA,QAAQ,OAAA;AACR,mGAAA,OAAO,OAAA;AACP,qGAAA,SAAS,OAAA;AACT,gGAAA,IAAI,OAAA;AACJ,qGAAA,SAAS,OAAA;AACT,mGAAA,OAAO,OAAA;AACP,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,kGAAA,MAAM,OAAA;AACN,iGAAA,KAAK,OAAA;AACL,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AACf,0GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { MarkdownNode, MarkdownNodeType, ListType } from "../ast-parser/markdown";
|
|
2
|
+
import type { NodeMatcher, GroupMatcher } from "./node-matcher";
|
|
3
|
+
/**
|
|
4
|
+
* Match a node by its type.
|
|
5
|
+
*/
|
|
6
|
+
export declare function nodeType(type: MarkdownNodeType, display?: string): NodeMatcher;
|
|
7
|
+
/**
|
|
8
|
+
* Match a heading node with a specific level.
|
|
9
|
+
*/
|
|
10
|
+
export declare function heading(level: number): NodeMatcher;
|
|
11
|
+
/**
|
|
12
|
+
* Match a code_block node, optionally restricted by info string.
|
|
13
|
+
*/
|
|
14
|
+
export declare function codeBlock(info?: string): NodeMatcher;
|
|
15
|
+
/**
|
|
16
|
+
* Match a list node, optionally restricted by list type.
|
|
17
|
+
*/
|
|
18
|
+
export declare function list(listType?: ListType): NodeMatcher;
|
|
19
|
+
/**
|
|
20
|
+
* Match a node using a custom predicate.
|
|
21
|
+
*/
|
|
22
|
+
export declare function nodeWhere(predicate: (n: MarkdownNode) => boolean, display: string): NodeMatcher;
|
|
23
|
+
/**
|
|
24
|
+
* Match any single node.
|
|
25
|
+
*/
|
|
26
|
+
export declare function anyNode(): NodeMatcher;
|
|
27
|
+
/**
|
|
28
|
+
* Make a matcher optional (0 or 1).
|
|
29
|
+
*/
|
|
30
|
+
export declare function optionalNode(matcher: NodeMatcher): NodeMatcher;
|
|
31
|
+
/**
|
|
32
|
+
* Allow a matcher to consume zero or more consecutive nodes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function zeroOrMore(matcher: NodeMatcher): NodeMatcher;
|
|
35
|
+
/**
|
|
36
|
+
* Require a matcher to consume one or more consecutive nodes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function oneOrMore(matcher: NodeMatcher): NodeMatcher;
|
|
39
|
+
/**
|
|
40
|
+
* Attach a named tag so captured nodes are accessible by name.
|
|
41
|
+
* Works on both single matchers and group matchers.
|
|
42
|
+
*/
|
|
43
|
+
export declare function tagged(tag: string, element: NodeMatcher): NodeMatcher;
|
|
44
|
+
export declare function tagged(tag: string, element: GroupMatcher): GroupMatcher;
|
|
45
|
+
/**
|
|
46
|
+
* Match a sequence of matchers exactly once as a group.
|
|
47
|
+
*/
|
|
48
|
+
export declare function group(matchers: NodeMatcher[]): GroupMatcher;
|
|
49
|
+
/**
|
|
50
|
+
* Match a sequence of matchers zero or one time.
|
|
51
|
+
*/
|
|
52
|
+
export declare function optionalGroup(matchers: NodeMatcher[]): GroupMatcher;
|
|
53
|
+
/**
|
|
54
|
+
* Match a sequence of matchers zero or more times (greedy).
|
|
55
|
+
*/
|
|
56
|
+
export declare function zeroOrMoreGroup(matchers: NodeMatcher[]): GroupMatcher;
|
|
57
|
+
/**
|
|
58
|
+
* Match a sequence of matchers one or more times (greedy).
|
|
59
|
+
*/
|
|
60
|
+
export declare function oneOrMoreGroup(matchers: NodeMatcher[]): GroupMatcher;
|
|
61
|
+
//# sourceMappingURL=matchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../../src/tools/node-pattern/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAoB,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAM9F;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAM9E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAMlD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAQpD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAQrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACrB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,EACvC,OAAO,EAAE,MAAM,GAChB,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,WAAW,CAMrC;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAE9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAM5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAM3D;AAID;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;AACvE,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC;AAWzE;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAO3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAOnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAOrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAOpE"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nodeType = nodeType;
|
|
4
|
+
exports.heading = heading;
|
|
5
|
+
exports.codeBlock = codeBlock;
|
|
6
|
+
exports.list = list;
|
|
7
|
+
exports.nodeWhere = nodeWhere;
|
|
8
|
+
exports.anyNode = anyNode;
|
|
9
|
+
exports.optionalNode = optionalNode;
|
|
10
|
+
exports.zeroOrMore = zeroOrMore;
|
|
11
|
+
exports.oneOrMore = oneOrMore;
|
|
12
|
+
exports.tagged = tagged;
|
|
13
|
+
exports.group = group;
|
|
14
|
+
exports.optionalGroup = optionalGroup;
|
|
15
|
+
exports.zeroOrMoreGroup = zeroOrMoreGroup;
|
|
16
|
+
exports.oneOrMoreGroup = oneOrMoreGroup;
|
|
17
|
+
function one() {
|
|
18
|
+
return { type: "one" };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Match a node by its type.
|
|
22
|
+
*/
|
|
23
|
+
function nodeType(type, display) {
|
|
24
|
+
return {
|
|
25
|
+
predicate: (n) => n.type === type,
|
|
26
|
+
display: display ?? type,
|
|
27
|
+
quantifier: one(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Match a heading node with a specific level.
|
|
32
|
+
*/
|
|
33
|
+
function heading(level) {
|
|
34
|
+
return {
|
|
35
|
+
predicate: (n) => n.type === "heading" && n.level === level,
|
|
36
|
+
display: `heading(${level})`,
|
|
37
|
+
quantifier: one(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Match a code_block node, optionally restricted by info string.
|
|
42
|
+
*/
|
|
43
|
+
function codeBlock(info) {
|
|
44
|
+
const predicate = info != null
|
|
45
|
+
? (n) => n.type === "code_block" && n.info === info
|
|
46
|
+
: (n) => n.type === "code_block";
|
|
47
|
+
const display = info != null ? `code_block(${info})` : "code_block";
|
|
48
|
+
return { predicate, display, quantifier: one() };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Match a list node, optionally restricted by list type.
|
|
52
|
+
*/
|
|
53
|
+
function list(listType) {
|
|
54
|
+
const predicate = listType != null
|
|
55
|
+
? (n) => n.type === "list" && n.listType === listType
|
|
56
|
+
: (n) => n.type === "list";
|
|
57
|
+
const display = listType != null ? `list(${listType})` : "list";
|
|
58
|
+
return { predicate, display, quantifier: one() };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Match a node using a custom predicate.
|
|
62
|
+
*/
|
|
63
|
+
function nodeWhere(predicate, display) {
|
|
64
|
+
return { predicate, display, quantifier: one() };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Match any single node.
|
|
68
|
+
*/
|
|
69
|
+
function anyNode() {
|
|
70
|
+
return {
|
|
71
|
+
predicate: () => true,
|
|
72
|
+
display: "*",
|
|
73
|
+
quantifier: one(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ── Quantifier modifiers (single node) ──
|
|
77
|
+
/**
|
|
78
|
+
* Make a matcher optional (0 or 1).
|
|
79
|
+
*/
|
|
80
|
+
function optionalNode(matcher) {
|
|
81
|
+
return { ...matcher, quantifier: { type: "optional" } };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Allow a matcher to consume zero or more consecutive nodes.
|
|
85
|
+
*/
|
|
86
|
+
function zeroOrMore(matcher) {
|
|
87
|
+
return {
|
|
88
|
+
...matcher,
|
|
89
|
+
display: `[${matcher.display}]*`,
|
|
90
|
+
quantifier: { type: "zeroOrMore" },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Require a matcher to consume one or more consecutive nodes.
|
|
95
|
+
*/
|
|
96
|
+
function oneOrMore(matcher) {
|
|
97
|
+
return {
|
|
98
|
+
...matcher,
|
|
99
|
+
display: `[${matcher.display}]+`,
|
|
100
|
+
quantifier: { type: "oneOrMore" },
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function tagged(tag, element) {
|
|
104
|
+
return { ...element, tag };
|
|
105
|
+
}
|
|
106
|
+
// ── Group combinators ──
|
|
107
|
+
function groupDisplay(matchers, suffix) {
|
|
108
|
+
return `(${matchers.map((m) => m.display).join(" ")})${suffix}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Match a sequence of matchers exactly once as a group.
|
|
112
|
+
*/
|
|
113
|
+
function group(matchers) {
|
|
114
|
+
return {
|
|
115
|
+
kind: "group",
|
|
116
|
+
matchers,
|
|
117
|
+
display: groupDisplay(matchers, ""),
|
|
118
|
+
quantifier: one(),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Match a sequence of matchers zero or one time.
|
|
123
|
+
*/
|
|
124
|
+
function optionalGroup(matchers) {
|
|
125
|
+
return {
|
|
126
|
+
kind: "group",
|
|
127
|
+
matchers,
|
|
128
|
+
display: groupDisplay(matchers, "?"),
|
|
129
|
+
quantifier: { type: "optional" },
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Match a sequence of matchers zero or more times (greedy).
|
|
134
|
+
*/
|
|
135
|
+
function zeroOrMoreGroup(matchers) {
|
|
136
|
+
return {
|
|
137
|
+
kind: "group",
|
|
138
|
+
matchers,
|
|
139
|
+
display: groupDisplay(matchers, "*"),
|
|
140
|
+
quantifier: { type: "zeroOrMore" },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Match a sequence of matchers one or more times (greedy).
|
|
145
|
+
*/
|
|
146
|
+
function oneOrMoreGroup(matchers) {
|
|
147
|
+
return {
|
|
148
|
+
kind: "group",
|
|
149
|
+
matchers,
|
|
150
|
+
display: groupDisplay(matchers, "+"),
|
|
151
|
+
quantifier: { type: "oneOrMore" },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=matchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchers.js","sourceRoot":"","sources":["../../../src/tools/node-pattern/matchers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { MarkdownNode } from "../ast-parser/markdown";
|
|
2
|
+
/**
|
|
3
|
+
* Controls how many consecutive nodes a single matcher consumes.
|
|
4
|
+
*/
|
|
5
|
+
export type Quantifier = {
|
|
6
|
+
type: "one";
|
|
7
|
+
} | {
|
|
8
|
+
type: "optional";
|
|
9
|
+
} | {
|
|
10
|
+
type: "zeroOrMore";
|
|
11
|
+
} | {
|
|
12
|
+
type: "oneOrMore";
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Atomic unit for matching a single AST node.
|
|
16
|
+
*
|
|
17
|
+
* Analogous to `Segment` in LinePattern — each matcher owns
|
|
18
|
+
* a predicate instead of a regex, plus a human-readable display
|
|
19
|
+
* string used in diagnostics and `toDisplayFormat()`.
|
|
20
|
+
*/
|
|
21
|
+
export interface NodeMatcher {
|
|
22
|
+
readonly predicate: (node: MarkdownNode) => boolean;
|
|
23
|
+
readonly display: string;
|
|
24
|
+
readonly quantifier: Quantifier;
|
|
25
|
+
readonly tag?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A group of matchers treated as a single repeatable unit.
|
|
29
|
+
*
|
|
30
|
+
* The inner matcher sequence is matched as a whole, and the
|
|
31
|
+
* quantifier controls how many times the sequence repeats.
|
|
32
|
+
* Similar to `(A B C)+` in regex.
|
|
33
|
+
*/
|
|
34
|
+
export interface GroupMatcher {
|
|
35
|
+
readonly kind: "group";
|
|
36
|
+
readonly matchers: NodeMatcher[];
|
|
37
|
+
readonly display: string;
|
|
38
|
+
readonly quantifier: Quantifier;
|
|
39
|
+
readonly tag?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Either a single-node matcher or a group of matchers.
|
|
43
|
+
*/
|
|
44
|
+
export type NodeMatchElement = NodeMatcher | GroupMatcher;
|
|
45
|
+
export declare function isGroupMatcher(el: NodeMatchElement): el is GroupMatcher;
|
|
46
|
+
export interface NodeMatchSegmentResult {
|
|
47
|
+
matched: boolean;
|
|
48
|
+
consumed: number;
|
|
49
|
+
}
|
|
50
|
+
export interface GroupMatchSegmentResult {
|
|
51
|
+
matched: boolean;
|
|
52
|
+
consumed: number;
|
|
53
|
+
innerTags: Record<string, MarkdownNode[]>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Try to consume nodes from `nodes[offset..]` according to
|
|
57
|
+
* the matcher's quantifier.
|
|
58
|
+
*
|
|
59
|
+
* Returns how many nodes were consumed (greedy for multi-quantifiers).
|
|
60
|
+
*/
|
|
61
|
+
export declare function matchNodes(matcher: NodeMatcher, nodes: MarkdownNode[], offset: number): NodeMatchSegmentResult;
|
|
62
|
+
/**
|
|
63
|
+
* Try to match a group (a sequence of matchers repeated per quantifier).
|
|
64
|
+
*
|
|
65
|
+
* Inner matcher tags are accumulated across all iterations
|
|
66
|
+
* into `innerTags`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function matchGroup(group: GroupMatcher, nodes: MarkdownNode[], offset: number): GroupMatchSegmentResult;
|
|
69
|
+
//# sourceMappingURL=node-matcher.d.ts.map
|