semantifold 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -10
- package/build/index.d.ts +32 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +99 -4
- package/build/src/acceptance.d.ts +32 -0
- package/build/src/acceptance.d.ts.map +1 -0
- package/build/src/acceptance.js +358 -0
- package/build/src/array.d.ts +7 -0
- package/build/src/array.d.ts.map +1 -0
- package/build/src/array.js +18 -0
- package/build/src/artifact-path.d.ts +13 -0
- package/build/src/artifact-path.d.ts.map +1 -0
- package/build/src/artifact-path.js +30 -0
- package/build/src/artifacts.d.ts +7 -0
- package/build/src/artifacts.d.ts.map +1 -0
- package/build/src/artifacts.js +389 -0
- package/build/src/backends/c-runtime.d.ts +3 -0
- package/build/src/backends/c-runtime.d.ts.map +1 -0
- package/build/src/backends/c-runtime.js +151 -0
- package/build/src/backends/c-validation.d.ts +12 -0
- package/build/src/backends/c-validation.d.ts.map +1 -0
- package/build/src/backends/c-validation.js +85 -0
- package/build/src/backends/c.d.ts +31 -0
- package/build/src/backends/c.d.ts.map +1 -0
- package/build/src/backends/c.js +308 -0
- package/build/src/backends/cpp-runtime.d.ts +3 -0
- package/build/src/backends/cpp-runtime.d.ts.map +1 -0
- package/build/src/backends/cpp-runtime.js +99 -0
- package/build/src/backends/cpp-validation.d.ts +9 -0
- package/build/src/backends/cpp-validation.d.ts.map +1 -0
- package/build/src/backends/cpp-validation.js +74 -0
- package/build/src/backends/cpp.d.ts +16 -0
- package/build/src/backends/cpp.d.ts.map +1 -0
- package/build/src/backends/cpp.js +285 -0
- package/build/src/backends/csharp.d.ts +20 -0
- package/build/src/backends/csharp.d.ts.map +1 -0
- package/build/src/backends/csharp.js +259 -0
- package/build/src/backends/go.d.ts +20 -0
- package/build/src/backends/go.d.ts.map +1 -0
- package/build/src/backends/go.js +374 -0
- package/build/src/backends/identifiers.d.ts +12 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +79 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +27 -37
- package/build/src/backends/native-validation.d.ts +9 -0
- package/build/src/backends/native-validation.d.ts.map +1 -0
- package/build/src/backends/native-validation.js +59 -0
- package/build/src/backends/ordered-expressions.d.ts +74 -0
- package/build/src/backends/ordered-expressions.d.ts.map +1 -0
- package/build/src/backends/ordered-expressions.js +159 -0
- package/build/src/backends/python.d.ts +8 -0
- package/build/src/backends/python.d.ts.map +1 -0
- package/build/src/backends/python.js +162 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +8 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +67 -19
- package/build/src/binary-mapping.d.ts +32 -0
- package/build/src/binary-mapping.d.ts.map +1 -0
- package/build/src/binary-mapping.js +285 -0
- package/build/src/diagnostic.d.ts +36 -4
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +42 -3
- package/build/src/frontends/c-parser.d.ts +20 -0
- package/build/src/frontends/c-parser.d.ts.map +1 -0
- package/build/src/frontends/c-parser.js +14 -0
- package/build/src/frontends/c.d.ts +220 -0
- package/build/src/frontends/c.d.ts.map +1 -0
- package/build/src/frontends/c.js +750 -0
- package/build/src/frontends/cpp-parser.d.ts +11 -0
- package/build/src/frontends/cpp-parser.d.ts.map +1 -0
- package/build/src/frontends/cpp-parser.js +15 -0
- package/build/src/frontends/cpp.d.ts +227 -0
- package/build/src/frontends/cpp.d.ts.map +1 -0
- package/build/src/frontends/cpp.js +784 -0
- package/build/src/frontends/csharp.d.ts +14 -0
- package/build/src/frontends/csharp.d.ts.map +1 -0
- package/build/src/frontends/csharp.js +708 -0
- package/build/src/frontends/go.d.ts +15 -0
- package/build/src/frontends/go.d.ts.map +1 -0
- package/build/src/frontends/go.js +712 -0
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +5 -23
- package/build/src/frontends/python.d.ts +14 -0
- package/build/src/frontends/python.d.ts.map +1 -0
- package/build/src/frontends/python.js +615 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +21 -1
- package/build/src/language-registry.d.ts +113 -0
- package/build/src/language-registry.d.ts.map +1 -0
- package/build/src/language-registry.js +421 -0
- package/build/src/mapping.js +3 -2
- package/build/src/semantic/location.d.ts +7 -0
- package/build/src/semantic/location.d.ts.map +1 -1
- package/build/src/semantic/location.js +10 -1
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +399 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +110 -2
- package/build/src/subprocess.d.ts +38 -0
- package/build/src/subprocess.d.ts.map +1 -0
- package/build/src/subprocess.js +233 -0
- package/build/src/timeout.d.ts +8 -0
- package/build/src/timeout.d.ts.map +1 -0
- package/build/src/timeout.js +11 -0
- package/build/src/toolchains.d.ts +107 -0
- package/build/src/toolchains.d.ts.map +1 -0
- package/build/src/toolchains.js +417 -0
- package/docs/architecture.md +23 -5
- package/docs/c.md +60 -0
- package/docs/cpp.md +61 -0
- package/docs/goals.md +4 -2
- package/docs/language-support.md +46 -6
- package/docs/parser-qualification.md +219 -0
- package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
- package/docs/source-maps.md +38 -5
- package/docs/standard-library-portability.md +190 -0
- package/docs/testing.md +131 -3
- package/index.js +109 -4
- package/node_modules/node-addon-api/LICENSE.md +9 -0
- package/node_modules/node-addon-api/README.md +95 -0
- package/node_modules/node-addon-api/common.gypi +21 -0
- package/node_modules/node-addon-api/except.gypi +25 -0
- package/node_modules/node-addon-api/index.js +14 -0
- package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/node_modules/node-addon-api/napi-inl.h +7250 -0
- package/node_modules/node-addon-api/napi.h +3463 -0
- package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/node_modules/node-addon-api/node_api.gyp +9 -0
- package/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +21 -0
- package/node_modules/node-addon-api/package.json +481 -0
- package/node_modules/node-addon-api/tools/README.md +73 -0
- package/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
- package/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/tree-sitter/binding.gyp +88 -0
- package/node_modules/tree-sitter/index.js +950 -0
- package/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/tree-sitter/src/language.cc +105 -0
- package/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/tree-sitter/src/parser.cc +332 -0
- package/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/tree-sitter/src/query.cc +425 -0
- package/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/package.json +24 -6
- package/src/acceptance.js +380 -0
- package/src/array.js +19 -0
- package/src/artifact-path.js +34 -0
- package/src/artifacts.js +420 -0
- package/src/backends/c-runtime.js +151 -0
- package/src/backends/c-validation.js +83 -0
- package/src/backends/c.js +308 -0
- package/src/backends/cpp-runtime.js +99 -0
- package/src/backends/cpp-validation.js +70 -0
- package/src/backends/cpp.js +285 -0
- package/src/backends/csharp.js +270 -0
- package/src/backends/go.js +383 -0
- package/src/backends/identifiers.js +80 -1
- package/src/backends/index.js +23 -32
- package/src/backends/native-validation.js +64 -0
- package/src/backends/ordered-expressions.js +161 -0
- package/src/backends/python.js +175 -0
- package/src/backends/scalars.js +8 -1
- package/src/backends/shared.js +64 -17
- package/src/binary-mapping.js +305 -0
- package/src/diagnostic.js +34 -2
- package/src/frontends/c-parser.js +17 -0
- package/src/frontends/c.js +780 -0
- package/src/frontends/cpp-parser.js +18 -0
- package/src/frontends/cpp.js +816 -0
- package/src/frontends/csharp.js +759 -0
- package/src/frontends/go.js +770 -0
- package/src/frontends/index.js +5 -20
- package/src/frontends/python.js +689 -0
- package/src/frontends/scalars.js +20 -0
- package/src/language-registry.js +454 -0
- package/src/mapping.js +2 -1
- package/src/semantic/location.js +10 -0
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +124 -1
- package/src/subprocess.js +232 -0
- package/src/timeout.js +12 -0
- package/src/toolchains.js +448 -0
- package/tsconfig.json +1 -0
package/src/semantic/types.js
CHANGED
|
@@ -1,11 +1,45 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java"} SemanticLanguage */
|
|
3
|
+
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp"} SemanticLanguage */
|
|
4
4
|
/** @typedef {"integer" | "boolean" | "string"} SemanticTypeName */
|
|
5
5
|
/** @typedef {"IntegerNegate" | "BooleanNot"} SemanticUnaryOperation */
|
|
6
6
|
/** @typedef {"IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat"} SemanticBinaryOperation */
|
|
7
7
|
/** @typedef {"function" | "parameter" | "local"} SemanticSymbolKind */
|
|
8
8
|
/** @typedef {"declaration" | "read" | "write" | "call"} SemanticSymbolRole */
|
|
9
|
+
/** @typedef {"parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
|
|
10
|
+
/** @typedef {"entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader"} GeneratedArtifactRole */
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @typedef LanguageRoleCapabilities
|
|
14
|
+
* @property {boolean} frontend - Parser adapter availability.
|
|
15
|
+
* @property {boolean} textBackend - Single- or multi-file text backend availability.
|
|
16
|
+
* @property {boolean} binaryBackend - Binary backend availability.
|
|
17
|
+
* @property {boolean} applicationBackend - Application-artifact backend availability.
|
|
18
|
+
* @property {boolean} interoperability - Interoperability bridge availability.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @typedef LanguageMappingCapabilities
|
|
23
|
+
* @property {boolean} richText - Authoritative rich text mappings.
|
|
24
|
+
* @property {boolean} sourceMapV3 - Source Map v3 projection.
|
|
25
|
+
* @property {boolean} binaryRanges - Byte-coordinate binary/resource mappings.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @typedef LanguageAcceptanceCapabilities
|
|
30
|
+
* @property {readonly AcceptanceStage[]} stages - Applicable ordered acceptance stages.
|
|
31
|
+
* @property {readonly string[]} toolchains - Required canonical toolchain IDs.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @typedef LanguageCapabilities
|
|
36
|
+
* @property {string} id - Stable registry identity.
|
|
37
|
+
* @property {Readonly<LanguageRoleCapabilities>} roles - Independently registered roles.
|
|
38
|
+
* @property {"single" | "multiple"} artifactMultiplicity - Target artifact multiplicity.
|
|
39
|
+
* @property {boolean} roundTrip - Whether frontend/backend round-trip acceptance is declared.
|
|
40
|
+
* @property {Readonly<LanguageMappingCapabilities>} mapping - Mapping forms.
|
|
41
|
+
* @property {Readonly<LanguageAcceptanceCapabilities>} acceptance - Stages and toolchains.
|
|
42
|
+
*/
|
|
9
43
|
|
|
10
44
|
/**
|
|
11
45
|
* @typedef SourcePoint
|
|
@@ -60,6 +94,24 @@
|
|
|
60
94
|
|
|
61
95
|
/** @typedef {SourceOrigin | DerivedOrigin | SyntheticOrigin} SemanticOrigin */
|
|
62
96
|
|
|
97
|
+
/**
|
|
98
|
+
* @typedef GeneratedByteRange
|
|
99
|
+
* @property {{start: number, end: number}} generated - Half-open generated byte offsets.
|
|
100
|
+
* @property {SemanticOrigin} origin - Semantic or explicit synthetic provenance.
|
|
101
|
+
* @property {string} [nodeId] - Originating semantic node identity.
|
|
102
|
+
* @property {string} [symbolId] - Originating semantic symbol identity.
|
|
103
|
+
* @property {string} [role] - Semantic or binary-region role.
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @typedef SemantifoldByteMapping
|
|
108
|
+
* @property {"SemantifoldByteMapping"} schema - Schema discriminator.
|
|
109
|
+
* @property {1} version - Schema version.
|
|
110
|
+
* @property {"bytes"} coordinateSystem - Generated offsets are bytes, never text columns.
|
|
111
|
+
* @property {{path: string, byteLength: number}} generated - Generated artifact identity.
|
|
112
|
+
* @property {readonly GeneratedByteRange[]} ranges - Ordered non-overlapping ranges.
|
|
113
|
+
*/
|
|
114
|
+
|
|
63
115
|
/**
|
|
64
116
|
* @typedef SemanticNodeSourceProvenance
|
|
65
117
|
* @property {"SemantifoldNodeProvenance"} schema - Association discriminator.
|
|
@@ -147,6 +199,77 @@
|
|
|
147
199
|
* @property {string} sourceMapFilename - Default external Source Map filename.
|
|
148
200
|
*/
|
|
149
201
|
|
|
202
|
+
/**
|
|
203
|
+
* @typedef TextArtifactProvenance
|
|
204
|
+
* @property {"text"} kind - Rich text provenance discriminator.
|
|
205
|
+
* @property {SemantifoldMapping} mapping - Authoritative range mapping.
|
|
206
|
+
* @property {import("@jridgewell/gen-mapping").EncodedSourceMap} sourceMap - Interoperable projection.
|
|
207
|
+
* @property {string} [sourceMapFilename] - Logical Source Map sidecar path.
|
|
208
|
+
*/
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @typedef ByteArtifactProvenance
|
|
212
|
+
* @property {"bytes"} kind - Byte provenance discriminator.
|
|
213
|
+
* @property {SemantifoldByteMapping} mapping - Authoritative byte ranges.
|
|
214
|
+
*/
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @typedef ArtifactSyntheticProvenance
|
|
218
|
+
* @property {"synthetic"} kind - Synthetic artifact discriminator.
|
|
219
|
+
* @property {string} reason - Explicit target-scaffolding reason.
|
|
220
|
+
* @property {readonly RelatedOrigin[]} relatedOrigins - Related semantic source ranges.
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
/** @typedef {TextArtifactProvenance | ByteArtifactProvenance | ArtifactSyntheticProvenance} ArtifactProvenance */
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @typedef GeneratedSetArtifact
|
|
227
|
+
* @property {string} path - Unique safe relative POSIX path.
|
|
228
|
+
* @property {"text" | "binary"} contentKind - Content representation.
|
|
229
|
+
* @property {string | Uint8Array} content - Text or a detached copy of the exact generated bytes on every binary read.
|
|
230
|
+
* @property {string} mediaType - Artifact media type.
|
|
231
|
+
* @property {GeneratedArtifactRole} role - Artifact role; exactly one set artifact is entry.
|
|
232
|
+
* @property {"generated"} ownership - Task-015 ownership contract.
|
|
233
|
+
* @property {ArtifactProvenance} provenance - Text, byte-range, or synthetic provenance.
|
|
234
|
+
*/
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* @typedef GeneratedArtifactSet
|
|
238
|
+
* @property {"GeneratedArtifactSet"} schema - Schema discriminator.
|
|
239
|
+
* @property {1} version - Schema version.
|
|
240
|
+
* @property {string} target - Stable language or target ID.
|
|
241
|
+
* @property {string} entry - Path of the sole declared entry artifact.
|
|
242
|
+
* @property {readonly GeneratedSetArtifact[]} artifacts - Deterministic artifact order.
|
|
243
|
+
*/
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* @typedef DiscoveredToolchain
|
|
247
|
+
* @property {string} id - Toolchain ID.
|
|
248
|
+
* @property {string} command - Documented canonical command.
|
|
249
|
+
* @property {string} executable - Exact absolute executable path.
|
|
250
|
+
* @property {"override" | "canonical"} source - Resolution route.
|
|
251
|
+
* @property {string} version - First captured version line.
|
|
252
|
+
* @property {string} versionOutput - Complete captured version output.
|
|
253
|
+
* @property {readonly string[]} versionArguments - Exact version argument array.
|
|
254
|
+
*/
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @typedef AcceptanceStageResult
|
|
258
|
+
* @property {AcceptanceStage} stage - Completed stage.
|
|
259
|
+
* @property {string} executable - Exact executable used.
|
|
260
|
+
* @property {readonly string[]} arguments - Exact argument array used.
|
|
261
|
+
* @property {string} version - Discovered tool version.
|
|
262
|
+
* @property {string} stdout - Captured standard output.
|
|
263
|
+
* @property {string} stderr - Captured standard error.
|
|
264
|
+
*/
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @typedef AcceptanceResult
|
|
268
|
+
* @property {string} target - Target identity.
|
|
269
|
+
* @property {string} directory - Removed isolated project directory identity.
|
|
270
|
+
* @property {readonly AcceptanceStageResult[]} stages - Ordered completed stages.
|
|
271
|
+
*/
|
|
272
|
+
|
|
150
273
|
/**
|
|
151
274
|
* @typedef TypeReference
|
|
152
275
|
* @property {"TypeReference"} kind - Node discriminator.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {spawn} from "node:child_process"
|
|
4
|
+
import {StringDecoder} from "node:string_decoder"
|
|
5
|
+
|
|
6
|
+
const forcedTerminationGraceMs = 250
|
|
7
|
+
const retainedPipeGraceMs = 250
|
|
8
|
+
const deadlineFailures = new WeakSet()
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Executes one exact file while owning its complete bounded lifecycle.
|
|
12
|
+
* @param {object} input - Process request.
|
|
13
|
+
* @param {readonly string[]} input.arguments - Exact argument array.
|
|
14
|
+
* @param {string} [input.cwd] - Working directory.
|
|
15
|
+
* @param {Readonly<Record<string, string>>} input.environment - Exact environment.
|
|
16
|
+
* @param {string} input.executable - Exact executable path.
|
|
17
|
+
* @param {number} input.maxBuffer - Maximum bytes captured per output stream.
|
|
18
|
+
* @param {number} input.timeoutMs - Deadline before termination begins.
|
|
19
|
+
* @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
|
|
20
|
+
*/
|
|
21
|
+
export function executeFileWithDeadline(input) {
|
|
22
|
+
return executeFileWithDeadlineUsing(input, registerChildSpawn)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates an executor whose spawn observation belongs only to that executor instance.
|
|
27
|
+
* @param {object} dependencies - Internal lifecycle dependencies.
|
|
28
|
+
* @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} dependencies.registerSpawnListener - Registers deadline initialization.
|
|
29
|
+
* @returns {typeof executeFileWithDeadline} Owned subprocess executor.
|
|
30
|
+
*/
|
|
31
|
+
export function createExecuteFileWithDeadline({registerSpawnListener}) {
|
|
32
|
+
return (input) => executeFileWithDeadlineUsing(input, registerSpawnListener)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Executes with exact instance-owned spawn observation.
|
|
37
|
+
* @param {Parameters<typeof executeFileWithDeadline>[0]} input - Process request.
|
|
38
|
+
* @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} registerSpawnListener - Registers deadline initialization.
|
|
39
|
+
* @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
|
|
40
|
+
*/
|
|
41
|
+
function executeFileWithDeadlineUsing({arguments: processArguments, cwd, environment, executable, maxBuffer, timeoutMs}, registerSpawnListener) {
|
|
42
|
+
if (process.platform == "win32") {
|
|
43
|
+
return Promise.reject(Object.assign(new Error("Owned process-tree termination is unavailable on this platform."), {
|
|
44
|
+
code: "ENOTSUP",
|
|
45
|
+
stderr: "",
|
|
46
|
+
stdout: ""
|
|
47
|
+
}))
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
/** @type {ReturnType<typeof setTimeout> | undefined} */
|
|
52
|
+
let deadlineTimer
|
|
53
|
+
/** @type {ReturnType<typeof setTimeout> | undefined} */
|
|
54
|
+
let forceTimer
|
|
55
|
+
/** @type {ReturnType<typeof setTimeout> | undefined} */
|
|
56
|
+
let pipeTimer
|
|
57
|
+
/** @type {Error | undefined} */
|
|
58
|
+
let launchError
|
|
59
|
+
let deadlineExceeded = false
|
|
60
|
+
let outputExceeded = false
|
|
61
|
+
let settled = false
|
|
62
|
+
const stderr = outputCapture(maxBuffer, () => terminateForOutputLimit())
|
|
63
|
+
const stdout = outputCapture(maxBuffer, () => terminateForOutputLimit())
|
|
64
|
+
const child = spawn(executable, [...processArguments], {
|
|
65
|
+
cwd,
|
|
66
|
+
detached: true,
|
|
67
|
+
env: environment,
|
|
68
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
69
|
+
})
|
|
70
|
+
const processGroupId = child.pid
|
|
71
|
+
|
|
72
|
+
child.stderr.on("data", stderr.receive)
|
|
73
|
+
child.stdout.on("data", stdout.receive)
|
|
74
|
+
child.once("error", (error) => {
|
|
75
|
+
launchError = error
|
|
76
|
+
})
|
|
77
|
+
registerSpawnListener(child, () => {
|
|
78
|
+
if (processGroupId == undefined || !verifyOwnedProcessGroup(processGroupId)) {
|
|
79
|
+
launchError = Object.assign(new Error("Spawned subprocess did not establish its required process group."), {code: "ENOTSUP"})
|
|
80
|
+
child.kill("SIGKILL")
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
deadlineTimer = setTimeout(() => {
|
|
85
|
+
if (settled) return
|
|
86
|
+
deadlineExceeded = true
|
|
87
|
+
beginTermination(processGroupId)
|
|
88
|
+
}, timeoutMs)
|
|
89
|
+
})
|
|
90
|
+
child.once("close", (code, signal) => {
|
|
91
|
+
settled = true
|
|
92
|
+
if (deadlineTimer != undefined) clearTimeout(deadlineTimer)
|
|
93
|
+
if (forceTimer != undefined) clearTimeout(forceTimer)
|
|
94
|
+
if (pipeTimer != undefined) clearTimeout(pipeTimer)
|
|
95
|
+
const capturedStderr = stderr.finish()
|
|
96
|
+
const capturedStdout = stdout.finish()
|
|
97
|
+
|
|
98
|
+
if (launchError) {
|
|
99
|
+
reject(Object.assign(launchError, {stderr: capturedStderr, stdout: capturedStdout}))
|
|
100
|
+
} else if (outputExceeded) {
|
|
101
|
+
reject(Object.assign(new Error(`Subprocess exceeded its ${maxBuffer}-byte output capture limit.`), {
|
|
102
|
+
code: "ERR_CHILD_PROCESS_STDIO_MAXBUFFER",
|
|
103
|
+
signal,
|
|
104
|
+
stderr: capturedStderr,
|
|
105
|
+
stdout: capturedStdout
|
|
106
|
+
}))
|
|
107
|
+
} else if (deadlineExceeded) {
|
|
108
|
+
const timeoutError = Object.assign(new Error("Subprocess exceeded its owned deadline."), {
|
|
109
|
+
code,
|
|
110
|
+
signal,
|
|
111
|
+
stderr: capturedStderr,
|
|
112
|
+
stdout: capturedStdout
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
deadlineFailures.add(timeoutError)
|
|
116
|
+
reject(timeoutError)
|
|
117
|
+
} else if (code != 0 || signal != null) {
|
|
118
|
+
reject(Object.assign(new Error("Subprocess failed after launch."), {
|
|
119
|
+
code,
|
|
120
|
+
signal,
|
|
121
|
+
stderr: capturedStderr,
|
|
122
|
+
stdout: capturedStdout
|
|
123
|
+
}))
|
|
124
|
+
} else resolve({stderr: capturedStderr, stdout: capturedStdout})
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
/** Begins bounded termination after output capture crosses its limit. */
|
|
128
|
+
function terminateForOutputLimit() {
|
|
129
|
+
if (outputExceeded || settled) return
|
|
130
|
+
outputExceeded = true
|
|
131
|
+
if (processGroupId != undefined) beginTermination(processGroupId)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Signals the owned group now and escalates if its inherited pipes remain open.
|
|
136
|
+
* @param {number} ownedGroupId - Spawn-verified process-group identity.
|
|
137
|
+
*/
|
|
138
|
+
function beginTermination(ownedGroupId) {
|
|
139
|
+
signalOwnedProcessGroup(ownedGroupId, "SIGTERM")
|
|
140
|
+
if (!settled && forceTimer == undefined) {
|
|
141
|
+
forceTimer = setTimeout(() => {
|
|
142
|
+
if (settled) return
|
|
143
|
+
signalOwnedProcessGroup(ownedGroupId, "SIGKILL")
|
|
144
|
+
pipeTimer = setTimeout(() => {
|
|
145
|
+
if (settled) return
|
|
146
|
+
child.stdout.destroy()
|
|
147
|
+
child.stderr.destroy()
|
|
148
|
+
}, retainedPipeGraceMs)
|
|
149
|
+
}, forcedTerminationGraceMs)
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Registers production deadline initialization on the child's real spawn event.
|
|
157
|
+
* @param {import("node:child_process").ChildProcess} child - Exact spawned child.
|
|
158
|
+
* @param {() => void} listener - Deadline initialization.
|
|
159
|
+
*/
|
|
160
|
+
function registerChildSpawn(child, listener) {
|
|
161
|
+
child.once("spawn", listener)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Creates one byte-bounded UTF-8 stream capture.
|
|
166
|
+
* @param {number} maximumBytes - Maximum captured bytes.
|
|
167
|
+
* @param {() => void} onExceeded - First-overflow callback.
|
|
168
|
+
* @returns {{finish: () => string, receive: (chunk: Buffer) => void}} Capture callbacks.
|
|
169
|
+
*/
|
|
170
|
+
function outputCapture(maximumBytes, onExceeded) {
|
|
171
|
+
const decoder = new StringDecoder("utf8")
|
|
172
|
+
let byteLength = 0
|
|
173
|
+
let content = ""
|
|
174
|
+
let exceeded = false
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
finish() {
|
|
178
|
+
return content + decoder.end()
|
|
179
|
+
},
|
|
180
|
+
receive(chunk) {
|
|
181
|
+
if (exceeded) return
|
|
182
|
+
const remaining = maximumBytes - byteLength
|
|
183
|
+
|
|
184
|
+
if (chunk.length > remaining) {
|
|
185
|
+
if (remaining > 0) content += decoder.write(chunk.subarray(0, remaining))
|
|
186
|
+
exceeded = true
|
|
187
|
+
onExceeded()
|
|
188
|
+
return
|
|
189
|
+
}
|
|
190
|
+
byteLength += chunk.length
|
|
191
|
+
content += decoder.write(chunk)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Verifies that the spawned child is the live leader of its distinct POSIX group.
|
|
198
|
+
* @param {number} processGroupId - Spawn-returned child PID and required group ID.
|
|
199
|
+
* @returns {boolean} Whether the owned group exists.
|
|
200
|
+
*/
|
|
201
|
+
function verifyOwnedProcessGroup(processGroupId) {
|
|
202
|
+
try {
|
|
203
|
+
process.kill(-processGroupId, 0)
|
|
204
|
+
return true
|
|
205
|
+
} catch (error) {
|
|
206
|
+
if (error instanceof Error && "code" in error && error.code == "ESRCH") return false
|
|
207
|
+
throw error
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Signals only the verified process group created for the exact spawned child.
|
|
213
|
+
* @param {number} processGroupId - Spawn-returned child PID and POSIX process-group ID.
|
|
214
|
+
* @param {"SIGKILL" | "SIGTERM"} signal - Lifecycle signal.
|
|
215
|
+
* @returns {void}
|
|
216
|
+
*/
|
|
217
|
+
function signalOwnedProcessGroup(processGroupId, signal) {
|
|
218
|
+
try {
|
|
219
|
+
process.kill(-processGroupId, signal)
|
|
220
|
+
} catch (error) {
|
|
221
|
+
if (!(error instanceof Error && "code" in error && error.code == "ESRCH")) throw error
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Reports whether this module's deadline timer initiated termination.
|
|
227
|
+
* @param {unknown} error - Subprocess failure.
|
|
228
|
+
* @returns {boolean} Whether the failure belongs to an owned deadline.
|
|
229
|
+
*/
|
|
230
|
+
export function exceededOwnedDeadline(error) {
|
|
231
|
+
return typeof error == "object" && error != null && deadlineFailures.has(error)
|
|
232
|
+
}
|
package/src/timeout.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
export const maximumTimeoutMs = 2_147_483_647
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks whether a public subprocess timeout fits one exact Node timer.
|
|
7
|
+
* @param {unknown} value - Candidate timeout.
|
|
8
|
+
* @returns {value is number} Whether the timeout is a supported positive integer.
|
|
9
|
+
*/
|
|
10
|
+
export function isSupportedTimeoutMs(value) {
|
|
11
|
+
return typeof value == "number" && Number.isSafeInteger(value) && value > 0 && value <= maximumTimeoutMs
|
|
12
|
+
}
|