@untangle-code/parser-registry 0.0.0-stage → 0.1.1
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/LICENSE +661 -0
- package/NOTICE +90 -0
- package/README.md +352 -2
- package/THIRD_PARTY_LICENSES.md +91 -0
- package/dist/boundaries/expression.d.ts +10 -0
- package/dist/boundaries/expression.d.ts.map +1 -0
- package/dist/boundaries/expression.js +95 -0
- package/dist/boundaries/expression.js.map +1 -0
- package/dist/boundaries/extract.d.ts +12 -0
- package/dist/boundaries/extract.d.ts.map +1 -0
- package/dist/boundaries/extract.js +259 -0
- package/dist/boundaries/extract.js.map +1 -0
- package/dist/boundaries/python.d.ts +6 -0
- package/dist/boundaries/python.d.ts.map +1 -0
- package/dist/boundaries/python.js +154 -0
- package/dist/boundaries/python.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/astgrep-backend/adapter.d.ts +101 -0
- package/dist/languages/astgrep-backend/adapter.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/adapter.js +130 -0
- package/dist/languages/astgrep-backend/adapter.js.map +1 -0
- package/dist/languages/astgrep-backend/index.d.ts +29 -0
- package/dist/languages/astgrep-backend/index.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/index.js +28 -0
- package/dist/languages/astgrep-backend/index.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/bash.d.ts +38 -0
- package/dist/languages/astgrep-backend/lang/bash.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/bash.js +42 -0
- package/dist/languages/astgrep-backend/lang/bash.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/c.d.ts +33 -0
- package/dist/languages/astgrep-backend/lang/c.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/c.js +85 -0
- package/dist/languages/astgrep-backend/lang/c.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/cpp.d.ts +27 -0
- package/dist/languages/astgrep-backend/lang/cpp.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/cpp.js +38 -0
- package/dist/languages/astgrep-backend/lang/cpp.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/csharp.d.ts +24 -0
- package/dist/languages/astgrep-backend/lang/csharp.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/csharp.js +102 -0
- package/dist/languages/astgrep-backend/lang/csharp.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/index.d.ts +29 -0
- package/dist/languages/astgrep-backend/lang/index.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/index.js +22 -0
- package/dist/languages/astgrep-backend/lang/index.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/java.d.ts +26 -0
- package/dist/languages/astgrep-backend/lang/java.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/java.js +89 -0
- package/dist/languages/astgrep-backend/lang/java.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/kotlin.d.ts +44 -0
- package/dist/languages/astgrep-backend/lang/kotlin.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/kotlin.js +94 -0
- package/dist/languages/astgrep-backend/lang/kotlin.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/php.d.ts +23 -0
- package/dist/languages/astgrep-backend/lang/php.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/php.js +80 -0
- package/dist/languages/astgrep-backend/lang/php.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/ruby.d.ts +37 -0
- package/dist/languages/astgrep-backend/lang/ruby.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/ruby.js +70 -0
- package/dist/languages/astgrep-backend/lang/ruby.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/swift.d.ts +34 -0
- package/dist/languages/astgrep-backend/lang/swift.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/swift.js +86 -0
- package/dist/languages/astgrep-backend/lang/swift.js.map +1 -0
- package/dist/languages/astgrep-backend/languages.d.ts +55 -0
- package/dist/languages/astgrep-backend/languages.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/languages.js +214 -0
- package/dist/languages/astgrep-backend/languages.js.map +1 -0
- package/dist/languages/astgrep-backend/napi.d.ts +71 -0
- package/dist/languages/astgrep-backend/napi.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/napi.js +176 -0
- package/dist/languages/astgrep-backend/napi.js.map +1 -0
- package/dist/languages/astgrep-backend/syntax.d.ts +88 -0
- package/dist/languages/astgrep-backend/syntax.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/syntax.js +180 -0
- package/dist/languages/astgrep-backend/syntax.js.map +1 -0
- package/dist/languages/index.d.ts +14 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +37 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/javascript/index.d.ts +4 -0
- package/dist/languages/javascript/index.d.ts.map +1 -0
- package/dist/languages/javascript/index.js +7 -0
- package/dist/languages/javascript/index.js.map +1 -0
- package/dist/languages/jsx/index.d.ts +4 -0
- package/dist/languages/jsx/index.d.ts.map +1 -0
- package/dist/languages/jsx/index.js +7 -0
- package/dist/languages/jsx/index.js.map +1 -0
- package/dist/languages/prose/index.d.ts +53 -0
- package/dist/languages/prose/index.d.ts.map +1 -0
- package/dist/languages/prose/index.js +172 -0
- package/dist/languages/prose/index.js.map +1 -0
- package/dist/languages/prose/line-bytes.d.ts +31 -0
- package/dist/languages/prose/line-bytes.d.ts.map +1 -0
- package/dist/languages/prose/line-bytes.js +39 -0
- package/dist/languages/prose/line-bytes.js.map +1 -0
- package/dist/languages/python/create-adapter.d.ts +20 -0
- package/dist/languages/python/create-adapter.d.ts.map +1 -0
- package/dist/languages/python/create-adapter.js +9 -0
- package/dist/languages/python/create-adapter.js.map +1 -0
- package/dist/languages/python/index.d.ts +4 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +6 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/profile.d.ts +36 -0
- package/dist/languages/python/profile.d.ts.map +1 -0
- package/dist/languages/python/profile.js +282 -0
- package/dist/languages/python/profile.js.map +1 -0
- package/dist/languages/python/signature.d.ts +53 -0
- package/dist/languages/python/signature.d.ts.map +1 -0
- package/dist/languages/python/signature.js +188 -0
- package/dist/languages/python/signature.js.map +1 -0
- package/dist/languages/python/table.d.ts +46 -0
- package/dist/languages/python/table.d.ts.map +1 -0
- package/dist/languages/python/table.js +88 -0
- package/dist/languages/python/table.js.map +1 -0
- package/dist/languages/shared/call-detection.d.ts +17 -0
- package/dist/languages/shared/call-detection.d.ts.map +1 -0
- package/dist/languages/shared/call-detection.js +86 -0
- package/dist/languages/shared/call-detection.js.map +1 -0
- package/dist/languages/shared/chunks.d.ts +28 -0
- package/dist/languages/shared/chunks.d.ts.map +1 -0
- package/dist/languages/shared/chunks.js +181 -0
- package/dist/languages/shared/chunks.js.map +1 -0
- package/dist/languages/shared/create-adapter.d.ts +11 -0
- package/dist/languages/shared/create-adapter.d.ts.map +1 -0
- package/dist/languages/shared/create-adapter.js +90 -0
- package/dist/languages/shared/create-adapter.js.map +1 -0
- package/dist/languages/shared/decisions.d.ts +45 -0
- package/dist/languages/shared/decisions.d.ts.map +1 -0
- package/dist/languages/shared/decisions.js +141 -0
- package/dist/languages/shared/decisions.js.map +1 -0
- package/dist/languages/shared/dialect.d.ts +18 -0
- package/dist/languages/shared/dialect.d.ts.map +1 -0
- package/dist/languages/shared/dialect.js +37 -0
- package/dist/languages/shared/dialect.js.map +1 -0
- package/dist/languages/shared/doc-binding.d.ts +26 -0
- package/dist/languages/shared/doc-binding.d.ts.map +1 -0
- package/dist/languages/shared/doc-binding.js +50 -0
- package/dist/languages/shared/doc-binding.js.map +1 -0
- package/dist/languages/shared/engine.d.ts +49 -0
- package/dist/languages/shared/engine.d.ts.map +1 -0
- package/dist/languages/shared/engine.js +317 -0
- package/dist/languages/shared/engine.js.map +1 -0
- package/dist/languages/shared/extract-symbols.d.ts +5 -0
- package/dist/languages/shared/extract-symbols.d.ts.map +1 -0
- package/dist/languages/shared/extract-symbols.js +31 -0
- package/dist/languages/shared/extract-symbols.js.map +1 -0
- package/dist/languages/shared/fingerprint.d.ts +7 -0
- package/dist/languages/shared/fingerprint.d.ts.map +1 -0
- package/dist/languages/shared/fingerprint.js +95 -0
- package/dist/languages/shared/fingerprint.js.map +1 -0
- package/dist/languages/shared/grammar-loader.d.ts +15 -0
- package/dist/languages/shared/grammar-loader.d.ts.map +1 -0
- package/dist/languages/shared/grammar-loader.js +48 -0
- package/dist/languages/shared/grammar-loader.js.map +1 -0
- package/dist/languages/shared/import-detection.d.ts +24 -0
- package/dist/languages/shared/import-detection.d.ts.map +1 -0
- package/dist/languages/shared/import-detection.js +138 -0
- package/dist/languages/shared/import-detection.js.map +1 -0
- package/dist/languages/shared/js-family-profile.d.ts +5 -0
- package/dist/languages/shared/js-family-profile.d.ts.map +1 -0
- package/dist/languages/shared/js-family-profile.js +179 -0
- package/dist/languages/shared/js-family-profile.js.map +1 -0
- package/dist/languages/shared/node-kinds.d.ts +78 -0
- package/dist/languages/shared/node-kinds.d.ts.map +1 -0
- package/dist/languages/shared/node-kinds.js +141 -0
- package/dist/languages/shared/node-kinds.js.map +1 -0
- package/dist/languages/shared/node-utils.d.ts +31 -0
- package/dist/languages/shared/node-utils.d.ts.map +1 -0
- package/dist/languages/shared/node-utils.js +89 -0
- package/dist/languages/shared/node-utils.js.map +1 -0
- package/dist/languages/shared/parse-diagnostics.d.ts +44 -0
- package/dist/languages/shared/parse-diagnostics.d.ts.map +1 -0
- package/dist/languages/shared/parse-diagnostics.js +64 -0
- package/dist/languages/shared/parse-diagnostics.js.map +1 -0
- package/dist/languages/shared/parse-limits.d.ts +24 -0
- package/dist/languages/shared/parse-limits.d.ts.map +1 -0
- package/dist/languages/shared/parse-limits.js +134 -0
- package/dist/languages/shared/parse-limits.js.map +1 -0
- package/dist/languages/shared/profile.d.ts +149 -0
- package/dist/languages/shared/profile.d.ts.map +1 -0
- package/dist/languages/shared/profile.js +9 -0
- package/dist/languages/shared/profile.js.map +1 -0
- package/dist/languages/shared/scope-model.d.ts +32 -0
- package/dist/languages/shared/scope-model.d.ts.map +1 -0
- package/dist/languages/shared/scope-model.js +2 -0
- package/dist/languages/shared/scope-model.js.map +1 -0
- package/dist/languages/shared/scope-naming.d.ts +20 -0
- package/dist/languages/shared/scope-naming.d.ts.map +1 -0
- package/dist/languages/shared/scope-naming.js +118 -0
- package/dist/languages/shared/scope-naming.js.map +1 -0
- package/dist/languages/shared/scope-signature.d.ts +14 -0
- package/dist/languages/shared/scope-signature.d.ts.map +1 -0
- package/dist/languages/shared/scope-signature.js +82 -0
- package/dist/languages/shared/scope-signature.js.map +1 -0
- package/dist/languages/shared/signature.d.ts +55 -0
- package/dist/languages/shared/signature.d.ts.map +1 -0
- package/dist/languages/shared/signature.js +147 -0
- package/dist/languages/shared/signature.js.map +1 -0
- package/dist/languages/shared/syntax.d.ts +115 -0
- package/dist/languages/shared/syntax.d.ts.map +1 -0
- package/dist/languages/shared/syntax.js +2 -0
- package/dist/languages/shared/syntax.js.map +1 -0
- package/dist/languages/shared/table-profile-decisions.d.ts +54 -0
- package/dist/languages/shared/table-profile-decisions.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-decisions.js +245 -0
- package/dist/languages/shared/table-profile-decisions.js.map +1 -0
- package/dist/languages/shared/table-profile-module-facts.d.ts +29 -0
- package/dist/languages/shared/table-profile-module-facts.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-module-facts.js +139 -0
- package/dist/languages/shared/table-profile-module-facts.js.map +1 -0
- package/dist/languages/shared/table-profile-queries.d.ts +27 -0
- package/dist/languages/shared/table-profile-queries.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-queries.js +70 -0
- package/dist/languages/shared/table-profile-queries.js.map +1 -0
- package/dist/languages/shared/table-profile-scopes.d.ts +46 -0
- package/dist/languages/shared/table-profile-scopes.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-scopes.js +180 -0
- package/dist/languages/shared/table-profile-scopes.js.map +1 -0
- package/dist/languages/shared/table-profile.d.ts +302 -0
- package/dist/languages/shared/table-profile.d.ts.map +1 -0
- package/dist/languages/shared/table-profile.js +125 -0
- package/dist/languages/shared/table-profile.js.map +1 -0
- package/dist/languages/shared/tree-sitter-types.d.ts +44 -0
- package/dist/languages/shared/tree-sitter-types.d.ts.map +1 -0
- package/dist/languages/shared/tree-sitter-types.js +2 -0
- package/dist/languages/shared/tree-sitter-types.js.map +1 -0
- package/dist/languages/structured-text/index.d.ts +48 -0
- package/dist/languages/structured-text/index.d.ts.map +1 -0
- package/dist/languages/structured-text/index.js +120 -0
- package/dist/languages/structured-text/index.js.map +1 -0
- package/dist/languages/tsx/index.d.ts +4 -0
- package/dist/languages/tsx/index.d.ts.map +1 -0
- package/dist/languages/tsx/index.js +7 -0
- package/dist/languages/tsx/index.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +4 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/vue/index.d.ts +21 -0
- package/dist/languages/vue/index.d.ts.map +1 -0
- package/dist/languages/vue/index.js +234 -0
- package/dist/languages/vue/index.js.map +1 -0
- package/dist/languages/vue/mapping.d.ts +11 -0
- package/dist/languages/vue/mapping.d.ts.map +1 -0
- package/dist/languages/vue/mapping.js +77 -0
- package/dist/languages/vue/mapping.js.map +1 -0
- package/dist/registry.d.ts +24 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +42 -0
- package/dist/registry.js.map +1 -0
- package/dist/text/byte-offset-table.d.ts +27 -0
- package/dist/text/byte-offset-table.d.ts.map +1 -0
- package/dist/text/byte-offset-table.js +39 -0
- package/dist/text/byte-offset-table.js.map +1 -0
- package/package.json +125 -3
- package/src/boundaries/expression.ts +95 -0
- package/src/boundaries/extract.ts +307 -0
- package/src/boundaries/python.ts +181 -0
- package/src/index.ts +51 -0
- package/src/languages/__golden__/javascript-basic.json +32 -0
- package/src/languages/__golden__/tsx-basic.json +19 -0
- package/src/languages/__golden__/typescript-basic.json +37 -0
- package/src/languages/astgrep-backend/GRAMMARS.md +86 -0
- package/src/languages/astgrep-backend/README.md +112 -0
- package/src/languages/astgrep-backend/__golden__/bash-basic.sh +53 -0
- package/src/languages/astgrep-backend/__golden__/c-basic.c +64 -0
- package/src/languages/astgrep-backend/__golden__/cpp-basic.cpp +65 -0
- package/src/languages/astgrep-backend/__golden__/csharp-basic.cs +73 -0
- package/src/languages/astgrep-backend/__golden__/go-basic.go +93 -0
- package/src/languages/astgrep-backend/__golden__/java-basic.java +62 -0
- package/src/languages/astgrep-backend/__golden__/kotlin-basic.kt +58 -0
- package/src/languages/astgrep-backend/__golden__/php-basic.php +72 -0
- package/src/languages/astgrep-backend/__golden__/ruby-basic.rb +62 -0
- package/src/languages/astgrep-backend/__golden__/rust-basic.rs +82 -0
- package/src/languages/astgrep-backend/__golden__/swift-basic.swift +73 -0
- package/src/languages/astgrep-backend/adapter.ts +240 -0
- package/src/languages/astgrep-backend/index.ts +44 -0
- package/src/languages/astgrep-backend/lang/README.md +115 -0
- package/src/languages/astgrep-backend/lang/bash.ts +78 -0
- package/src/languages/astgrep-backend/lang/c.ts +119 -0
- package/src/languages/astgrep-backend/lang/cpp.ts +65 -0
- package/src/languages/astgrep-backend/lang/csharp.ts +125 -0
- package/src/languages/astgrep-backend/lang/index.ts +61 -0
- package/src/languages/astgrep-backend/lang/java.ts +115 -0
- package/src/languages/astgrep-backend/lang/kotlin.ts +136 -0
- package/src/languages/astgrep-backend/lang/php.ts +105 -0
- package/src/languages/astgrep-backend/lang/ruby.ts +105 -0
- package/src/languages/astgrep-backend/lang/swift.ts +118 -0
- package/src/languages/astgrep-backend/languages.ts +238 -0
- package/src/languages/astgrep-backend/napi.ts +261 -0
- package/src/languages/astgrep-backend/syntax.ts +242 -0
- package/src/languages/index.ts +53 -0
- package/src/languages/javascript/index.ts +9 -0
- package/src/languages/jsx/index.ts +9 -0
- package/src/languages/prose/index.ts +270 -0
- package/src/languages/prose/line-bytes.ts +52 -0
- package/src/languages/python/README.md +246 -0
- package/src/languages/python/__golden__/python-basic.json +44 -0
- package/src/languages/python/create-adapter.ts +29 -0
- package/src/languages/python/index.ts +8 -0
- package/src/languages/python/profile.ts +341 -0
- package/src/languages/python/signature.ts +183 -0
- package/src/languages/python/table.ts +135 -0
- package/src/languages/shared/__fixtures__/large-over-32kib.ts.txt +1207 -0
- package/src/languages/shared/call-detection.ts +112 -0
- package/src/languages/shared/chunks.ts +255 -0
- package/src/languages/shared/create-adapter.ts +136 -0
- package/src/languages/shared/decisions.ts +204 -0
- package/src/languages/shared/dialect.ts +55 -0
- package/src/languages/shared/doc-binding.ts +78 -0
- package/src/languages/shared/engine.ts +461 -0
- package/src/languages/shared/extract-symbols.ts +35 -0
- package/src/languages/shared/fingerprint.ts +99 -0
- package/src/languages/shared/grammar-loader.ts +67 -0
- package/src/languages/shared/import-detection.ts +154 -0
- package/src/languages/shared/js-family-profile.ts +246 -0
- package/src/languages/shared/node-kinds.ts +153 -0
- package/src/languages/shared/node-utils.ts +120 -0
- package/src/languages/shared/parse-diagnostics.ts +125 -0
- package/src/languages/shared/parse-limits.ts +147 -0
- package/src/languages/shared/profile.ts +184 -0
- package/src/languages/shared/scope-model.ts +43 -0
- package/src/languages/shared/scope-naming.ts +124 -0
- package/src/languages/shared/scope-signature.ts +108 -0
- package/src/languages/shared/signature.ts +149 -0
- package/src/languages/shared/syntax.ts +116 -0
- package/src/languages/shared/table-profile-decisions.ts +251 -0
- package/src/languages/shared/table-profile-module-facts.ts +177 -0
- package/src/languages/shared/table-profile-queries.ts +85 -0
- package/src/languages/shared/table-profile-scopes.ts +198 -0
- package/src/languages/shared/table-profile.ts +427 -0
- package/src/languages/shared/tree-sitter-types.ts +46 -0
- package/src/languages/structured-text/index.ts +192 -0
- package/src/languages/tsx/index.ts +9 -0
- package/src/languages/typescript/index.ts +9 -0
- package/src/languages/vue/index.ts +312 -0
- package/src/languages/vue/mapping.ts +93 -0
- package/src/registry.ts +61 -0
- package/src/text/byte-offset-table.ts +63 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { textFormatExtensions, textFormatExtensionOf } from "@untangle-code/domain";
|
|
2
|
+
import { buildLineByteIndex, rangeForLines } from "../prose/line-bytes.js";
|
|
3
|
+
/** Sprachkennung dieses Adapters. Bewusst formatuebergreifend: die Behandlung ist dieselbe. */
|
|
4
|
+
export const STRUCTURED_TEXT_LANGUAGE_ID = "structured-text";
|
|
5
|
+
const TOML_TABLE = /^\s*\[/;
|
|
6
|
+
const YAML_DOCUMENT_SEPARATOR = /^---\s*$/;
|
|
7
|
+
/** Zeilen, an denen ein neuer Block beginnt (1-basiert), aufsteigend, ohne Zeile 1. */
|
|
8
|
+
function blockStartLines(path, lines) {
|
|
9
|
+
const extension = textFormatExtensionOf(path);
|
|
10
|
+
const isToml = extension === ".toml";
|
|
11
|
+
const isYaml = extension === ".yaml" || extension === ".yml";
|
|
12
|
+
if (!isToml && !isYaml)
|
|
13
|
+
return [];
|
|
14
|
+
const starts = [];
|
|
15
|
+
for (const [index, rawLine] of lines.entries()) {
|
|
16
|
+
if (index === 0)
|
|
17
|
+
continue;
|
|
18
|
+
if (isToml && TOML_TABLE.test(rawLine))
|
|
19
|
+
starts.push(index + 1);
|
|
20
|
+
if (isYaml && YAML_DOCUMENT_SEPARATOR.test(rawLine))
|
|
21
|
+
starts.push(index + 1);
|
|
22
|
+
}
|
|
23
|
+
return starts;
|
|
24
|
+
}
|
|
25
|
+
function buildBlocks(path, content, index) {
|
|
26
|
+
const lines = content.split("\n").map((line) => (line.endsWith("\r") ? line.slice(0, -1) : line));
|
|
27
|
+
const totalLines = Math.max(index.lineCount, 1);
|
|
28
|
+
const starts = [1, ...blockStartLines(path, lines)];
|
|
29
|
+
return starts.map((startLine, position) => {
|
|
30
|
+
const next = starts[position + 1];
|
|
31
|
+
return rangeForLines(index, startLine, next !== undefined ? next - 1 : totalLines);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function rootOf(ast) {
|
|
35
|
+
return ast.root;
|
|
36
|
+
}
|
|
37
|
+
export function createStructuredTextAdapter() {
|
|
38
|
+
return {
|
|
39
|
+
languageId: STRUCTURED_TEXT_LANGUAGE_ID,
|
|
40
|
+
extensions: textFormatExtensions("structured_data"),
|
|
41
|
+
supportLevel: "text",
|
|
42
|
+
parse(source) {
|
|
43
|
+
const index = buildLineByteIndex(source.content);
|
|
44
|
+
const root = {
|
|
45
|
+
fileId: source.fileId,
|
|
46
|
+
index,
|
|
47
|
+
blocks: buildBlocks(source.path, source.content, index),
|
|
48
|
+
};
|
|
49
|
+
// Es wird nichts geparst, also kann nichts scheitern. `"complete"` ist
|
|
50
|
+
// hier eine Aussage ueber die Textzerlegung, nicht ueber eine
|
|
51
|
+
// Grammatik: eine ungueltige JSON-Datei wird trotzdem vollstaendig
|
|
52
|
+
// erfasst und durchsuchbar — sie bekommt nur keine Struktur.
|
|
53
|
+
return {
|
|
54
|
+
parseQuality: "complete",
|
|
55
|
+
ast: {
|
|
56
|
+
languageId: STRUCTURED_TEXT_LANGUAGE_ID,
|
|
57
|
+
parseQuality: "complete",
|
|
58
|
+
root,
|
|
59
|
+
diagnostics: [],
|
|
60
|
+
},
|
|
61
|
+
diagnostics: [],
|
|
62
|
+
errorNodeCount: 0,
|
|
63
|
+
missingNodeCount: 0,
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
extractChunks(ast) {
|
|
67
|
+
const root = rootOf(ast);
|
|
68
|
+
const children = root.blocks.map((range, ordinal) => ({
|
|
69
|
+
chunkKind: "configuration",
|
|
70
|
+
range,
|
|
71
|
+
scopeId: `${root.fileId}#block#${String(ordinal)}`,
|
|
72
|
+
splittable: false,
|
|
73
|
+
}));
|
|
74
|
+
return [
|
|
75
|
+
{
|
|
76
|
+
chunkKind: "module",
|
|
77
|
+
range: {
|
|
78
|
+
startLine: 1,
|
|
79
|
+
endLine: root.index.lineCount,
|
|
80
|
+
startByte: 0,
|
|
81
|
+
endByte: root.index.totalBytes,
|
|
82
|
+
},
|
|
83
|
+
scopeId: root.fileId,
|
|
84
|
+
// Ein einziger Block ueber die ganze Datei traegt keine
|
|
85
|
+
// Information; dann bleibt der Wurzelbereich kinderlos und der
|
|
86
|
+
// Chunker schneidet selbst am Tokenbudget.
|
|
87
|
+
splittable: children.length > 1,
|
|
88
|
+
...(children.length > 1 ? { children } : {}),
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
},
|
|
92
|
+
extractSymbols(_ast) {
|
|
93
|
+
return [];
|
|
94
|
+
},
|
|
95
|
+
extractImports(_ast) {
|
|
96
|
+
return [];
|
|
97
|
+
},
|
|
98
|
+
extractCalls(_ast) {
|
|
99
|
+
return [];
|
|
100
|
+
},
|
|
101
|
+
computeComplexity(ast) {
|
|
102
|
+
return {
|
|
103
|
+
symbolScopes: [],
|
|
104
|
+
decisions: [],
|
|
105
|
+
nestingEvents: [],
|
|
106
|
+
operators: [],
|
|
107
|
+
operands: [],
|
|
108
|
+
nodeKinds: [],
|
|
109
|
+
comments: [],
|
|
110
|
+
identifiers: [],
|
|
111
|
+
literals: [],
|
|
112
|
+
parseDiagnostics: ast.diagnostics,
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
tokenizeForHalstead(_ast) {
|
|
116
|
+
return { operators: [], operands: [] };
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/structured-text/index.ts"],"names":[],"mappings":"AAwDA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAsB,MAAM,wBAAwB,CAAC;AAE/F,+FAA+F;AAC/F,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAQ7D,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAE3C,uFAAuF;AACvF,SAAS,eAAe,CAAC,IAAY,EAAE,KAAwB;IAC7D,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC;IAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAC1B,IAAI,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe,EAAE,KAAoB;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,GAAc;IAC5B,OAAO,GAAG,CAAC,IAAyB,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,UAAU,EAAE,2BAA2B;QACvC,UAAU,EAAE,oBAAoB,CAAC,iBAAiB,CAAC;QACnD,YAAY,EAAE,MAAM;QAEpB,KAAK,CAAC,MAAkB;YACtB,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,GAAsB;gBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK;gBACL,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;aACxD,CAAC;YACF,uEAAuE;YACvE,8DAA8D;YAC9D,mEAAmE;YACnE,6DAA6D;YAC7D,OAAO;gBACL,YAAY,EAAE,UAAU;gBACxB,GAAG,EAAE;oBACH,UAAU,EAAE,2BAA2B;oBACvC,YAAY,EAAE,UAAU;oBACxB,IAAI;oBACJ,WAAW,EAAE,EAAE;iBAChB;gBACD,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,CAAC;gBACjB,gBAAgB,EAAE,CAAC;aACpB,CAAC;QACJ,CAAC;QAED,aAAa,CAAC,GAAc;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAgB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjE,SAAS,EAAE,eAAe;gBAC1B,KAAK;gBACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,UAAU,MAAM,CAAC,OAAO,CAAC,EAAE;gBAClD,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC,CAAC;YACJ,OAAO;gBACL;oBACE,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE;wBACL,SAAS,EAAE,CAAC;wBACZ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;wBAC7B,SAAS,EAAE,CAAC;wBACZ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;qBAC/B;oBACD,OAAO,EAAE,IAAI,CAAC,MAAM;oBACpB,wDAAwD;oBACxD,+DAA+D;oBAC/D,2CAA2C;oBAC3C,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAC/B,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C;aACF,CAAC;QACJ,CAAC;QAED,cAAc,CAAC,IAAe;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,cAAc,CAAC,IAAe;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,YAAY,CAAC,IAAe;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,iBAAiB,CAAC,GAAc;YAC9B,OAAO;gBACL,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,EAAE;gBACjB,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,EAAE;gBACZ,gBAAgB,EAAE,GAAG,CAAC,WAAW;aAClC,CAAC;QACJ,CAAC;QAED,mBAAmB,CAAC,IAAe;YACjC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/tsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,2EAA2E;AAC3E,wBAAgB,gBAAgB,IAAI,eAAe,CAElD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTreeSitterAdapter } from "../shared/create-adapter.js";
|
|
2
|
+
import { TSX_DIALECT } from "../shared/dialect.js";
|
|
3
|
+
/** TSX `LanguageAdapter` (`.tsx`), support level "deep" (spec.md §7.2). */
|
|
4
|
+
export function createTsxAdapter() {
|
|
5
|
+
return createTreeSitterAdapter(TSX_DIALECT);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/tsx/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB;IAC9B,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/typescript/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,iGAAiG;AACjG,wBAAgB,uBAAuB,IAAI,eAAe,CAEzD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTreeSitterAdapter } from "../shared/create-adapter.js";
|
|
2
|
+
import { TYPESCRIPT_DIALECT } from "../shared/dialect.js";
|
|
3
|
+
/** TypeScript `LanguageAdapter` (`.ts`, `.mts`, `.cts`), support level "deep" (spec.md §7.2). */
|
|
4
|
+
export function createTypeScriptAdapter() {
|
|
5
|
+
return createTreeSitterAdapter(TYPESCRIPT_DIALECT);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/typescript/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,iGAAiG;AACjG,MAAM,UAAU,uBAAuB;IACrC,OAAO,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LanguageAdapter, ParsedAst, SourceFile, SourceRange } from "@untangle-code/domain";
|
|
2
|
+
export { shiftVueRange, vueQualifiedName, vueScopeId } from "./mapping.js";
|
|
3
|
+
export interface VueScriptAst {
|
|
4
|
+
context: "script" | "setup";
|
|
5
|
+
/** Only dual-script SFCs need explicit context names to keep equal bindings distinct. */
|
|
6
|
+
qualifier: string;
|
|
7
|
+
adapter: LanguageAdapter;
|
|
8
|
+
ast: ParsedAst;
|
|
9
|
+
source: SourceFile;
|
|
10
|
+
/** Content range in the original SFC, not the surrounding script tags. */
|
|
11
|
+
range: SourceRange;
|
|
12
|
+
}
|
|
13
|
+
export interface VueAstRoot {
|
|
14
|
+
kind: "vue-sfc";
|
|
15
|
+
fileId: string;
|
|
16
|
+
range: SourceRange;
|
|
17
|
+
scripts: VueScriptAst[];
|
|
18
|
+
}
|
|
19
|
+
/** Vue SFC adapter: source-level inline scripts, never generated render/setup code. */
|
|
20
|
+
export declare function createVueAdapter(): LanguageAdapter;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/vue/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAEf,SAAS,EAET,UAAU,EACV,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,0EAA0E;IAC1E,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAuMD,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,eAAe,CAoElD"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { AdapterParseError, sha256Hex } from "@untangle-code/domain";
|
|
3
|
+
import { buildByteOffsetTable } from "../../text/byte-offset-table.js";
|
|
4
|
+
import { createJavaScriptAdapter } from "../javascript/index.js";
|
|
5
|
+
import { createJsxAdapter } from "../jsx/index.js";
|
|
6
|
+
import { MAX_PARSE_SOURCE_BYTES } from "../shared/parse-limits.js";
|
|
7
|
+
import { createTsxAdapter } from "../tsx/index.js";
|
|
8
|
+
import { createTypeScriptAdapter } from "../typescript/index.js";
|
|
9
|
+
import { shiftVueRange, vueFacts, vueRegion, vueScopeId, vueSymbol } from "./mapping.js";
|
|
10
|
+
export { shiftVueRange, vueQualifiedName, vueScopeId } from "./mapping.js";
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
let parseSfc;
|
|
13
|
+
function parseDescriptor(source) {
|
|
14
|
+
// Loading the registry must not load Vue's compiler or any native grammar.
|
|
15
|
+
parseSfc ??= require("@vue/compiler-sfc").parse;
|
|
16
|
+
return parseSfc(source.content, { filename: source.path, sourceMap: false, ignoreEmpty: false });
|
|
17
|
+
}
|
|
18
|
+
function rootOf(ast) {
|
|
19
|
+
return ast.root;
|
|
20
|
+
}
|
|
21
|
+
function emptyFacts(diagnostics) {
|
|
22
|
+
return {
|
|
23
|
+
symbolScopes: [],
|
|
24
|
+
decisions: [],
|
|
25
|
+
nestingEvents: [],
|
|
26
|
+
operators: [],
|
|
27
|
+
operands: [],
|
|
28
|
+
nodeKinds: [],
|
|
29
|
+
comments: [],
|
|
30
|
+
identifiers: [],
|
|
31
|
+
literals: [],
|
|
32
|
+
parseDiagnostics: diagnostics,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function combinedFacts(ast) {
|
|
36
|
+
const root = rootOf(ast);
|
|
37
|
+
const facts = emptyFacts(ast.diagnostics);
|
|
38
|
+
// A template-only component has no executable-code scope and no invented base complexity.
|
|
39
|
+
if (root.scripts.length === 0)
|
|
40
|
+
return facts;
|
|
41
|
+
facts.symbolScopes.push({
|
|
42
|
+
symbolScopeId: root.fileId,
|
|
43
|
+
name: "",
|
|
44
|
+
qualifiedName: "",
|
|
45
|
+
kind: "file",
|
|
46
|
+
range: root.range,
|
|
47
|
+
executable: true,
|
|
48
|
+
});
|
|
49
|
+
for (const script of root.scripts) {
|
|
50
|
+
const part = vueFacts(script, root.fileId);
|
|
51
|
+
facts.symbolScopes.push(...part.symbolScopes);
|
|
52
|
+
facts.decisions.push(...part.decisions);
|
|
53
|
+
facts.nestingEvents.push(...part.nestingEvents);
|
|
54
|
+
facts.operators.push(...part.operators);
|
|
55
|
+
facts.operands.push(...part.operands);
|
|
56
|
+
facts.nodeKinds.push(...part.nodeKinds);
|
|
57
|
+
facts.comments.push(...part.comments);
|
|
58
|
+
facts.identifiers.push(...part.identifiers);
|
|
59
|
+
facts.literals.push(...part.literals);
|
|
60
|
+
}
|
|
61
|
+
return facts;
|
|
62
|
+
}
|
|
63
|
+
function blockRange(source, block) {
|
|
64
|
+
const offsets = buildByteOffsetTable(source.content);
|
|
65
|
+
return {
|
|
66
|
+
startLine: block.loc.start.line,
|
|
67
|
+
endLine: block.loc.end.line,
|
|
68
|
+
startByte: offsets.toByteOffset(block.loc.start.offset),
|
|
69
|
+
endByte: offsets.toByteOffset(block.loc.end.offset),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function diagnostic(message, range, kind = "fallback") {
|
|
73
|
+
return { severity: "warning", kind, message, range };
|
|
74
|
+
}
|
|
75
|
+
function parseVue(source, adapters) {
|
|
76
|
+
const bytes = Buffer.byteLength(source.content, "utf8");
|
|
77
|
+
if (bytes > MAX_PARSE_SOURCE_BYTES) {
|
|
78
|
+
throw new AdapterParseError("file_too_large", "Vue SFC exceeds the parser source-byte limit.", {
|
|
79
|
+
measurements: { sizeBytes: bytes, limitBytes: MAX_PARSE_SOURCE_BYTES },
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const parsed = parseDescriptor(source);
|
|
83
|
+
const range = {
|
|
84
|
+
startByte: 0,
|
|
85
|
+
endByte: bytes,
|
|
86
|
+
startLine: 1,
|
|
87
|
+
endLine: source.content.split("\n").length,
|
|
88
|
+
};
|
|
89
|
+
const diagnostics = parsed.errors.map((error) => ({
|
|
90
|
+
severity: "error",
|
|
91
|
+
kind: "error_node",
|
|
92
|
+
message: `Vue SFC: ${error.message}`,
|
|
93
|
+
range: "loc" in error && error.loc !== undefined ? blockRange(source, { loc: error.loc }) : range,
|
|
94
|
+
}));
|
|
95
|
+
let errorNodeCount = parsed.errors.length;
|
|
96
|
+
let missingNodeCount = 0;
|
|
97
|
+
let incomplete = parsed.errors.length > 0;
|
|
98
|
+
const scripts = [];
|
|
99
|
+
const descriptor = parsed.descriptor;
|
|
100
|
+
const blocks = [
|
|
101
|
+
["script", descriptor.script],
|
|
102
|
+
["setup", descriptor.scriptSetup],
|
|
103
|
+
];
|
|
104
|
+
blocks.sort((left, right) => (left[1]?.loc.start.offset ?? Number.POSITIVE_INFINITY) -
|
|
105
|
+
(right[1]?.loc.start.offset ?? Number.POSITIVE_INFINITY));
|
|
106
|
+
const dual = descriptor.script !== null && descriptor.scriptSetup !== null;
|
|
107
|
+
if (dual && (descriptor.script?.lang ?? "js") !== (descriptor.scriptSetup?.lang ?? "js")) {
|
|
108
|
+
incomplete = true;
|
|
109
|
+
diagnostics.push(diagnostic("Vue script and script setup must use the same language; cross-block compilation is not validated.", range));
|
|
110
|
+
}
|
|
111
|
+
for (const [context, block] of blocks) {
|
|
112
|
+
if (block === null)
|
|
113
|
+
continue;
|
|
114
|
+
const partRange = blockRange(source, block);
|
|
115
|
+
const lang = block.lang ?? "js";
|
|
116
|
+
const adapter = adapters.get(lang);
|
|
117
|
+
if (block.src !== undefined || adapter === undefined) {
|
|
118
|
+
incomplete = true;
|
|
119
|
+
diagnostics.push(diagnostic(block.src !== undefined
|
|
120
|
+
? `Vue ${context}: external script src is not analyzed; analyze its source file separately.`
|
|
121
|
+
: `Vue ${context}: unsupported script language "${lang}".`, partRange));
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const scriptSource = {
|
|
125
|
+
...source,
|
|
126
|
+
fileId: `${source.fileId}\u001fvue-${context}`,
|
|
127
|
+
languageId: adapter.languageId,
|
|
128
|
+
content: block.content,
|
|
129
|
+
contentHash: sha256Hex(block.content),
|
|
130
|
+
sizeBytes: Buffer.byteLength(block.content, "utf8"),
|
|
131
|
+
};
|
|
132
|
+
const part = adapter.parse(scriptSource);
|
|
133
|
+
const script = {
|
|
134
|
+
context,
|
|
135
|
+
qualifier: dual ? context : "",
|
|
136
|
+
adapter,
|
|
137
|
+
source: scriptSource,
|
|
138
|
+
range: partRange,
|
|
139
|
+
};
|
|
140
|
+
diagnostics.push(...part.diagnostics.map((item) => ({
|
|
141
|
+
...item,
|
|
142
|
+
range: shiftVueRange(script, item.range),
|
|
143
|
+
})));
|
|
144
|
+
errorNodeCount += part.errorNodeCount;
|
|
145
|
+
missingNodeCount += part.missingNodeCount;
|
|
146
|
+
incomplete ||= part.parseQuality !== "complete";
|
|
147
|
+
if (part.ast !== null)
|
|
148
|
+
scripts.push({ ...script, ast: part.ast });
|
|
149
|
+
}
|
|
150
|
+
if (blocks.every(([, block]) => block === null)) {
|
|
151
|
+
incomplete = true;
|
|
152
|
+
diagnostics.push(diagnostic("Vue SFC contains no inline script; template logic is not analyzed.", range));
|
|
153
|
+
}
|
|
154
|
+
// Valid syntax is distinct from analysis scope: these warnings do not invent syntax errors.
|
|
155
|
+
const unmeasuredBlocks = [descriptor.template, ...descriptor.styles, ...descriptor.customBlocks];
|
|
156
|
+
for (const block of unmeasuredBlocks) {
|
|
157
|
+
if (block === null)
|
|
158
|
+
continue;
|
|
159
|
+
diagnostics.push({
|
|
160
|
+
...diagnostic(`Vue analysis scope: inline script code only; ${block.type} block complexity and runtime bindings are not measured. The original block remains text-searchable.`, blockRange(source, block), "other"),
|
|
161
|
+
code: "analysis_scope_limited",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
const parseQuality = incomplete ? "partial" : "complete";
|
|
165
|
+
const ast = {
|
|
166
|
+
languageId: "vue",
|
|
167
|
+
parseQuality,
|
|
168
|
+
diagnostics,
|
|
169
|
+
root: { kind: "vue-sfc", fileId: source.fileId, range, scripts },
|
|
170
|
+
};
|
|
171
|
+
return { parseQuality, ast, diagnostics, errorNodeCount, missingNodeCount };
|
|
172
|
+
}
|
|
173
|
+
/** Vue SFC adapter: source-level inline scripts, never generated render/setup code. */
|
|
174
|
+
export function createVueAdapter() {
|
|
175
|
+
const adapters = new Map([
|
|
176
|
+
["js", createJavaScriptAdapter()],
|
|
177
|
+
["javascript", createJavaScriptAdapter()],
|
|
178
|
+
["ts", createTypeScriptAdapter()],
|
|
179
|
+
["typescript", createTypeScriptAdapter()],
|
|
180
|
+
["tsx", createTsxAdapter()],
|
|
181
|
+
["jsx", createJsxAdapter()],
|
|
182
|
+
]);
|
|
183
|
+
const cache = new WeakMap();
|
|
184
|
+
const facts = (ast) => {
|
|
185
|
+
const previous = cache.get(ast);
|
|
186
|
+
if (previous !== undefined)
|
|
187
|
+
return previous;
|
|
188
|
+
const computed = combinedFacts(ast);
|
|
189
|
+
cache.set(ast, computed);
|
|
190
|
+
return computed;
|
|
191
|
+
};
|
|
192
|
+
return {
|
|
193
|
+
languageId: "vue",
|
|
194
|
+
extensions: [".vue"],
|
|
195
|
+
supportLevel: "structural",
|
|
196
|
+
parse: (source) => parseVue(source, adapters),
|
|
197
|
+
extractChunks(ast) {
|
|
198
|
+
const root = rootOf(ast);
|
|
199
|
+
const children = root.scripts
|
|
200
|
+
.flatMap((script) => script.adapter
|
|
201
|
+
.extractChunks(script.ast)
|
|
202
|
+
.flatMap((region) => region.children ?? [])
|
|
203
|
+
.map((region) => vueRegion(script, region, root.fileId)))
|
|
204
|
+
.sort((left, right) => left.range.startByte - right.range.startByte);
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
207
|
+
chunkKind: "module",
|
|
208
|
+
range: root.range,
|
|
209
|
+
scopeId: root.fileId,
|
|
210
|
+
splittable: children.length > 0,
|
|
211
|
+
children,
|
|
212
|
+
},
|
|
213
|
+
];
|
|
214
|
+
},
|
|
215
|
+
extractSymbols: (ast) => rootOf(ast).scripts.flatMap((script) => script.adapter.extractSymbols(script.ast).map((symbol) => vueSymbol(script, symbol))),
|
|
216
|
+
extractImports: (ast) => rootOf(ast).scripts.flatMap((script) => script.adapter
|
|
217
|
+
.extractImports(script.ast)
|
|
218
|
+
.map((item) => ({ ...item, range: shiftVueRange(script, item.range) }))),
|
|
219
|
+
extractCalls: (ast) => {
|
|
220
|
+
const root = rootOf(ast);
|
|
221
|
+
return root.scripts.flatMap((script) => script.adapter.extractCalls(script.ast).map((call) => ({
|
|
222
|
+
...call,
|
|
223
|
+
callerScopeId: vueScopeId(script, call.callerScopeId, root.fileId),
|
|
224
|
+
range: shiftVueRange(script, call.range),
|
|
225
|
+
})));
|
|
226
|
+
},
|
|
227
|
+
computeComplexity: facts,
|
|
228
|
+
tokenizeForHalstead(ast) {
|
|
229
|
+
const { operators, operands } = facts(ast);
|
|
230
|
+
return { operators, operands };
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/vue/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AstRegion, ComplexityFacts, ExtractedSymbol, SourceRange } from "@untangle-code/domain";
|
|
2
|
+
import type { VueScriptAst } from "./index.js";
|
|
3
|
+
/** Vue compiler locations use UTF-16; the block range is already converted to UTF-8. */
|
|
4
|
+
export declare function shiftVueRange(script: Pick<VueScriptAst, "range">, range: SourceRange): SourceRange;
|
|
5
|
+
export declare function vueQualifiedName(script: VueScriptAst, name: string): string;
|
|
6
|
+
/** Both inline blocks share the enclosing file scope, but their child identities stay distinct. */
|
|
7
|
+
export declare function vueScopeId(script: VueScriptAst, scopeId: string, fileId: string): string;
|
|
8
|
+
export declare function vueSymbol(script: VueScriptAst, symbol: ExtractedSymbol): ExtractedSymbol;
|
|
9
|
+
export declare function vueRegion(script: VueScriptAst, region: AstRegion, fileId: string): AstRegion;
|
|
10
|
+
export declare function vueFacts(script: VueScriptAst, fileId: string): ComplexityFacts;
|
|
11
|
+
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../../src/languages/vue/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wFAAwF;AACxF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,WAAW,GACjB,WAAW,CAOb;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAUxF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAY5F;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAmC9E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Vue compiler locations use UTF-16; the block range is already converted to UTF-8. */
|
|
2
|
+
export function shiftVueRange(script, range) {
|
|
3
|
+
return {
|
|
4
|
+
startByte: script.range.startByte + range.startByte,
|
|
5
|
+
endByte: script.range.startByte + range.endByte,
|
|
6
|
+
startLine: script.range.startLine + range.startLine - 1,
|
|
7
|
+
endLine: script.range.startLine + range.endLine - 1,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function vueQualifiedName(script, name) {
|
|
11
|
+
return script.qualifier.length === 0 ? name : `${script.qualifier}.${name}`;
|
|
12
|
+
}
|
|
13
|
+
/** Both inline blocks share the enclosing file scope, but their child identities stay distinct. */
|
|
14
|
+
export function vueScopeId(script, scopeId, fileId) {
|
|
15
|
+
return scopeId === script.source.fileId ? fileId : scopeId;
|
|
16
|
+
}
|
|
17
|
+
export function vueSymbol(script, symbol) {
|
|
18
|
+
return {
|
|
19
|
+
...symbol,
|
|
20
|
+
qualifiedName: vueQualifiedName(script, symbol.qualifiedName),
|
|
21
|
+
range: shiftVueRange(script, symbol.range),
|
|
22
|
+
...(symbol.docRange !== undefined ? { docRange: shiftVueRange(script, symbol.docRange) } : {}),
|
|
23
|
+
...(symbol.parentQualifiedName !== undefined
|
|
24
|
+
? { parentQualifiedName: vueQualifiedName(script, symbol.parentQualifiedName) }
|
|
25
|
+
: {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function vueRegion(script, region, fileId) {
|
|
29
|
+
return {
|
|
30
|
+
...region,
|
|
31
|
+
range: shiftVueRange(script, region.range),
|
|
32
|
+
scopeId: vueScopeId(script, region.scopeId, fileId),
|
|
33
|
+
...(region.symbolFqn !== undefined
|
|
34
|
+
? { symbolFqn: vueQualifiedName(script, region.symbolFqn) }
|
|
35
|
+
: {}),
|
|
36
|
+
...(region.children !== undefined
|
|
37
|
+
? { children: region.children.map((child) => vueRegion(script, child, fileId)) }
|
|
38
|
+
: {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function vueFacts(script, fileId) {
|
|
42
|
+
const facts = script.adapter.computeComplexity(script.ast);
|
|
43
|
+
const scoped = (fact) => ({
|
|
44
|
+
...fact,
|
|
45
|
+
symbolScopeId: vueScopeId(script, fact.symbolScopeId, fileId),
|
|
46
|
+
});
|
|
47
|
+
const ranged = (fact) => ({
|
|
48
|
+
...fact,
|
|
49
|
+
range: shiftVueRange(script, fact.range),
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
symbolScopes: facts.symbolScopes
|
|
53
|
+
.filter((scope) => scope.symbolScopeId !== script.source.fileId)
|
|
54
|
+
.map((scope) => ({
|
|
55
|
+
...ranged(scoped(scope)),
|
|
56
|
+
qualifiedName: vueQualifiedName(script, scope.qualifiedName),
|
|
57
|
+
...(scope.parentScopeId !== undefined
|
|
58
|
+
? { parentScopeId: vueScopeId(script, scope.parentScopeId, fileId) }
|
|
59
|
+
: {}),
|
|
60
|
+
})),
|
|
61
|
+
decisions: facts.decisions.map((fact) => ({
|
|
62
|
+
...ranged(scoped(fact)),
|
|
63
|
+
...(fact.logicalGroupId !== undefined
|
|
64
|
+
? { logicalGroupId: `${script.context}:${fact.logicalGroupId}` }
|
|
65
|
+
: {}),
|
|
66
|
+
})),
|
|
67
|
+
nestingEvents: facts.nestingEvents.map((fact) => ranged(scoped(fact))),
|
|
68
|
+
operators: facts.operators.map((fact) => ranged(scoped(fact))),
|
|
69
|
+
operands: facts.operands.map((fact) => ranged(scoped(fact))),
|
|
70
|
+
nodeKinds: facts.nodeKinds.map(scoped),
|
|
71
|
+
comments: facts.comments.map((range) => shiftVueRange(script, range)),
|
|
72
|
+
identifiers: facts.identifiers.map((fact) => ranged(scoped(fact))),
|
|
73
|
+
literals: facts.literals.map((fact) => ranged(scoped(fact))),
|
|
74
|
+
parseDiagnostics: facts.parseDiagnostics.map(ranged),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../../src/languages/vue/mapping.ts"],"names":[],"mappings":"AASA,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAC3B,MAAmC,EACnC,KAAkB;IAElB,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;QACnD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;QAC/C,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;QACvD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB,EAAE,IAAY;IACjE,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,OAAe,EAAE,MAAc;IAC9E,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAuB;IACrE,OAAO;QACL,GAAG,MAAM;QACT,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;QAC7D,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,EAAE;YAC/E,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAiB,EAAE,MAAc;IAC/E,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QAC1C,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;YAChF,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB,EAAE,MAAc;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,CAAsC,IAAO,EAAK,EAAE,CAAC,CAAC;QACnE,GAAG,IAAI;QACP,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;KAC9D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAmC,IAAO,EAAK,EAAE,CAAC,CAAC;QAChE,GAAG,IAAI;QACP,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC;IACH,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;aAC7B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC/D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE;gBACpE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACL,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;gBAChE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ParserRegistry` (domain `ports.ts`) implementation: registration plus
|
|
3
|
+
* resolution by extension / language id (architecture.md §6.5).
|
|
4
|
+
*
|
|
5
|
+
* Registering an adapter here does NOT load its grammar — `createTreeSitterAdapter`
|
|
6
|
+
* (see `languages/shared/create-adapter.ts`) only touches the native
|
|
7
|
+
* `tree-sitter` module and the specific grammar module inside `parse()`,
|
|
8
|
+
* via `grammar-loader.ts`'s lazy, cached `require`. A CLI can therefore call
|
|
9
|
+
* `createParserRegistry()` and list/resolve adapters at startup without
|
|
10
|
+
* loading a single native grammar; the first grammar load happens on the
|
|
11
|
+
* first `parse()` call for that language, and only that language's grammar
|
|
12
|
+
* is ever touched if a workspace has, say, TypeScript files only.
|
|
13
|
+
*/
|
|
14
|
+
import type { LanguageAdapter, ParserRegistry, SupportLevel } from "@untangle-code/domain";
|
|
15
|
+
export declare class LazyParserRegistry implements ParserRegistry {
|
|
16
|
+
private readonly adaptersByLanguageId;
|
|
17
|
+
private readonly adaptersByExtension;
|
|
18
|
+
register(adapter: LanguageAdapter): void;
|
|
19
|
+
listAdapters(): LanguageAdapter[];
|
|
20
|
+
getAdapterByLanguage(languageId: string): LanguageAdapter | null;
|
|
21
|
+
getAdapterForPath(path: string, _contentSample?: string): LanguageAdapter | null;
|
|
22
|
+
supportLevelOf(languageId: string): SupportLevel | null;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3F,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsC;IAC3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAE1E,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAOxC,YAAY,IAAI,eAAe,EAAE;IAIjC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIhE,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAchF,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;CAGxD"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export class LazyParserRegistry {
|
|
2
|
+
adaptersByLanguageId = new Map();
|
|
3
|
+
adaptersByExtension = new Map();
|
|
4
|
+
register(adapter) {
|
|
5
|
+
this.adaptersByLanguageId.set(adapter.languageId, adapter);
|
|
6
|
+
for (const extension of adapter.extensions) {
|
|
7
|
+
this.adaptersByExtension.set(extension.toLowerCase(), adapter);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
listAdapters() {
|
|
11
|
+
return [...this.adaptersByLanguageId.values()];
|
|
12
|
+
}
|
|
13
|
+
getAdapterByLanguage(languageId) {
|
|
14
|
+
return this.adaptersByLanguageId.get(languageId) ?? null;
|
|
15
|
+
}
|
|
16
|
+
getAdapterForPath(path, _contentSample) {
|
|
17
|
+
const extension = extensionOf(path);
|
|
18
|
+
if (extension === null) {
|
|
19
|
+
// Extensionless-file content probing (spec.md §6.1) has no MVP use
|
|
20
|
+
// case in this package — every language it supports (TS/JS/TSX/JSX)
|
|
21
|
+
// is always extension-identified. `_contentSample` is accepted (per
|
|
22
|
+
// the domain port signature) but unused; a future adapter that needs
|
|
23
|
+
// it (e.g. a shebang-sniffed shell/Python script) implements the
|
|
24
|
+
// probe itself.
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return this.adaptersByExtension.get(extension) ?? null;
|
|
28
|
+
}
|
|
29
|
+
supportLevelOf(languageId) {
|
|
30
|
+
return this.adaptersByLanguageId.get(languageId)?.supportLevel ?? null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function extensionOf(path) {
|
|
34
|
+
const normalized = path.replace(/\\/g, "/");
|
|
35
|
+
const lastSlash = normalized.lastIndexOf("/");
|
|
36
|
+
const fileName = lastSlash === -1 ? normalized : normalized.slice(lastSlash + 1);
|
|
37
|
+
const lastDot = fileName.lastIndexOf(".");
|
|
38
|
+
if (lastDot <= 0)
|
|
39
|
+
return null; // no dot, or a dotfile like ".gitignore" (no extension)
|
|
40
|
+
return fileName.slice(lastDot).toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,kBAAkB;IACZ,oBAAoB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC1D,mBAAmB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE1E,QAAQ,CAAC,OAAwB;QAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3D,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB,CAAC,UAAkB;QACrC,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC3D,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,cAAuB;QACrD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,mEAAmE;YACnE,oEAAoE;YACpE,oEAAoE;YACpE,qEAAqE;YACrE,iEAAiE;YACjE,gBAAgB;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC;IACzE,CAAC;CACF;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,wDAAwD;IACvF,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC"}
|