From 90ecd770311b719d5471c0dd32c5cdc5cbed48c8 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Wed, 18 Feb 2026 01:00:58 +0000 Subject: [PATCH] update some docs and project clean up (only runtime --- Cargo.lock | 769 +- Cargo.toml | 9 - .../prometeu-language-pbs/Cargo.toml | 9 - .../src/language_spec.rs | 16 - .../prometeu-language-pbs/src/lib.rs | 3 - .../prometeu-languages-registry/Cargo.toml | 11 - .../src/language_spec_registry.rs | 20 - .../prometeu-languages-registry/src/lib.rs | 3 - .../prometeu-build-pipeline/Cargo.toml | 24 - .../prometeu-build-pipeline/src/cli.rs | 158 - .../prometeu-build-pipeline/src/config.rs | 23 - .../prometeu-build-pipeline/src/ctx.rs | 71 - .../src/emit_artifacts.rs | 17 - .../prometeu-build-pipeline/src/lib.rs | 12 - .../prometeu-build-pipeline/src/main.rs | 7 - .../src/phases/boot.rs | 12 - .../src/phases/emit.rs | 7 - .../src/phases/language.rs | 11 - .../src/phases/load_source.rs | 117 - .../src/phases/lowering.rs | 6 - .../prometeu-build-pipeline/src/phases/mod.rs | 5 - .../prometeu-build-pipeline/src/pipeline.rs | 59 - crates/compiler/prometeu-bytecode/src/lib.rs | 15 - crates/compiler/prometeu-core/Cargo.toml | 10 - crates/compiler/prometeu-core/src/lib.rs | 3 - .../prometeu-core/src/source/diagnostics.rs | 81 - .../prometeu-core/src/source/file_db.rs | 69 - .../compiler/prometeu-core/src/source/ids.rs | 60 - .../prometeu-core/src/source/line_index.rs | 41 - .../compiler/prometeu-core/src/source/mod.rs | 13 - .../prometeu-core/src/source/name_interner.rs | 56 - .../compiler/prometeu-core/src/source/span.rs | 39 - .../tests/source/file_db_line_index.rs | 69 - .../prometeu-core/tests/source/span_tests.rs | 14 - crates/compiler/prometeu-deps/Cargo.toml | 19 - crates/compiler/prometeu-deps/src/lib.rs | 19 - .../prometeu-deps/src/load_sources.rs | 97 - .../prometeu-deps/src/model/build_stack.rs | 6 - .../prometeu-deps/src/model/cache_blobs.rs | 7 - .../prometeu-deps/src/model/cache_plan.rs | 4 - .../prometeu-deps/src/model/deps_config.rs | 7 - .../prometeu-deps/src/model/loaded_file.rs | 5 - .../prometeu-deps/src/model/loaded_sources.rs | 8 - .../prometeu-deps/src/model/manifest.rs | 75 - .../compiler/prometeu-deps/src/model/mod.rs | 11 - .../src/model/project_descriptor.rs | 14 - .../src/model/project_sources.rs | 8 - .../prometeu-deps/src/model/resolved_graph.rs | 16 - .../src/model/resolved_project.rs | 9 - .../prometeu-deps/src/workspace/host.rs | 32 - .../prometeu-deps/src/workspace/mod.rs | 6 - .../prometeu-deps/src/workspace/model.rs | 31 - .../src/workspace/phases/discover.rs | 131 - .../src/workspace/phases/localize.rs | 62 - .../src/workspace/phases/materialize.rs | 144 - .../prometeu-deps/src/workspace/phases/mod.rs | 10 - .../src/workspace/phases/policy.rs | 17 - .../src/workspace/phases/run_all.rs | 50 - .../src/workspace/phases/stack.rs | 97 - .../src/workspace/phases/state.rs | 58 - .../src/workspace/phases/validate.rs | 108 - .../src/workspace/resolve_workspace.rs | 10 - .../compiler/prometeu-language-api/Cargo.toml | 10 - .../src/language_spec.rs | 21 - .../compiler/prometeu-language-api/src/lib.rs | 3 - crates/compiler/prometeu-lowering/Cargo.toml | 19 - crates/compiler/prometeu-lowering/src/lib.rs | 0 crates/console/prometeu-drivers/Cargo.toml | 2 - crates/console/prometeu-firmware/Cargo.toml | 7 +- crates/console/prometeu-hal/Cargo.toml | 1 - crates/console/prometeu-system/Cargo.toml | 1 - crates/console/prometeu-vm/Cargo.toml | 2 - .../prometeu-vm/src/virtual_machine.rs | 19 +- .../prometeu-host-desktop-winit/Cargo.toml | 1 - crates/tools/prometeu-cli/Cargo.toml | 5 - .../tools/prometeu-cli/src/bin/prometeuc.rs | 1 - crates/tools/prometeu-lsp/Cargo.toml | 12 - crates/tools/prometeu-lsp/src/analysis_db.rs | 51 - crates/tools/prometeu-lsp/src/main.rs | 190 - crates/tools/prometeu-lsp/src/rebuild.rs | 147 - docs/specs/hardware/topics/chapter-15.md | 4 +- docs/specs/hardware/topics/chapter-16.md | 294 + docs/specs/hardware/topics/chapter-2.md | 836 +- docs/specs/hardware/topics/chapter-3.md | 460 +- docs/specs/hardware/topics/chapter-9.md | 383 +- .../hardware/topics/table-of-contents.md | 1 + prometeu-vscode/language-configuration.json | 19 - prometeu-vscode/out/extension.js | 34 - prometeu-vscode/out/extension.js.map | 1 - prometeu-vscode/package-lock.json | 7378 ----------------- prometeu-vscode/package.json | 50 - prometeu-vscode/settings.json | 3 - prometeu-vscode/src/extension.ts | 40 - prometeu-vscode/tsconfig.json | 12 - 94 files changed, 1161 insertions(+), 11746 deletions(-) delete mode 100644 crates/compiler/languages/prometeu-language-pbs/Cargo.toml delete mode 100644 crates/compiler/languages/prometeu-language-pbs/src/language_spec.rs delete mode 100644 crates/compiler/languages/prometeu-language-pbs/src/lib.rs delete mode 100644 crates/compiler/languages/prometeu-languages-registry/Cargo.toml delete mode 100644 crates/compiler/languages/prometeu-languages-registry/src/language_spec_registry.rs delete mode 100644 crates/compiler/languages/prometeu-languages-registry/src/lib.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/Cargo.toml delete mode 100644 crates/compiler/prometeu-build-pipeline/src/cli.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/config.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/ctx.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/emit_artifacts.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/lib.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/main.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/boot.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/emit.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/language.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/load_source.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/lowering.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/phases/mod.rs delete mode 100644 crates/compiler/prometeu-build-pipeline/src/pipeline.rs delete mode 100644 crates/compiler/prometeu-core/Cargo.toml delete mode 100644 crates/compiler/prometeu-core/src/lib.rs delete mode 100644 crates/compiler/prometeu-core/src/source/diagnostics.rs delete mode 100644 crates/compiler/prometeu-core/src/source/file_db.rs delete mode 100644 crates/compiler/prometeu-core/src/source/ids.rs delete mode 100644 crates/compiler/prometeu-core/src/source/line_index.rs delete mode 100644 crates/compiler/prometeu-core/src/source/mod.rs delete mode 100644 crates/compiler/prometeu-core/src/source/name_interner.rs delete mode 100644 crates/compiler/prometeu-core/src/source/span.rs delete mode 100644 crates/compiler/prometeu-core/tests/source/file_db_line_index.rs delete mode 100644 crates/compiler/prometeu-core/tests/source/span_tests.rs delete mode 100644 crates/compiler/prometeu-deps/Cargo.toml delete mode 100644 crates/compiler/prometeu-deps/src/lib.rs delete mode 100644 crates/compiler/prometeu-deps/src/load_sources.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/build_stack.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/cache_blobs.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/cache_plan.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/deps_config.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/loaded_file.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/loaded_sources.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/manifest.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/mod.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/project_descriptor.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/project_sources.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/resolved_graph.rs delete mode 100644 crates/compiler/prometeu-deps/src/model/resolved_project.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/host.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/mod.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/model.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/discover.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/localize.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/materialize.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/mod.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/policy.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/run_all.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/stack.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/state.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/phases/validate.rs delete mode 100644 crates/compiler/prometeu-deps/src/workspace/resolve_workspace.rs delete mode 100644 crates/compiler/prometeu-language-api/Cargo.toml delete mode 100644 crates/compiler/prometeu-language-api/src/language_spec.rs delete mode 100644 crates/compiler/prometeu-language-api/src/lib.rs delete mode 100644 crates/compiler/prometeu-lowering/Cargo.toml delete mode 100644 crates/compiler/prometeu-lowering/src/lib.rs delete mode 100644 crates/tools/prometeu-cli/src/bin/prometeuc.rs delete mode 100644 crates/tools/prometeu-lsp/Cargo.toml delete mode 100644 crates/tools/prometeu-lsp/src/analysis_db.rs delete mode 100644 crates/tools/prometeu-lsp/src/main.rs delete mode 100644 crates/tools/prometeu-lsp/src/rebuild.rs create mode 100644 docs/specs/hardware/topics/chapter-16.md delete mode 100644 prometeu-vscode/language-configuration.json delete mode 100644 prometeu-vscode/out/extension.js delete mode 100644 prometeu-vscode/out/extension.js.map delete mode 100644 prometeu-vscode/package-lock.json delete mode 100644 prometeu-vscode/package.json delete mode 100644 prometeu-vscode/settings.json delete mode 100644 prometeu-vscode/src/extension.ts delete mode 100644 prometeu-vscode/tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index 9fa848bb..71c69272 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,34 +187,12 @@ dependencies = [ "libloading 0.7.4", ] -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "auto_impl" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "autocfg" version = "1.5.0" @@ -325,12 +303,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "camino" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" - [[package]] name = "cc" version = "1.2.52" @@ -599,19 +571,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "dasp_sample" version = "0.11.0" @@ -624,17 +583,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "dlib" version = "0.5.2" @@ -678,12 +626,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - [[package]] name = "find-msvc-tools" version = "0.1.7" @@ -717,92 +659,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "gethostname" version = "1.1.0" @@ -964,114 +820,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - [[package]] name = "indexmap" version = "2.13.0" @@ -1211,12 +959,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - [[package]] name = "lock_api" version = "0.4.14" @@ -1232,19 +974,6 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "lsp-types" -version = "0.94.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1" -dependencies = [ - "bitflags 1.3.2", - "serde", - "serde_json", - "serde_repr", - "url", -] - [[package]] name = "mach2" version = "0.4.3" @@ -1299,17 +1028,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "mio" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - [[package]] name = "naga" version = "0.19.2" @@ -1740,12 +1458,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "percent-encoding" version = "2.3.2" @@ -1778,12 +1490,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "pixels" version = "0.15.0" @@ -1839,15 +1545,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - [[package]] name = "presser" version = "0.3.1" @@ -1878,20 +1575,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" -[[package]] -name = "prometeu-build-pipeline" -version = "0.1.0" -dependencies = [ - "anyhow", - "camino", - "clap", - "prometeu-core", - "prometeu-deps", - "prometeu-languages-registry", - "serde", - "serde_json", -] - [[package]] name = "prometeu-bytecode" version = "0.1.0" @@ -1905,40 +1588,14 @@ version = "0.1.0" dependencies = [ "anyhow", "clap", - "prometeu-build-pipeline", "prometeu-host-desktop-winit", ] -[[package]] -name = "prometeu-core" -version = "0.1.0" -dependencies = [ - "prometeu-bytecode", - "serde", - "serde_json", -] - -[[package]] -name = "prometeu-deps" -version = "0.1.0" -dependencies = [ - "anyhow", - "camino", - "prometeu-core", - "prometeu-language-api", - "prometeu-languages-registry", - "serde", - "serde_json", - "walkdir", -] - [[package]] name = "prometeu-drivers" version = "0.1.0" dependencies = [ - "prometeu-core", "prometeu-hal", - "prometeu-vm", "serde_json", ] @@ -1946,14 +1603,9 @@ dependencies = [ name = "prometeu-firmware" version = "0.1.0" dependencies = [ - "prometeu-bytecode", - "prometeu-core", - "prometeu-drivers", "prometeu-hal", "prometeu-system", "prometeu-vm", - "serde", - "serde_json", ] [[package]] @@ -1961,7 +1613,6 @@ name = "prometeu-hal" version = "0.1.0" dependencies = [ "prometeu-bytecode", - "prometeu-core", "serde", "serde_json", ] @@ -1973,7 +1624,6 @@ dependencies = [ "clap", "cpal", "pixels", - "prometeu-core", "prometeu-drivers", "prometeu-firmware", "prometeu-hal", @@ -1983,57 +1633,11 @@ dependencies = [ "winit", ] -[[package]] -name = "prometeu-language-api" -version = "0.1.0" - -[[package]] -name = "prometeu-language-pbs" -version = "0.1.0" -dependencies = [ - "prometeu-language-api", -] - -[[package]] -name = "prometeu-languages-registry" -version = "0.1.0" -dependencies = [ - "prometeu-language-api", - "prometeu-language-pbs", -] - -[[package]] -name = "prometeu-lowering" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "pathdiff", - "prometeu-bytecode", - "prometeu-core", - "prometeu-language-api", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "prometeu-lsp" -version = "0.1.0" -dependencies = [ - "prometeu-build-pipeline", - "prometeu-core", - "tokio", - "tokio-util", - "tower-lsp", -] - [[package]] name = "prometeu-system" version = "0.1.0" dependencies = [ "prometeu-bytecode", - "prometeu-core", "prometeu-drivers", "prometeu-hal", "prometeu-vm", @@ -2045,9 +1649,7 @@ name = "prometeu-vm" version = "0.1.0" dependencies = [ "prometeu-bytecode", - "prometeu-core", "prometeu-hal", - "serde", ] [[package]] @@ -2289,33 +1891,12 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - [[package]] name = "slab" version = "0.4.11" @@ -2371,16 +1952,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -2390,12 +1961,6 @@ dependencies = [ "bitflags 2.10.0", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "static_assertions" version = "1.1.0" @@ -2436,30 +2001,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "tempfile" -version = "3.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" -dependencies = [ - "fastrand", - "getrandom", - "once_cell", - "rustix 1.1.3", - "windows-sys 0.61.2", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -2514,57 +2055,6 @@ dependencies = [ "strict-num", ] -[[package]] -name = "tinystr" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tokio" -version = "1.49.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" -dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -2595,66 +2085,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-lsp" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ba052b54a6627628d9b3c34c176e7eda8359b7da9acd497b9f20998d118508" -dependencies = [ - "async-trait", - "auto_impl", - "bytes", - "dashmap", - "futures", - "httparse", - "lsp-types", - "memchr", - "serde", - "serde_json", - "tokio", - "tokio-util", - "tower", - "tower-lsp-macros", - "tracing", -] - -[[package]] -name = "tower-lsp-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.44" @@ -2662,29 +2092,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "tracing-core" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", -] [[package]] name = "ttf-parser" @@ -2725,25 +2140,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", - "serde_derive", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "utf8parse" version = "0.2.2" @@ -2766,12 +2162,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -3202,15 +2592,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -3244,30 +2625,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -3280,12 +2644,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -3298,12 +2656,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -3316,24 +2668,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -3346,12 +2686,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -3364,12 +2698,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -3382,12 +2710,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -3400,12 +2722,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winit" version = "0.30.12" @@ -3473,12 +2789,6 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - [[package]] name = "x11-dl" version = "2.21.0" @@ -3542,29 +2852,6 @@ version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", - "synstructure", -] - [[package]] name = "zerocopy" version = "0.8.33" @@ -3585,60 +2872,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", - "synstructure", -] - -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "zmij" version = "1.0.14" diff --git a/Cargo.toml b/Cargo.toml index dba07052..e1a441a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,14 +1,6 @@ [workspace] members = [ - "crates/compiler/languages/prometeu-languages-registry", - "crates/compiler/languages/prometeu-language-pbs", - - "crates/compiler/prometeu-build-pipeline", "crates/compiler/prometeu-bytecode", - "crates/compiler/prometeu-core", - "crates/compiler/prometeu-deps", - "crates/compiler/prometeu-language-api", - "crates/compiler/prometeu-lowering", "crates/console/prometeu-drivers", "crates/console/prometeu-firmware", @@ -19,7 +11,6 @@ members = [ "crates/host/prometeu-host-desktop-winit", "crates/tools/prometeu-cli", - "crates/tools/prometeu-lsp", ] resolver = "2" diff --git a/crates/compiler/languages/prometeu-language-pbs/Cargo.toml b/crates/compiler/languages/prometeu-language-pbs/Cargo.toml deleted file mode 100644 index d09a2da5..00000000 --- a/crates/compiler/languages/prometeu-language-pbs/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "prometeu-language-pbs" -version = "0.1.0" -edition = "2021" -license = "MIT" -description = "" - -[dependencies] -prometeu-language-api = { path = "../../prometeu-language-api" } \ No newline at end of file diff --git a/crates/compiler/languages/prometeu-language-pbs/src/language_spec.rs b/crates/compiler/languages/prometeu-language-pbs/src/language_spec.rs deleted file mode 100644 index 82b20ca0..00000000 --- a/crates/compiler/languages/prometeu-language-pbs/src/language_spec.rs +++ /dev/null @@ -1,16 +0,0 @@ -use std::sync::OnceLock; -use prometeu_language_api::{LanguageSpec, SourcePolicy}; - -pub static LANGUAGE_SPEC: OnceLock = OnceLock::new(); - -fn registry() -> &'static LanguageSpec { - LANGUAGE_SPEC.get_or_init(|| { - LanguageSpec { - id: "pbs", - source_policy: SourcePolicy { - extensions: vec!["pbs"], - case_sensitive: true, - }, - } - }) -} \ No newline at end of file diff --git a/crates/compiler/languages/prometeu-language-pbs/src/lib.rs b/crates/compiler/languages/prometeu-language-pbs/src/lib.rs deleted file mode 100644 index 046a7b10..00000000 --- a/crates/compiler/languages/prometeu-language-pbs/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod language_spec; - -pub use language_spec::LANGUAGE_SPEC; \ No newline at end of file diff --git a/crates/compiler/languages/prometeu-languages-registry/Cargo.toml b/crates/compiler/languages/prometeu-languages-registry/Cargo.toml deleted file mode 100644 index 8950c14d..00000000 --- a/crates/compiler/languages/prometeu-languages-registry/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "prometeu-languages-registry" -version = "0.1.0" -edition = "2021" -license = "MIT" -description = "" - -[dependencies] -prometeu-language-api = { path = "../../prometeu-language-api" } - -prometeu-language-pbs = { path = "../prometeu-language-pbs" } \ No newline at end of file diff --git a/crates/compiler/languages/prometeu-languages-registry/src/language_spec_registry.rs b/crates/compiler/languages/prometeu-languages-registry/src/language_spec_registry.rs deleted file mode 100644 index 98e7569d..00000000 --- a/crates/compiler/languages/prometeu-languages-registry/src/language_spec_registry.rs +++ /dev/null @@ -1,20 +0,0 @@ -use prometeu_language_api::LanguageSpec; -use std::collections::HashMap; -use std::sync::OnceLock; - -use prometeu_language_pbs::LANGUAGE_SPEC as PBS_LANGUAGE_SPEC; - -static REGISTRY: OnceLock> = OnceLock::new(); - -fn registry() -> &'static HashMap<&'static str, LanguageSpec> { - let pbs = PBS_LANGUAGE_SPEC.get().unwrap(); - REGISTRY.get_or_init(|| { - HashMap::from([ - (pbs.id, pbs.clone()), - ]) - }) -} - -pub fn get_language_spec(id: &str) -> Option<&LanguageSpec> { - registry().get(id) -} diff --git a/crates/compiler/languages/prometeu-languages-registry/src/lib.rs b/crates/compiler/languages/prometeu-languages-registry/src/lib.rs deleted file mode 100644 index f9cca34d..00000000 --- a/crates/compiler/languages/prometeu-languages-registry/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod language_spec_registry; - -pub use language_spec_registry::get_language_spec; \ No newline at end of file diff --git a/crates/compiler/prometeu-build-pipeline/Cargo.toml b/crates/compiler/prometeu-build-pipeline/Cargo.toml deleted file mode 100644 index d2beffa2..00000000 --- a/crates/compiler/prometeu-build-pipeline/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "prometeu-build-pipeline" -version = "0.1.0" -edition = "2021" -license.workspace = true -repository.workspace = true - -[[bin]] -name = "prometeu-build-pipeline" -path = "src/main.rs" - -[package.metadata.dist] -dist = true -include = ["../../VERSION.txt"] - -[dependencies] -prometeu-deps = { path = "../prometeu-deps" } -prometeu-core = { path = "../prometeu-core" } -prometeu-languages-registry = { path = "../languages/prometeu-languages-registry" } -clap = { version = "4.5.54", features = ["derive"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" -anyhow = "1.0.100" -camino = "1.2.2" diff --git a/crates/compiler/prometeu-build-pipeline/src/cli.rs b/crates/compiler/prometeu-build-pipeline/src/cli.rs deleted file mode 100644 index 397fb7bb..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/cli.rs +++ /dev/null @@ -1,158 +0,0 @@ -use crate::pipeline::run_phases; -use crate::{BuildMode, PipelineConfig, PipelineInput, PipelineOutput}; -use anyhow::{Context, Result}; -use clap::{Parser, Subcommand}; -use prometeu_deps::{load_sources, resolve_workspace, DepsConfig}; -use std::path::{Path, PathBuf}; -use camino::Utf8Path; -use crate::emit_artifacts::{emit_artifacts, EmitOptions}; - -/// Command line interface for the Prometeu Compiler. -#[derive(Parser)] -#[command(name = "prometeu")] -#[command(version, about = "PROMETEU toolchain entrypoint", long_about = None)] -pub struct Cli { - #[command(subcommand)] - pub command: Commands, -} - -/// Available subcommands for the compiler. -#[derive(Subcommand)] -pub enum Commands { - /// Builds a Prometeu project by compiling source code into an artifact (pbc/program image). - Build { - /// Path to the project root directory. - project_dir: PathBuf, - - /// Path to save the compiled artifact. - /// If omitted, deps/pipeline decide a default under target/ or dist/. - #[arg(short, long)] - out: Option, - - /// Whether to generate a .json symbols file for source mapping. - #[arg(long, default_value_t = true)] - emit_symbols: bool, - - /// Whether to generate a .disasm file for debugging. - #[arg(long, default_value_t = true)] - emit_disasm: bool, - - /// Whether to explain the dependency resolution process. - #[arg(long)] - explain_deps: bool, - - /// Build mode (debug/release). - #[arg(long, default_value = "debug")] - mode: String, - }, - - /// Verifies if a Prometeu project is valid without emitting code. - Verify { - project_dir: PathBuf, - - /// Whether to explain the dependency resolution process. - #[arg(long)] - explain_deps: bool, - }, -} - -pub fn run() -> Result<()> { - let cli = Cli::parse(); - - match cli.command { - Commands::Build { - project_dir, - out, - emit_disasm, - emit_symbols, - explain_deps, - mode, - } => { - let build_mode = parse_mode(&mode)?; - let cfg = PipelineConfig { - mode: build_mode, - enable_cache: true, - enable_frontends: false, - }; - - let pipeline_output = run_pipeline(cfg, &project_dir, explain_deps) - .context("pipeline: failed to execute pipeline")?; - - for diagnostics in &pipeline_output.diagnostics { - eprintln!("{:?}", diagnostics); - } - - let emit_opts = EmitOptions { - out, - emit_symbols, - emit_disasm, - }; - - emit_artifacts(&emit_opts, &pipeline_output) - .context("emit: failed to write artifacts")?; - - if pipeline_output.diagnostics.iter().any(|d| d.severity.is_error()) { - anyhow::bail!("build failed due to errors"); - } - } - - Commands::Verify { - project_dir, - explain_deps, - } => { - let cfg = PipelineConfig { - mode: BuildMode::Test, - enable_cache: true, - enable_frontends: false, - }; - - let pipeline_output = run_pipeline(cfg, &project_dir, explain_deps) - .context("pipeline: failed to execute pipeline")?; - - for diagnostic in &pipeline_output.diagnostics { - eprintln!("{:?}", diagnostic); - } - - if pipeline_output.diagnostics.iter().any(|d| d.severity.is_error()) { - anyhow::bail!("verify failed due to errors"); - } - } - } - - Ok(()) -} - - -fn run_pipeline(cfg: PipelineConfig, project_dir: &Path, explain_deps: bool) -> Result { - let deps_cfg = DepsConfig { - explain: explain_deps, - cache_dir: Default::default(), - registry_dirs: vec![], - }; - - let project_dir_path_buf = Utf8Path::from_path(project_dir) - .with_context(|| format!("deps: failed to convert project_dir to Utf8Path: {:?}", project_dir))?; - let resolved = resolve_workspace(&deps_cfg, project_dir_path_buf) - .with_context(|| format!("deps: failed to resolve project at {:?}", project_dir))?; - - let sources = load_sources(&deps_cfg, &resolved) - .context("deps: failed to load sources")?; - - let input = PipelineInput { - graph: resolved.graph, - stack: resolved.stack, - sources - }; - - Ok(run_phases(cfg, input)) -} - -/// Parse `--mode` from CLI. -fn parse_mode(s: &str) -> Result { - match s.to_ascii_lowercase().as_str() { - "debug" => Ok(BuildMode::Debug), - "release" => Ok(BuildMode::Release), - "test" => Ok(BuildMode::Test), - other => anyhow::bail!("invalid --mode '{}': expected debug|release|test", other), - } -} diff --git a/crates/compiler/prometeu-build-pipeline/src/config.rs b/crates/compiler/prometeu-build-pipeline/src/config.rs deleted file mode 100644 index 8cf9b38c..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/config.rs +++ /dev/null @@ -1,23 +0,0 @@ -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum BuildMode { - Debug, - Release, - Test, -} - -#[derive(Debug, Clone)] -pub struct PipelineConfig { - pub mode: BuildMode, - pub enable_cache: bool, - pub enable_frontends: bool, -} - -impl Default for PipelineConfig { - fn default() -> Self { - Self { - mode: BuildMode::Debug, - enable_cache: true, - enable_frontends: false, // Hard Reset default: pipeline runs with no FE. - } - } -} diff --git a/crates/compiler/prometeu-build-pipeline/src/ctx.rs b/crates/compiler/prometeu-build-pipeline/src/ctx.rs deleted file mode 100644 index 7e4097ec..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/ctx.rs +++ /dev/null @@ -1,71 +0,0 @@ -use std::any::Any; -use prometeu_core::{Diagnostic, FileDB, FileId, NameInterner, ProjectId}; -use prometeu_deps::BuildStack; - -/// Per-project arena slot created from the BuildStack order. -/// The pipeline owns this vector and indexes it by stack position. -#[derive(Debug)] -pub struct ProjectCtx { - pub project_id: ProjectId, - - /// FileIds inserted into `source_db` for this project. - pub files: Vec, - - /// Frontend output (TypedHIRBundle or similar) - intentionally opaque. - pub frontend_out: Option>, - - /// Backend output (ProgramImage / BytecodeModule / Artifact). - /// Keep as opaque until you finalize your bytecode/image crate. - pub backend_out: Option>, -} - -impl ProjectCtx { - pub fn new(project_id: ProjectId) -> Self { - Self { - project_id, - files: Vec::new(), - frontend_out: None, - backend_out: None, - } - } -} - -#[derive(Debug)] -pub struct PipelineCtx { - pub source_db: FileDB, - pub interner: NameInterner, - pub diagnostics: Vec, - pub projects: Vec, -} - -impl PipelineCtx { - pub fn new() -> Self { - Self { - source_db: FileDB::new(), - interner: NameInterner::new(), - diagnostics: Vec::new(), - projects: Vec::new(), - } - } - - pub fn push_diagnostic(&mut self, d: Diagnostic) { - self.diagnostics.push(d); - } - - /// Initialize per-project contexts from the BuildStack order. - pub fn init_projects_from_stack(&mut self, stack: &BuildStack) { - self.projects.clear(); - self.projects.reserve(stack.projects.len()); - for project_id in &stack.projects { - self.projects.push(ProjectCtx::new(project_id.clone())); - } - } - - pub fn project_ctx_mut(&mut self, index_in_stack: usize) -> &mut ProjectCtx { - &mut self.projects[index_in_stack] - } - - pub fn project_ctx(&self, index_in_stack: usize) -> &ProjectCtx { - &self.projects[index_in_stack] - } -} diff --git a/crates/compiler/prometeu-build-pipeline/src/emit_artifacts.rs b/crates/compiler/prometeu-build-pipeline/src/emit_artifacts.rs deleted file mode 100644 index ce6f601f..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/emit_artifacts.rs +++ /dev/null @@ -1,17 +0,0 @@ -use std::path::PathBuf; -use crate::PipelineOutput; - -pub struct EmitOptions { - pub(crate) out: Option, - pub(crate) emit_symbols: bool, - pub(crate) emit_disasm: bool, -} - -pub fn emit_artifacts(_opts: &EmitOptions, _outp: &PipelineOutput) -> anyhow::Result<()> { - // Later: - // - decide output dir (opts.out or default) - // - write .pbc / program image - // - write symbols.json (if exists) - // - write disasm (if exists) - Ok(()) -} \ No newline at end of file diff --git a/crates/compiler/prometeu-build-pipeline/src/lib.rs b/crates/compiler/prometeu-build-pipeline/src/lib.rs deleted file mode 100644 index 9f0cb56b..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -pub mod cli; -pub mod config; -pub mod ctx; -pub mod pipeline; -pub mod phases; -mod emit_artifacts; - -pub use config::*; -pub use ctx::*; -pub use pipeline::*; -pub use cli::run; - diff --git a/crates/compiler/prometeu-build-pipeline/src/main.rs b/crates/compiler/prometeu-build-pipeline/src/main.rs deleted file mode 100644 index b8db3c41..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -use anyhow::Result; - -/// Main entry point for the Prometeu Compiler binary. -/// It delegates execution to the library's `run` function. -fn main() -> Result<()> { - prometeu_build_pipeline::run() -} diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/boot.rs b/crates/compiler/prometeu-build-pipeline/src/phases/boot.rs deleted file mode 100644 index fbb0a164..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/boot.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::{ - config::PipelineConfig, - ctx::PipelineCtx, - pipeline::{PipelineInput}, -}; - -pub fn run(_cfg: &PipelineConfig, input: &PipelineInput, ctx: &mut PipelineCtx) { - // Arena init: one ProjectCtx per project in stack order. - ctx.init_projects_from_stack(&input.stack); - - // NOTE: no filesystem, no FE/BE assumptions here. -} diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/emit.rs b/crates/compiler/prometeu-build-pipeline/src/phases/emit.rs deleted file mode 100644 index 704f8298..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/emit.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::{config::PipelineConfig, ctx::PipelineCtx, pipeline::{Artifacts, PipelineInput}}; - -pub fn run(_cfg: &PipelineConfig, _input: &PipelineInput, _ctx: &mut PipelineCtx) -> Artifacts { - // Hard Reset stub: - // - later: emit build outputs (to FS via deps if you want strict IO centralization). - Artifacts::default() -} diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/language.rs b/crates/compiler/prometeu-build-pipeline/src/phases/language.rs deleted file mode 100644 index 06318e91..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/language.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::{config::PipelineConfig, ctx::PipelineCtx, pipeline::PipelineInput}; - -pub fn run(cfg: &PipelineConfig, _input: &PipelineInput, _ctx: &mut PipelineCtx) { - if !cfg.enable_frontends { - return; - } - - // Hard Reset: - // - no FE wired yet. - // - later: iterate projects in stack order and call FE plugin(s). -} diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/load_source.rs b/crates/compiler/prometeu-build-pipeline/src/phases/load_source.rs deleted file mode 100644 index 785abc07..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/load_source.rs +++ /dev/null @@ -1,117 +0,0 @@ -use prometeu_core::{Diagnostic, Severity, Span}; -use prometeu_deps::LoadedSources; -use crate::{ - config::PipelineConfig, - ctx::PipelineCtx, - pipeline::PipelineInput, -}; - -pub fn run(_cfg: &PipelineConfig, input: &PipelineInput, ctx: &mut PipelineCtx) { - load_sources(&input.sources, ctx); - - for i in 0..ctx.projects.len() { - let is_empty = ctx.projects[i].files.is_empty(); - - if is_empty { - let project_id = &input.stack.projects[i]; - let project_name = input.graph.project(project_id).unwrap().name.clone(); - - ctx.push_diagnostic(Diagnostic { - severity: Severity::Warning, - code: "PIPELINE_NO_SOURCES".into(), - message: format!( - "Project '{}' has no source files loaded.", - project_name - ), - span: Span::none(), - related: vec![], - }); - } - } -} - -fn load_sources(sources: &LoadedSources, ctx: &mut PipelineCtx) { - let stack_len = ctx.projects.len(); - let src_len = sources.per_project.len(); - - // 1) Diagnostic is sizes don't match - if src_len != stack_len { - ctx.push_diagnostic(Diagnostic { - severity: Severity::Error, - code: "PIPELINE_SOURCES_STACK_LEN_MISMATCH".into(), - message: format!( - "LoadedSources.per_project len ({}) does not match BuildStack len ({}).", - src_len, stack_len - ), - span: Span::none(), - related: vec![], - }); - } - - // 2) Process the bare minimum (don't panic, just keep running with diagnostics) - let n = stack_len.min(src_len); - - for i in 0..n { - let expected = ctx.projects[i].project_id; - let got = sources.per_project[i].project_id; - - if got != expected { - ctx.push_diagnostic(Diagnostic { - severity: Severity::Error, - code: "PIPELINE_SOURCES_STACK_ORDER_MISMATCH".into(), - message: format!( - "LoadedSources is not aligned with BuildStack at index {}: expected project_id {:?}, got {:?}.", - i, expected, got - ), - span: Span::none(), - related: vec![], - }); - - // there is no fix tolerance here, if it is wrong, it is wrong - // just catch as much diagnostics as possible before "crashing" - continue; - } - - for f in &sources.per_project[i].files { - let file_id = ctx.source_db.upsert(&f.uri, &f.text); - ctx.projects[i].files.push(file_id); - } - } - - // 3) If any LoadSources remains, it is a deps bug - if src_len > stack_len { - for extra in &sources.per_project[stack_len..] { - ctx.push_diagnostic(Diagnostic { - severity: Severity::Error, - code: "PIPELINE_SOURCES_EXTRA_PROJECT".into(), - message: format!( - "LoadedSources contains extra project_id {:?} not present in BuildStack.", - extra.project_id - ), - span: Span::none(), - related: vec![], - }); - } - } - - // 4) If missing inputs, it is another deps bug... - if stack_len > src_len { - let mut diagnostics: Vec = Vec::new(); - for missing in &ctx.projects[src_len..] { - diagnostics.push(Diagnostic { - severity: Severity::Error, - code: "PIPELINE_SOURCES_MISSING_PROJECT".into(), - message: format!( - "LoadedSources missing sources for project_id {:?} present in BuildStack.", - missing.project_id - ), - span: Span::none(), - related: vec![], - }); - } - for diagnostic in diagnostics { - ctx.push_diagnostic(diagnostic); - } - } -} - diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/lowering.rs b/crates/compiler/prometeu-build-pipeline/src/phases/lowering.rs deleted file mode 100644 index 305cc8f1..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/lowering.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::{config::PipelineConfig, ctx::PipelineCtx, pipeline::PipelineInput}; - -pub fn run(_cfg: &PipelineConfig, _input: &PipelineInput, _ctx: &mut PipelineCtx) { - // Hard Reset stub: - // - later: consume TypedHIRBundle(s) and lower into ProgramImage/BytecodeModule. -} diff --git a/crates/compiler/prometeu-build-pipeline/src/phases/mod.rs b/crates/compiler/prometeu-build-pipeline/src/phases/mod.rs deleted file mode 100644 index 25bb69e6..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/phases/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod boot; -pub mod load_source; -pub mod language; -pub mod lowering; -pub mod emit; diff --git a/crates/compiler/prometeu-build-pipeline/src/pipeline.rs b/crates/compiler/prometeu-build-pipeline/src/pipeline.rs deleted file mode 100644 index b8c5d73a..00000000 --- a/crates/compiler/prometeu-build-pipeline/src/pipeline.rs +++ /dev/null @@ -1,59 +0,0 @@ -use crate::{config::PipelineConfig, ctx::PipelineCtx, phases}; -use prometeu_core::Diagnostic; -use prometeu_deps::{BuildStack, LoadedSources, ResolvedGraph}; - -#[derive(Debug, Clone)] -pub struct PipelineInput { - pub graph: ResolvedGraph, - pub stack: BuildStack, - pub sources: LoadedSources -} - -#[derive(Debug, Default, Clone)] -pub struct PipelineStats { - pub projects_count: usize, - pub files_count: usize, -} - -#[derive(Debug, Default, Clone)] -pub struct Artifacts { - // placeholder: later include produced ProgramImage(s), debug bundles, logs, etc. -} - -#[derive(Debug, Default)] -pub struct PipelineOutput { - pub diagnostics: Vec, - pub artifacts: Artifacts, - pub stats: PipelineStats, -} - -pub(crate) fn run_phases(cfg: PipelineConfig, input: PipelineInput) -> PipelineOutput { - let mut ctx = PipelineCtx::new(); - - // Boot: create project slots in arena order. - phases::boot::run(&cfg, &input, &mut ctx); - - // Load source: populate FileDB from LoadedSources. - phases::load_source::run(&cfg, &input, &mut ctx); - - // Frontend phase (stub / optional). - phases::language::run(&cfg, &input, &mut ctx); - - // Backend phase (stub). - phases::lowering::run(&cfg, &input, &mut ctx); - - // Emit phase (stub). - let artifacts = phases::emit::run(&cfg, &input, &mut ctx); - - // Stats (basic). - let mut stats = PipelineStats::default(); - stats.projects_count = ctx.projects.len(); - stats.files_count = ctx.projects.iter().map(|p| p.files.len()).sum(); - - PipelineOutput { - diagnostics: ctx.diagnostics, - artifacts, - stats, - } -} - diff --git a/crates/compiler/prometeu-bytecode/src/lib.rs b/crates/compiler/prometeu-bytecode/src/lib.rs index a6444993..a70fb25c 100644 --- a/crates/compiler/prometeu-bytecode/src/lib.rs +++ b/crates/compiler/prometeu-bytecode/src/lib.rs @@ -1,18 +1,3 @@ -//! # Prometeu Bytecode (PBC) -//! -//! This crate defines the core Application Binary Interface (ABI) and Instruction Set Architecture (ISA) -//! for the Prometeu Virtual Machine (PVM). -//! -//! It serves as the "source of truth" for how programs are structured, encoded, and executed -//! within the ecosystem. -//! -//! ## Core Components: -//! - [`opcode`]: Defines the available instructions and their performance characteristics. -//! - [`abi`]: Specifies the binary rules for operands and stack behavior. -//! - [`asm`]: Provides a programmatic Assembler to convert high-level instructions to bytes. -//! - [`disasm`]: Provides a Disassembler to inspect compiled bytecode. -//! - [`readwrite`]: Internal utilities for Little-Endian binary I/O. - pub mod opcode; pub mod opcode_spec; pub mod abi; diff --git a/crates/compiler/prometeu-core/Cargo.toml b/crates/compiler/prometeu-core/Cargo.toml deleted file mode 100644 index da0e0cf8..00000000 --- a/crates/compiler/prometeu-core/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "prometeu-core" -version = "0.1.0" -edition = "2024" -license.workspace = true - -[dependencies] -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" -prometeu-bytecode = { path = "../prometeu-bytecode" } diff --git a/crates/compiler/prometeu-core/src/lib.rs b/crates/compiler/prometeu-core/src/lib.rs deleted file mode 100644 index 07f283b9..00000000 --- a/crates/compiler/prometeu-core/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod source; - -pub use source::*; \ No newline at end of file diff --git a/crates/compiler/prometeu-core/src/source/diagnostics.rs b/crates/compiler/prometeu-core/src/source/diagnostics.rs deleted file mode 100644 index bde61425..00000000 --- a/crates/compiler/prometeu-core/src/source/diagnostics.rs +++ /dev/null @@ -1,81 +0,0 @@ -use serde::{Serialize, Serializer}; -use crate::Span; - -#[derive(Debug, Clone, PartialEq)] -pub enum Severity { - Error, - Warning, -} - -impl Severity { - pub fn is_error(&self) -> bool { - match self { - Severity::Error => true, - Severity::Warning => false, - } - } -} - -impl Serialize for Severity { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - Severity::Error => serializer.serialize_str("error"), - Severity::Warning => serializer.serialize_str("warning"), - } - } -} - -#[derive(Debug, Clone, Serialize)] -pub struct Diagnostic { - pub severity: Severity, - pub code: String, - pub message: String, - pub span: Span, - pub related: Vec<(String, Span)>, -} - -#[derive(Debug, Clone, Serialize)] -pub struct DiagnosticBundle { - pub diagnostics: Vec, -} - -impl DiagnosticBundle { - pub fn new() -> Self { - Self { - diagnostics: Vec::new(), - } - } - - pub fn push(&mut self, diagnostic: Diagnostic) { - self.diagnostics.push(diagnostic); - } - - pub fn error(code: &str, message: String, span: Span) -> Self { - let mut bundle = Self::new(); - bundle.push(Diagnostic { - severity: Severity::Error, - code: code.to_string(), - message, - span, - related: Vec::new(), - }); - bundle - } - - pub fn has_errors(&self) -> bool { - self.diagnostics - .iter() - .any(|d| matches!(d.severity, Severity::Error)) - } -} - -impl From for DiagnosticBundle { - fn from(diagnostic: Diagnostic) -> Self { - let mut bundle = Self::new(); - bundle.push(diagnostic); - bundle - } -} diff --git a/crates/compiler/prometeu-core/src/source/file_db.rs b/crates/compiler/prometeu-core/src/source/file_db.rs deleted file mode 100644 index dbc9f698..00000000 --- a/crates/compiler/prometeu-core/src/source/file_db.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::collections::HashMap; -use crate::FileId; -use crate::LineIndex; - -#[derive(Default, Debug)] -pub struct FileDB { - files: Vec, - uri_to_id: HashMap, -} - -#[derive(Debug)] -struct FileData { - uri: String, - text: String, - line_index: LineIndex, -} - -impl FileDB { - pub fn new() -> Self { - Self { - files: Vec::new(), - uri_to_id: HashMap::new(), - } - } - - pub fn upsert(&mut self, uri: &str, text: &str) -> FileId { - if let Some(&id) = self.uri_to_id.get(uri) { - let line_index = LineIndex::new(&text); - self.files[id.0 as usize] = FileData { - uri: uri.to_owned(), - text: text.to_owned(), - line_index, - }; - id - } else { - let id = FileId(self.files.len() as u32); - let line_index = LineIndex::new(&text); - self.files.push(FileData { - uri: uri.to_owned(), - text: text.to_owned(), - line_index, - }); - self.uri_to_id.insert(uri.to_string(), id); - id - } - } - - pub fn file_id(&self, uri: &str) -> Option { - self.uri_to_id.get(uri).copied() - } - - pub fn uri(&self, id: FileId) -> &str { - &self.files[id.0 as usize].uri - } - - pub fn text(&self, id: FileId) -> &str { - &self.files[id.0 as usize].text - } - - pub fn line_index(&self, id: FileId) -> &LineIndex { - &self.files[id.0 as usize].line_index - } - - /// Returns a list of all known file IDs in insertion order. - pub fn all_files(&self) -> Vec { - (0..self.files.len()).map(|i| FileId(i as u32)).collect() - } -} - diff --git a/crates/compiler/prometeu-core/src/source/ids.rs b/crates/compiler/prometeu-core/src/source/ids.rs deleted file mode 100644 index d7965e07..00000000 --- a/crates/compiler/prometeu-core/src/source/ids.rs +++ /dev/null @@ -1,60 +0,0 @@ -macro_rules! define_id { - ($name:ident) => { - #[repr(transparent)] - #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, serde::Serialize, serde::Deserialize)] - pub struct $name(pub u32); - - impl $name { - pub const NONE: $name = $name(u32::MAX); - - #[inline] - pub const fn as_u32(self) -> u32 { self.0 } - - #[inline] - pub fn is_none(self) -> bool { - self == $name::NONE - } - } - - impl From for $name { - #[inline] - fn from(value: u32) -> Self { Self(value) } - } - - impl From<$name> for u32 { - #[inline] - fn from(value: $name) -> Self { value.0 } - } - }; -} - -define_id!(FileId); -define_id!(NodeId); -define_id!(NameId); -define_id!(SymbolId); -define_id!(TypeId); -define_id!(ModuleId); -define_id!(ProjectId); - -#[cfg(test)] -mod tests { - use super::*; - use std::collections::HashMap; - use std::mem::size_of; - - #[test] - fn ids_are_repr_transparent_and_hashable() { - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - assert_eq!(size_of::(), 4); - - // Hash/Eq usage - let mut m: HashMap = HashMap::new(); - m.insert(SymbolId(1), "one"); - assert_eq!(m.get(&SymbolId(1)).copied(), Some("one")); - } -} diff --git a/crates/compiler/prometeu-core/src/source/line_index.rs b/crates/compiler/prometeu-core/src/source/line_index.rs deleted file mode 100644 index 87d98dae..00000000 --- a/crates/compiler/prometeu-core/src/source/line_index.rs +++ /dev/null @@ -1,41 +0,0 @@ -#[derive(Debug)] -pub struct LineIndex { - line_starts: Vec, - total_len: u32, -} - -impl LineIndex { - pub fn new(text: &str) -> Self { - let mut line_starts = vec![0]; - for (offset, c) in text.char_indices() { - if c == '\n' { - line_starts.push((offset + 1) as u32); - } - } - Self { - line_starts, - total_len: text.len() as u32, - } - } - - pub fn offset_to_line_col(&self, offset: u32) -> (u32, u32) { - let line = match self.line_starts.binary_search(&offset) { - Ok(line) => line as u32, - Err(line) => (line - 1) as u32, - }; - let col = offset - self.line_starts[line as usize]; - (line, col) - } - - pub fn line_col_to_offset(&self, line: u32, col: u32) -> Option { - let start = *self.line_starts.get(line as usize)?; - let offset = start + col; - - let next_start = self.line_starts.get(line as usize + 1).copied().unwrap_or(self.total_len); - if offset < next_start || (offset == next_start && offset == self.total_len) { - Some(offset) - } else { - None - } - } -} diff --git a/crates/compiler/prometeu-core/src/source/mod.rs b/crates/compiler/prometeu-core/src/source/mod.rs deleted file mode 100644 index 69551f4a..00000000 --- a/crates/compiler/prometeu-core/src/source/mod.rs +++ /dev/null @@ -1,13 +0,0 @@ -mod ids; -mod span; -mod file_db; -mod name_interner; -mod diagnostics; -mod line_index; - -pub use ids::*; -pub use span::Span; -pub use file_db::FileDB; -pub use line_index::LineIndex; -pub use name_interner::NameInterner; -pub use diagnostics::*; \ No newline at end of file diff --git a/crates/compiler/prometeu-core/src/source/name_interner.rs b/crates/compiler/prometeu-core/src/source/name_interner.rs deleted file mode 100644 index 1381ee2a..00000000 --- a/crates/compiler/prometeu-core/src/source/name_interner.rs +++ /dev/null @@ -1,56 +0,0 @@ -use std::collections::HashMap; -use crate::NameId; - -#[derive(Debug, Default, Clone)] -pub struct NameInterner { - names: Vec, - ids: HashMap, -} - -impl NameInterner { - pub fn new() -> Self { - Self { - names: Vec::new(), - ids: HashMap::new(), - } - } - - pub fn intern(&mut self, s: &str) -> NameId { - if let Some(id) = self.ids.get(s) { - return *id; - } - - let id = NameId(self.names.len() as u32); - self.names.push(s.to_string()); - self.ids.insert(self.names[id.0 as usize].clone(), id); - id - } - - pub fn get(&self, s: &str) -> Option { - self.ids.get(s).copied() - } - - pub fn resolve(&self, id: NameId) -> &str { - &self.names[id.0 as usize] - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn interner_intern_resolve_roundtrip() { - let mut interner = NameInterner::new(); - let id = interner.intern("foo"); - assert_eq!(interner.resolve(id), "foo"); - } - - #[test] - fn interner_dedups_strings() { - let mut interner = NameInterner::new(); - let id1 = interner.intern("bar"); - let id2 = interner.intern("bar"); - assert_eq!(id1, id2); - } -} \ No newline at end of file diff --git a/crates/compiler/prometeu-core/src/source/span.rs b/crates/compiler/prometeu-core/src/source/span.rs deleted file mode 100644 index 2bd17b7c..00000000 --- a/crates/compiler/prometeu-core/src/source/span.rs +++ /dev/null @@ -1,39 +0,0 @@ -use crate::FileId; - -#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct Span { - pub file: FileId, - pub start: u32, // byte offset - pub end: u32, // byte offset, exclusive -} - -impl Span { - #[inline] - pub fn new(file: FileId, start: u32, end: u32) -> Self { - Self { file, start, end } - } - - #[inline] - pub fn none() -> Self { - Self { - file: FileId::NONE, - start: 0, - end: 0, - } - } - - #[inline] - pub fn is_none(&self) -> bool { - self.file.is_none() - } - - #[inline] - pub fn len(&self) -> u32 { - self.end.saturating_sub(self.start) - } - - #[inline] - pub fn contains(&self, byte: u32) -> bool { - self.start <= byte && byte < self.end - } -} diff --git a/crates/compiler/prometeu-core/tests/source/file_db_line_index.rs b/crates/compiler/prometeu-core/tests/source/file_db_line_index.rs deleted file mode 100644 index df7e6893..00000000 --- a/crates/compiler/prometeu-core/tests/source/file_db_line_index.rs +++ /dev/null @@ -1,69 +0,0 @@ -use prometeu_core::{FileDB, LineIndex}; - -#[test] -fn test_line_index_roundtrip() { - let text = "line 1\nline 2\nline 3"; - let index = LineIndex::new(text); - - // Roundtrip for each character - for (offset, _) in text.char_indices() { - let (line, col) = index.offset_to_line_col(offset as u32); - let recovered_offset = index.line_col_to_offset(line, col).expect("Should recover offset"); - assert_eq!(offset as u32, recovered_offset, "Offset mismatch at line {}, col {}", line, col); - } -} - -#[test] -fn test_line_index_boundaries() { - let text = "a\nbc\n"; - let index = LineIndex::new(text); - - // "a" -> (0, 0) - assert_eq!(index.offset_to_line_col(0), (0, 0)); - assert_eq!(index.line_col_to_offset(0, 0), Some(0)); - - // "\n" -> (0, 1) - assert_eq!(index.offset_to_line_col(1), (0, 1)); - assert_eq!(index.line_col_to_offset(0, 1), Some(1)); - - // "b" -> (1, 0) - assert_eq!(index.offset_to_line_col(2), (1, 0)); - assert_eq!(index.line_col_to_offset(1, 0), Some(2)); - - // "c" -> (1, 1) - assert_eq!(index.offset_to_line_col(3), (1, 1)); - assert_eq!(index.line_col_to_offset(1, 1), Some(3)); - - // "\n" (second) -> (1, 2) - assert_eq!(index.offset_to_line_col(4), (1, 2)); - assert_eq!(index.line_col_to_offset(1, 2), Some(4)); - - // EOF (after last \n) -> (2, 0) - assert_eq!(index.offset_to_line_col(5), (2, 0)); - assert_eq!(index.line_col_to_offset(2, 0), Some(5)); - - // Out of bounds - assert_eq!(index.line_col_to_offset(2, 1), None); - assert_eq!(index.line_col_to_offset(3, 0), None); -} - -#[test] -fn test_file_db_upsert_and_access() { - let mut db = FileDB::new(); - let uri = "file:///test.txt"; - let text = "hello\nworld".to_string(); - - let id = db.upsert(uri, text.clone()); - assert_eq!(db.file_id(uri), Some(id)); - assert_eq!(db.uri(id), uri); - assert_eq!(db.text(id), &text); - - let index = db.line_index(id); - assert_eq!(index.offset_to_line_col(6), (1, 0)); // 'w' is at offset 6 - - // Update existing file - let new_text = "new content".to_string(); - let same_id = db.upsert(uri, new_text.clone()); - assert_eq!(id, same_id); - assert_eq!(db.text(id), &new_text); -} diff --git a/crates/compiler/prometeu-core/tests/source/span_tests.rs b/crates/compiler/prometeu-core/tests/source/span_tests.rs deleted file mode 100644 index 657a975b..00000000 --- a/crates/compiler/prometeu-core/tests/source/span_tests.rs +++ /dev/null @@ -1,14 +0,0 @@ -use prometeu_core::{FileId, Span}; - -#[test] -fn span_end_is_exclusive() { - let file = FileId(1); - let s = Span::new(file, 2, 5); - // len = end - start - assert_eq!(s.len(), 3); - // contains is [start, end) - assert!(s.contains(2)); - assert!(s.contains(3)); - assert!(s.contains(4)); - assert!(!s.contains(5)); -} diff --git a/crates/compiler/prometeu-deps/Cargo.toml b/crates/compiler/prometeu-deps/Cargo.toml deleted file mode 100644 index 9b923bd9..00000000 --- a/crates/compiler/prometeu-deps/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "prometeu-deps" -version = "0.1.0" -edition = "2021" -license = "MIT" -description = "" - -[dependencies] -serde = { version = "1.0.228", features = ["derive"] } -prometeu-core = { path = "../prometeu-core" } -prometeu-language-api = { path = "../prometeu-language-api" } -prometeu-languages-registry = { path = "../languages/prometeu-languages-registry" } -anyhow = "1.0.101" -camino = "1.2.2" -walkdir = "2.5.0" -serde_json = "1.0.149" - -[features] -default = [] diff --git a/crates/compiler/prometeu-deps/src/lib.rs b/crates/compiler/prometeu-deps/src/lib.rs deleted file mode 100644 index 06b40cfb..00000000 --- a/crates/compiler/prometeu-deps/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -mod model; -mod load_sources; -mod workspace; - -pub use workspace::resolve_workspace; -pub use load_sources::load_sources; - -pub use model::manifest::*; -pub use model::resolved_project::ResolvedWorkspace; -pub use model::deps_config::DepsConfig; -pub use model::project_descriptor::ProjectDescriptor; -pub use model::build_stack::BuildStack; -pub use model::resolved_graph::ResolvedGraph; -pub use model::loaded_sources::LoadedSources; -pub use model::project_sources::ProjectSources; -pub use model::loaded_file::LoadedFile; -pub use model::cache_blobs::CacheBlobs; -pub use model::cache_plan::CachePlan; - diff --git a/crates/compiler/prometeu-deps/src/load_sources.rs b/crates/compiler/prometeu-deps/src/load_sources.rs deleted file mode 100644 index 0a8c64b5..00000000 --- a/crates/compiler/prometeu-deps/src/load_sources.rs +++ /dev/null @@ -1,97 +0,0 @@ -use anyhow::{Context, Result}; -use camino::Utf8PathBuf; -use walkdir::WalkDir; - -use crate::{ - DepsConfig, - LoadedFile, - LoadedSources, - ProjectSources, - ResolvedWorkspace, -}; - -pub fn load_sources(cfg: &DepsConfig, resolved: &ResolvedWorkspace) -> Result { - let mut per_project = Vec::with_capacity(resolved.stack.projects.len()); - - for project_id in &resolved.stack.projects { - let project = resolved - .graph - .project(project_id) - .with_context(|| format!("deps: unknown project_id {:?} in build stack", project_id))?; - - if cfg.explain { - eprintln!( - "[deps] load_sources: project {}@{} ({:?})", - project.name, project.version, project.project_dir - ); - } - - let mut files: Vec = Vec::new(); - - for root in &project.source_roots { - let abs_root = project.project_dir.join(root); - - if cfg.explain { - eprintln!("[deps] scanning {:?}", abs_root); - } - - if !abs_root.exists() { - anyhow::bail!( - "deps: source root does not exist for project {}@{}: {:?}", - project.name, - project.version, - abs_root - ); - } - - // Walk recursively. - for entry in WalkDir::new(&abs_root) - .follow_links(false) - .into_iter() - .filter_map(|e| e.ok()) - { - let ft = entry.file_type(); - if !ft.is_file() { - continue; - } - - let path = entry.path(); - - - // TODO: precisamos mexer no prometeu.json para configurar o frontend do projeto - // Filter extensions: start with PBS only. - if path.extension().and_then(|s| s.to_str()) != Some("pbs") { - continue; - } - - // Convert to Utf8Path (the best effort) and use a stable "uri". - let path_utf8: Utf8PathBuf = match Utf8PathBuf::from_path_buf(path.to_path_buf()) { - Ok(p) => p, - Err(_) => { - anyhow::bail!("deps: non-utf8 path found while scanning sources: {:?}", path); - } - }; - - let text = std::fs::read_to_string(&path_utf8) - .with_context(|| format!("deps: failed to read source file {:?}", path_utf8))?; - - // TODO: normalize newlines - - files.push(LoadedFile { - uri: path_utf8.to_string(), - text, - }); - } - } - - // Determinism: sort a file list by uri (important for stable builds). - files.sort_by(|a, b| a.uri.cmp(&b.uri)); - - per_project.push(ProjectSources { - project_id: project_id.clone(), - files, - }); - } - - Ok(LoadedSources { per_project }) -} diff --git a/crates/compiler/prometeu-deps/src/model/build_stack.rs b/crates/compiler/prometeu-deps/src/model/build_stack.rs deleted file mode 100644 index e3e85727..00000000 --- a/crates/compiler/prometeu-deps/src/model/build_stack.rs +++ /dev/null @@ -1,6 +0,0 @@ -use prometeu_core::ProjectId; - -#[derive(Debug, Clone)] -pub struct BuildStack { - pub projects: Vec, -} diff --git a/crates/compiler/prometeu-deps/src/model/cache_blobs.rs b/crates/compiler/prometeu-deps/src/model/cache_blobs.rs deleted file mode 100644 index e92281eb..00000000 --- a/crates/compiler/prometeu-deps/src/model/cache_blobs.rs +++ /dev/null @@ -1,7 +0,0 @@ -/// Cache blobs computed/validated by deps. -/// The pipeline may decide when to store, but deps executes IO and cache validity. -#[derive(Debug, Clone)] -pub struct CacheBlobs { - // placeholder - pub _unused: (), -} diff --git a/crates/compiler/prometeu-deps/src/model/cache_plan.rs b/crates/compiler/prometeu-deps/src/model/cache_plan.rs deleted file mode 100644 index be7f0236..00000000 --- a/crates/compiler/prometeu-deps/src/model/cache_plan.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[derive(Debug, Clone)] -pub struct CachePlan { - -} \ No newline at end of file diff --git a/crates/compiler/prometeu-deps/src/model/deps_config.rs b/crates/compiler/prometeu-deps/src/model/deps_config.rs deleted file mode 100644 index e20e137e..00000000 --- a/crates/compiler/prometeu-deps/src/model/deps_config.rs +++ /dev/null @@ -1,7 +0,0 @@ -use camino::Utf8PathBuf; - -pub struct DepsConfig { - pub explain: bool, - pub cache_dir: Utf8PathBuf, - pub registry_dirs: Vec, // or sources ? -} \ No newline at end of file diff --git a/crates/compiler/prometeu-deps/src/model/loaded_file.rs b/crates/compiler/prometeu-deps/src/model/loaded_file.rs deleted file mode 100644 index f1763402..00000000 --- a/crates/compiler/prometeu-deps/src/model/loaded_file.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[derive(Debug, Clone)] -pub struct LoadedFile { - pub uri: String, - pub text: String, -} diff --git a/crates/compiler/prometeu-deps/src/model/loaded_sources.rs b/crates/compiler/prometeu-deps/src/model/loaded_sources.rs deleted file mode 100644 index b5cb3085..00000000 --- a/crates/compiler/prometeu-deps/src/model/loaded_sources.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::model::project_sources::ProjectSources; - -/// Sources already loaded by deps (IO happens in deps, not in pipeline). -#[derive(Debug, Clone)] -pub struct LoadedSources { - /// For each project in the stack, a list of files (uri + text). - pub per_project: Vec, -} diff --git a/crates/compiler/prometeu-deps/src/model/manifest.rs b/crates/compiler/prometeu-deps/src/model/manifest.rs deleted file mode 100644 index 2404d945..00000000 --- a/crates/compiler/prometeu-deps/src/model/manifest.rs +++ /dev/null @@ -1,75 +0,0 @@ -use camino::Utf8PathBuf; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Manifest { - pub name: String, - pub version: String, - - #[serde(default)] - pub source_roots: Vec, - - pub language: LanguageDecl, - - #[serde(default)] - pub deps: Vec, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LanguageDecl { - pub id: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum DepDecl { - Local { - path: String, - }, - Git { - git: String, - rev: Option, - }, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct PrometeuLock { - pub schema: u32, - #[serde(default)] - pub mappings: Vec, -} - -impl PrometeuLock { - pub fn blank() -> Self { - Self { - schema: 0, - mappings: vec![], - } - } - - pub fn lookup_git_local_dir(&self, url: &str, rev: &str) -> Option<&String> { - self.mappings.iter().find_map(|m| match m { - LockMapping::Git { - git, rev: r, local_dir - } if git == url && r == rev => Some(local_dir), - _ => None, - }) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(tag = "kind", rename_all = "lowercase")] -pub enum LockMapping { - Git { - git: String, - rev: String, - local_dir: String, - }, - Registry { - registry: String, - version: String, - local_dir: String, - }, -} - - diff --git a/crates/compiler/prometeu-deps/src/model/mod.rs b/crates/compiler/prometeu-deps/src/model/mod.rs deleted file mode 100644 index d75c23c6..00000000 --- a/crates/compiler/prometeu-deps/src/model/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub mod deps_config; -pub mod project_descriptor; -pub mod build_stack; -pub mod resolved_graph; -pub mod loaded_sources; -pub mod project_sources; -pub mod loaded_file; -pub mod cache_blobs; -pub mod resolved_project; -pub mod cache_plan; -pub mod manifest; \ No newline at end of file diff --git a/crates/compiler/prometeu-deps/src/model/project_descriptor.rs b/crates/compiler/prometeu-deps/src/model/project_descriptor.rs deleted file mode 100644 index a1436312..00000000 --- a/crates/compiler/prometeu-deps/src/model/project_descriptor.rs +++ /dev/null @@ -1,14 +0,0 @@ -use camino::Utf8PathBuf; -use prometeu_core::ProjectId; -use prometeu_language_api::SourcePolicy; - -#[derive(Debug, Clone)] -pub struct ProjectDescriptor { - pub project_id: ProjectId, - pub name: String, - pub version: String, - pub project_dir: Utf8PathBuf, - pub source_roots: Vec, - pub language_id: String, - pub source_policy: SourcePolicy, -} diff --git a/crates/compiler/prometeu-deps/src/model/project_sources.rs b/crates/compiler/prometeu-deps/src/model/project_sources.rs deleted file mode 100644 index 8034b9c3..00000000 --- a/crates/compiler/prometeu-deps/src/model/project_sources.rs +++ /dev/null @@ -1,8 +0,0 @@ -use prometeu_core::ProjectId; -use crate::model::loaded_file::LoadedFile; - -#[derive(Debug, Clone)] -pub struct ProjectSources { - pub project_id: ProjectId, - pub files: Vec, -} diff --git a/crates/compiler/prometeu-deps/src/model/resolved_graph.rs b/crates/compiler/prometeu-deps/src/model/resolved_graph.rs deleted file mode 100644 index 357b088e..00000000 --- a/crates/compiler/prometeu-deps/src/model/resolved_graph.rs +++ /dev/null @@ -1,16 +0,0 @@ -use prometeu_core::ProjectId; -use crate::ProjectDescriptor; - -#[derive(Debug, Clone)] -pub struct ResolvedGraph { - pub root: ProjectId, - pub projects: Vec, // arena - // opcional: adjacency list para checks - pub edges: Vec>, // edges[from] = vec[to] -} - -impl ResolvedGraph { - pub fn project(&self, id: &ProjectId) -> Option<&ProjectDescriptor> { - self.projects.get(id.0 as usize) - } -} diff --git a/crates/compiler/prometeu-deps/src/model/resolved_project.rs b/crates/compiler/prometeu-deps/src/model/resolved_project.rs deleted file mode 100644 index a9af9f3d..00000000 --- a/crates/compiler/prometeu-deps/src/model/resolved_project.rs +++ /dev/null @@ -1,9 +0,0 @@ -use prometeu_core::ProjectId; -use crate::{BuildStack, ResolvedGraph}; - -#[derive(Debug, Clone)] -pub struct ResolvedWorkspace { - pub project_id: ProjectId, - pub graph: ResolvedGraph, - pub stack: BuildStack, -} diff --git a/crates/compiler/prometeu-deps/src/workspace/host.rs b/crates/compiler/prometeu-deps/src/workspace/host.rs deleted file mode 100644 index 19335c27..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/host.rs +++ /dev/null @@ -1,32 +0,0 @@ -use anyhow::{Context, Result}; -use camino::{Utf8Path, Utf8PathBuf}; - -use crate::workspace::model::DepRef; - -pub trait DepsHost { - fn read_to_string(&self, path: &Utf8Path) -> Result; - - // fn ensure_project_local(&self, from_dir: &Utf8Path, dep: &DepRef) -> Result; -} - -pub struct FsHost; - -impl DepsHost for FsHost { - fn read_to_string(&self, path: &Utf8Path) -> Result { - std::fs::read_to_string(path) - .with_context(|| format!("failed to read {:?}", path)) - } - - // fn ensure_project_local(&self, from_dir: &Utf8Path, dep: &DepRef) -> Result { - // match dep { - // DepRef::Local { path } => { - // let joined = from_dir.join(path); - // let canon = joined.canonicalize() - // .with_context(|| format!("deps: dep path does not exist: {:?}", joined))?; - // Utf8PathBuf::from_path_buf(canon) - // .map_err(|p| anyhow::anyhow!("deps: non-utf8 dep dir: {:?}", p)) - // } - // _ => unimplemented!(), - // } - // } -} diff --git a/crates/compiler/prometeu-deps/src/workspace/mod.rs b/crates/compiler/prometeu-deps/src/workspace/mod.rs deleted file mode 100644 index 944786d8..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -mod resolve_workspace; -mod host; -mod model; -mod phases; - -pub use resolve_workspace::resolve_workspace; \ No newline at end of file diff --git a/crates/compiler/prometeu-deps/src/workspace/model.rs b/crates/compiler/prometeu-deps/src/workspace/model.rs deleted file mode 100644 index ddd6e65e..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/model.rs +++ /dev/null @@ -1,31 +0,0 @@ -use camino::Utf8PathBuf; -use prometeu_core::ProjectId; -use prometeu_language_api::SourcePolicy; - -use crate::Manifest; - -#[derive(Debug, Clone)] -pub struct RawProjectNode { - pub dir: Utf8PathBuf, - pub manifest_path: Utf8PathBuf, - pub manifest: Manifest, -} - -#[derive(Debug, Clone)] -pub enum DepRef { - Local { - path: Utf8PathBuf - }, -} - -#[derive(Debug, Clone)] -pub struct ProjectNode { - pub id: ProjectId, - pub dir: Utf8PathBuf, - pub name: String, - pub version: String, - pub source_roots: Vec, - pub language_id: String, - pub deps: Vec, - pub source_policy: SourcePolicy, -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/discover.rs b/crates/compiler/prometeu-deps/src/workspace/phases/discover.rs deleted file mode 100644 index 51184a08..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/discover.rs +++ /dev/null @@ -1,131 +0,0 @@ -use crate::model::manifest::DepDecl; -use crate::workspace::host::DepsHost; -use crate::workspace::model::RawProjectNode; -use crate::workspace::phases::state::ResolverState; -use crate::Manifest; -use anyhow::{anyhow, bail, Context, Result}; -use camino::Utf8PathBuf; -use serde_json; -use std::fs::canonicalize; - -/// Phase 1: Discover all projects in the workspace. -/// -/// - Reads `prometeu.json` from each pending project directory. -/// - Parses `Manifest`. -/// - Registers the raw node. -/// - Enqueues local-path deps for discovery (v0). -/// -/// Does NOT: -/// - assign ProjectId -/// - build edges -/// - validate versions -pub fn discover( - cfg: &crate::DepsConfig, - host: &dyn DepsHost, - state: &mut ResolverState, -) -> Result<()> { - while let Some(canon_dir) = state.pending.pop_front() { - // de-dup by directory - if state.raw_by_dir.contains_key(&canon_dir) { - continue; - } - - let manifest_path = canon_dir.join("prometeu.json"); - if !manifest_path.exists() || !manifest_path.is_file() { - bail!( - "deps: manifest not found: expected a file {:?} (project dir {:?})", - manifest_path, - canon_dir - ); - } - - if cfg.explain { - eprintln!("[deps][discover] reading {:?}", manifest_path); - } - - let text = host - .read_to_string(&manifest_path) - .with_context(|| format!("deps: failed to read manifest {:?}", manifest_path))?; - - let manifest: Manifest = serde_json::from_str(&text) - .with_context(|| format!("deps: invalid manifest JSON {:?}", manifest_path))?; - - // Register raw node - let raw_idx = state.raw.len(); - state.raw.push(RawProjectNode { - dir: canon_dir.clone(), - manifest_path: manifest_path.clone(), - manifest: manifest.clone(), - }); - state.raw_by_dir.insert(canon_dir.clone(), raw_idx); - - for dep in &manifest.deps { - match dep { - DepDecl::Local { path } => { - let dep_dir = canon_dir.join(path); - - let dep_dir_std = dep_dir.canonicalize().with_context(|| { - format!( - "deps: dep path does not exist: {:?} (from {:?})", - dep_dir, canon_dir - ) - })?; - - let dep_dir_canon = Utf8PathBuf::from_path_buf(dep_dir_std) - .map_err(|p| anyhow!("deps: non-utf8 dep dir: {:?}", p))?; - - if cfg.explain { - eprintln!("[deps][discover] local dep '{}' -> {:?}", path, dep_dir_canon); - } - state.pending.push_back(dep_dir_canon); - } - - DepDecl::Git { git, rev } => { - let Some(rev) = rev.as_deref() else { - bail!( - "deps: git dependency '{}' requires an explicit 'rev' (commit hash) for now", - git - ); - }; - - let Some(local_dir) = state.lock.lookup_git_local_dir(git, rev) else { - bail!( - "deps: git dependency requires prometeu.lock mapping, but entry not found: git='{}' rev='{}'", - git, - rev - ); - }; - - // canonicalize the lock-provided local dir to keep identity stable - let local_dir_std = canonicalize(local_dir) - .with_context(|| format!("deps: prometeu.lock local_dir does not exist: {:?}", local_dir))?; - - let local_dir_canon = Utf8PathBuf::from_path_buf(local_dir_std) - .map_err(|p| anyhow!("deps: non-utf8 lock local_dir: {:?}", p))?; - - // validate manifest exists at the mapped project root - // (this check should not belong here, but it is ok) - let mapped_manifest = local_dir_canon.join("prometeu.json"); - if !mapped_manifest.exists() || !mapped_manifest.is_file() { - bail!( - "deps: prometeu.lock maps git dep to {:?}, but manifest is missing: {:?}", - local_dir_canon, - mapped_manifest - ); - } - - if cfg.explain { - eprintln!( - "[deps][discover] git dep '{}' rev '{}' -> {:?}", - git, rev, local_dir_canon - ); - } - - state.pending.push_back(local_dir_canon); - } - } - } - } - - Ok(()) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/localize.rs b/crates/compiler/prometeu-deps/src/workspace/phases/localize.rs deleted file mode 100644 index aa900bc1..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/localize.rs +++ /dev/null @@ -1,62 +0,0 @@ -use anyhow::{Context, Result}; - -use prometeu_core::ProjectId; - -use crate::workspace::model::DepRef; -use crate::workspace::phases::state::ResolverState; - -/// Phase 3: Localize dependencies and build graph edges. -/// -/// For each project node: -/// - For each DepRef: -/// - host.ensure_project_local(from_dir, dep) -> dep_dir (local on disk) -/// - map dep_dir to ProjectId via st.by_dir -/// - st.edges[from].push(dep_id) -/// -/// v0 policy: -/// - Only DepRef::LocalPath is supported. -/// - Git/Registry cause a hard error (future extension point). -pub fn localize(cfg: &crate::DepsConfig, state: &mut ResolverState) -> Result<()> { - // Reset edges (allows re-run / deterministic behavior) - for e in &mut state.edges { - e.clear(); - } - - for from_idx in 0..state.nodes.len() { - let from_id: ProjectId = state.nodes[from_idx].id; - let from_dir = state.nodes[from_idx].dir.clone(); - - if cfg.explain { - eprintln!( - "[deps][localize] from id={:?} dir={:?}", - from_id, from_dir - ); - } - - // Clone deps to avoid borrow conflicts (simple + safe for now) - let deps = state.nodes[from_idx].deps.clone(); - - for dep in deps { - match &dep { - DepRef::Local { - path - } => { - let dep_id = state.by_dir.get(path).copied().with_context(|| { - format!( - "deps: localized dep dir {:?} was not discovered; \ - ensure the dep has a prometeu.json and is reachable via local paths", - path - ) - })?; - state.edges[from_id.0 as usize].push(dep_id); - } - } - } - - // Optional: keep edges deterministic - state.edges[from_id.0 as usize].sort_by_key(|id| id.0); - state.edges[from_id.0 as usize].dedup(); - } - - Ok(()) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/materialize.rs b/crates/compiler/prometeu-deps/src/workspace/phases/materialize.rs deleted file mode 100644 index 7aca4ddd..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/materialize.rs +++ /dev/null @@ -1,144 +0,0 @@ -use crate::model::manifest::DepDecl; -use crate::workspace::model::{DepRef, ProjectNode}; -use crate::workspace::phases::state::ResolverState; -use anyhow::{anyhow, bail, Context, Result}; -use camino::Utf8PathBuf; -use prometeu_core::ProjectId; -use prometeu_languages_registry::get_language_spec; -use std::fs::canonicalize; - -/// Phase 2: Materialize projects (allocate ProjectId / arena nodes). -/// -/// Inputs: -/// - st.raw (RawProjectNode: dir + manifest) -/// -/// Outputs: -/// - st.nodes (ProjectNode arena) -/// - st.by_dir (dir -> ProjectId) -/// - st.edges (allocated adjacency lists, empty for now) -/// - st.root (ProjectId for root_dir) -/// -/// Does NOT: -/// - resolve deps to local dirs (that's phase localize) -/// - validate version conflicts/cycles -/// - resolve language/source policy -pub fn materialize(cfg: &crate::DepsConfig, state: &mut ResolverState) -> Result<()> { - // Reset materialized state (allows rerun in future refactors/tests) - state.nodes.clear(); - state.by_dir.clear(); - state.edges.clear(); - state.root = None; - - state.nodes.reserve(state.raw.len()); - state.edges.reserve(state.raw.len()); - - for (idx, raw) in state.raw.iter().enumerate() { - let id = ProjectId(idx as u32); - - // Default source roots if omitted - let source_roots: Vec = raw - .manifest - .source_roots - .iter() - .map(|root| Utf8PathBuf::from(root)) - .collect(); - if source_roots.is_empty() { - bail!( - "deps: no source roots specified for project {}", - raw.manifest.name - ) - } - - // Convert DepDecl -> DepRef (no localization yet) - let mut deps: Vec = Vec::with_capacity(raw.manifest.deps.len()); - for d in &raw.manifest.deps { - match d { - DepDecl::Local { path } => { - let joined = raw.dir.join(path); - let dir_std = joined.canonicalize() - .with_context(|| format!("deps: local dep path does not exist: {:?} (from {:?})", joined, raw.dir))?; - - let dir_canon = Utf8PathBuf::from_path_buf(dir_std) - .map_err(|p| anyhow!("deps: non-utf8 dep dir: {:?}", p))?; - deps.push(DepRef::Local { - path: dir_canon - }); - } - DepDecl::Git { git, rev } => { - let Some(rev) = rev.as_deref() else { - bail!( - "deps: git dependency '{}' requires an explicit 'rev' (commit hash) for now", - git - ); - }; - - let Some(local_dir) = state.lock.lookup_git_local_dir(git, rev) else { - bail!( - "deps: git dependency requires prometeu.lock mapping, but entry not found: git='{}' rev='{}'", - git, - rev - ); - }; - - // canonicalize the lock-provided local dir to keep identity stable - let path = canonicalize(local_dir).with_context(|| { - format!( - "deps: prometeu.lock local_dir does not exist: {:?}", - local_dir - ) - })?; - - let local_dir_canon = Utf8PathBuf::from_path_buf(path) - .map_err(|p| anyhow!("deps: non-utf8 lock local_dir: {:?}", p))?; - - deps.push(DepRef::Local { - path: local_dir_canon, - }); - } - } - } - - if cfg.explain { - eprintln!( - "[deps][materialize] id={:?} {}@{} dir={:?} language={}", - id, raw.manifest.name, raw.manifest.version, raw.dir, raw.manifest.language.id - ); - } - - let source_policy = get_language_spec(raw.manifest.language.id.as_str()) - .map(|spec| spec.source_policy.clone()) - .ok_or(anyhow!( - "deps: unknown language spec: {}", - raw.manifest.language.id - ))?; - - // Record node - state.nodes.push(ProjectNode { - id, - dir: raw.dir.clone(), - name: raw.manifest.name.clone(), - version: raw.manifest.version.clone(), - source_roots, - language_id: raw.manifest.language.id.clone(), - deps, - source_policy, - }); - - state.by_dir.insert(raw.dir.clone(), id); - state.edges.push(Vec::new()); - } - - // Determine root id - if let Some(root_id) = state.by_dir.get(&state.root_dir).copied() { - state.root = Some(root_id); - } else { - // This should never happen if seed/discover worked. - // Keep it as a hard failure (in a later validate phase you can convert to a nicer diagnostic). - anyhow::bail!( - "deps: root project dir {:?} was not discovered/materialized", - state.root_dir - ); - } - - Ok(()) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/mod.rs b/crates/compiler/prometeu-deps/src/workspace/phases/mod.rs deleted file mode 100644 index 25fbb3e4..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -mod run_all; -mod state; -mod discover; -mod materialize; -mod localize; -mod validate; -mod policy; -mod stack; - -pub use run_all::run_all; \ No newline at end of file diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/policy.rs b/crates/compiler/prometeu-deps/src/workspace/phases/policy.rs deleted file mode 100644 index f2340ef7..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/policy.rs +++ /dev/null @@ -1,17 +0,0 @@ -use anyhow::{bail, Result}; - -use crate::workspace::phases::state::ResolverState; - -pub fn policy(_cfg: &crate::DepsConfig, state: &mut ResolverState) -> Result<()> { - for node in &state.nodes { - if node.source_policy.extensions.is_empty() { - bail!( - "deps: project {}@{} has empty source_policy.extensions (language={})", - node.name, - node.version, - node.language_id - ); - } - } - Ok(()) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/run_all.rs b/crates/compiler/prometeu-deps/src/workspace/phases/run_all.rs deleted file mode 100644 index 62d71d6b..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/run_all.rs +++ /dev/null @@ -1,50 +0,0 @@ -use anyhow::{Context, Result}; -use camino::Utf8Path; - -use crate::{BuildStack, DepsConfig, ProjectDescriptor, ResolvedGraph, ResolvedWorkspace}; -use crate::workspace::host::FsHost; -use crate::workspace::phases::{discover, localize, materialize, policy, stack, state, validate}; - -pub fn run_all(cfg: &DepsConfig, fs_host: &FsHost, root_dir: &Utf8Path) -> Result { - let mut st = state::seed(cfg, root_dir)?; - - discover::discover(cfg, fs_host, &mut st)?; - materialize::materialize(cfg, &mut st)?; - localize::localize(cfg, &mut st)?; - - validate::validate(cfg, &st)?; - policy::policy(cfg, &mut st)?; - - let build_stack: BuildStack = stack::stack(cfg, &mut st)?; - - let root = st - .root - .context("deps: internal error: root ProjectId not set")?; - - // Build the arena expected by ResolvedGraph: index == ProjectId.0 - // materialize already assigns ProjectId(idx), so st.nodes order is stable. - let mut projects: Vec = Vec::with_capacity(st.nodes.len()); - for n in &st.nodes { - projects.push(ProjectDescriptor { - project_id: n.id, - name: n.name.clone(), - version: n.version.clone(), - project_dir: n.dir.clone(), - source_roots: n.source_roots.clone(), - language_id: n.language_id.clone(), - source_policy: n.source_policy.clone(), - }); - } - - let graph = ResolvedGraph { - root, - projects, - edges: st.edges, - }; - - Ok(ResolvedWorkspace { - project_id: root, - graph, - stack: build_stack, - }) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/stack.rs b/crates/compiler/prometeu-deps/src/workspace/phases/stack.rs deleted file mode 100644 index 34e5e49a..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/stack.rs +++ /dev/null @@ -1,97 +0,0 @@ -use anyhow::{Context, Result}; -use prometeu_core::ProjectId; -use std::collections::VecDeque; -use crate::BuildStack; -use crate::workspace::phases::state::ResolverState; - -/// Phase: BuildStack (deps-first topo order). -/// -/// Output: -/// - state.stack: Vec where deps appear before dependents. -/// -/// Determinism: -/// - ties are resolved by ProjectId order (stable across runs if discovery is stable). -pub fn stack(cfg: &crate::DepsConfig, state: &mut ResolverState) -> Result { - let n = state.nodes.len(); - let _root = state.root.context("deps: internal error: root ProjectId not set")?; - - // Build indegree - let mut indeg = vec![0usize; n]; - for outs in &state.edges { - for &to in outs { - indeg[to.0 as usize] += 1; - } - } - - // Deterministic queue: push in ProjectId order - let mut q = VecDeque::new(); - for i in 0..n { - if indeg[i] == 0 { - q.push_back(i); - } - } - - let mut order: Vec = Vec::with_capacity(n); - - while let Some(i) = q.pop_front() { - order.push(ProjectId(i as u32)); - - // Ensure deterministic traversal of outgoing edges too - // (your localize already sort/dedup edges, but this doesn't hurt) - for &to in &state.edges[i] { - let j = to.0 as usize; - indeg[j] -= 1; - if indeg[j] == 0 { - // Deterministic insert: keep queue ordered by ProjectId - // Simple O(n) insertion is fine for now. - insert_sorted_by_id(&mut q, j); - } - } - } - - // If validate ran, this should already be cycle-free; still keep a guard. - if order.len() != n { - anyhow::bail!( - "deps: internal error: stack generation did not visit all nodes ({} of {})", - order.len(), - n - ); - } - - if cfg.explain { - eprintln!("[deps][stack] build order:"); - for id in &order { - let node = &state.nodes[id.0 as usize]; - eprintln!(" - {:?} {}@{} dir={:?}", id, node.name, node.version, node.dir); - } - } - - Ok(BuildStack { - projects: order, - }) -} - -/// Insert node index `i` into queue `q` keeping it sorted by ProjectId (index). -fn insert_sorted_by_id(q: &mut VecDeque, i: usize) { - // Common fast path: append if >= last - if let Some(&last) = q.back() { - if i >= last { - q.push_back(i); - return; - } - } - - // Otherwise find insertion point - let mut pos = 0usize; - for &v in q.iter() { - if i < v { - break; - } - pos += 1; - } - - // VecDeque has no insert, so rebuild (small sizes OK for hard reset) - let mut tmp: Vec = q.drain(..).collect(); - tmp.insert(pos, i); - *q = VecDeque::from(tmp); -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/state.rs b/crates/compiler/prometeu-deps/src/workspace/phases/state.rs deleted file mode 100644 index 5eef4842..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/state.rs +++ /dev/null @@ -1,58 +0,0 @@ -use camino::{Utf8Path, Utf8PathBuf}; -use std::collections::{HashMap, VecDeque}; -use anyhow::Context; -use crate::workspace::model::{RawProjectNode, ProjectNode}; -use prometeu_core::ProjectId; -use crate::PrometeuLock; -use serde_json; - -pub struct ResolverState { - pub root_dir: Utf8PathBuf, - - // phase1 output - pub raw: Vec, - pub raw_by_dir: HashMap, - pub pending: VecDeque, - - // phase2+ - pub nodes: Vec, - pub by_dir: HashMap, - pub edges: Vec>, - - pub root: Option, - - pub lock: PrometeuLock, -} - -pub fn seed(_cfg: &crate::DepsConfig, root_dir: &Utf8Path) -> anyhow::Result { - let path_buf = root_dir.canonicalize()?; - let root_dir_canon = Utf8PathBuf::from_path_buf(path_buf) - .map_err(|p| anyhow::anyhow!("deps: non-utf8 root dir: {:?}", p))?; - - let lock_path = root_dir_canon.join("prometeu.lock"); - let lock = if lock_path.exists() { - let txt = std::fs::read_to_string(&lock_path)?; - serde_json::from_str::(&txt) - .with_context(|| format!("invalid prometeu.lock at {:?}", lock_path))? - } else { - PrometeuLock::blank() - }; - - let mut pending = VecDeque::new(); - pending.push_back(root_dir_canon.clone()); - - Ok(ResolverState { - root_dir: root_dir_canon.clone(), - raw: vec![], - raw_by_dir: HashMap::new(), - pending, - - nodes: vec![], - by_dir: HashMap::new(), - edges: vec![], - - root: None, - - lock, - }) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/phases/validate.rs b/crates/compiler/prometeu-deps/src/workspace/phases/validate.rs deleted file mode 100644 index b49a61ff..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/phases/validate.rs +++ /dev/null @@ -1,108 +0,0 @@ -use anyhow::{bail, Context, Result}; -use prometeu_core::ProjectId; -use std::collections::{HashMap, VecDeque}; - -use crate::workspace::phases::state::ResolverState; - -/// Phase: Validate workspace graph & invariants (v0). -/// -/// Checks: -/// - root present -/// - edges are in-range -/// - no cycles -/// - no version conflicts for same project name -pub fn validate(cfg: &crate::DepsConfig, state: &ResolverState) -> Result<()> { - // 1) root present - let root = state.root.context("deps: internal error: root ProjectId not set")?; - if cfg.explain { - eprintln!("[deps][validate] root={:?}", root); - } - - // 2) edges sanity - let n = state.nodes.len(); - for (from_idx, outs) in state.edges.iter().enumerate() { - for &to in outs { - let to_idx = to.0 as usize; - if to_idx >= n { - bail!( - "deps: invalid edge: from {:?} -> {:?} (to out of range; nodes={})", - ProjectId(from_idx as u32), - to, - n - ); - } - } - } - - // 3) version conflicts by name - // name -> (version -> ProjectId) - let mut by_name: HashMap<&str, HashMap<&str, ProjectId>> = HashMap::new(); - for node in &state.nodes { - let vmap = by_name.entry(node.name.as_str()).or_default(); - vmap.entry(node.version.as_str()).or_insert(node.id); - } - for (name, versions) in &by_name { - if versions.len() > 1 { - // create deterministic message - let mut vs: Vec<(&str, ProjectId)> = versions.iter().map(|(v, id)| (*v, *id)).collect(); - vs.sort_by(|a, b| a.0.cmp(b.0)); - - let mut msg = format!("deps: version conflict for project '{}':", name); - for (v, id) in vs { - let dir = &state.nodes[id.0 as usize].dir; - msg.push_str(&format!("\n - {} at {:?} (id={:?})", v, dir, id)); - } - bail!(msg); - } - } - - // 4) cycle detection (Kahn + leftover nodes) - // Build indegree - let mut indeg = vec![0usize; n]; - for outs in &state.edges { - for &to in outs { - indeg[to.0 as usize] += 1; - } - } - - let mut q = VecDeque::new(); - for i in 0..n { - if indeg[i] == 0 { - q.push_back(i); - } - } - - let mut visited = 0usize; - while let Some(i) = q.pop_front() { - visited += 1; - for &to in &state.edges[i] { - let j = to.0 as usize; - indeg[j] -= 1; - if indeg[j] == 0 { - q.push_back(j); - } - } - } - - if visited != n { - // Nodes with indeg>0 are part of cycles (or downstream of them) - let mut cyclic: Vec = Vec::new(); - for i in 0..n { - if indeg[i] > 0 { - cyclic.push(ProjectId(i as u32)); - } - } - - // Deterministic error output - cyclic.sort_by_key(|id| id.0); - - let mut msg = "deps: dependency cycle detected among:".to_string(); - for id in cyclic { - let node = &state.nodes[id.0 as usize]; - msg.push_str(&format!("\n - {:?} {}@{} dir={:?}", id, node.name, node.version, node.dir)); - } - bail!(msg); - } - - Ok(()) -} diff --git a/crates/compiler/prometeu-deps/src/workspace/resolve_workspace.rs b/crates/compiler/prometeu-deps/src/workspace/resolve_workspace.rs deleted file mode 100644 index 8e595efb..00000000 --- a/crates/compiler/prometeu-deps/src/workspace/resolve_workspace.rs +++ /dev/null @@ -1,10 +0,0 @@ -use anyhow::Result; -use camino::Utf8Path; - -use crate::{DepsConfig, ResolvedWorkspace}; -use crate::workspace::host::FsHost; - -pub fn resolve_workspace(cfg: &DepsConfig, root_dir: &Utf8Path) -> Result { - let host = FsHost; - crate::workspace::phases::run_all(cfg, &host, root_dir) -} diff --git a/crates/compiler/prometeu-language-api/Cargo.toml b/crates/compiler/prometeu-language-api/Cargo.toml deleted file mode 100644 index 880c247e..00000000 --- a/crates/compiler/prometeu-language-api/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "prometeu-language-api" -version = "0.1.0" -edition = "2021" -license = "MIT" -description = "Canonical language contract for Prometeu Backend: identifiers, references, and strict Frontend trait." -repository = "https://github.com/prometeu/runtime" - -[dependencies] - diff --git a/crates/compiler/prometeu-language-api/src/language_spec.rs b/crates/compiler/prometeu-language-api/src/language_spec.rs deleted file mode 100644 index ed1ff031..00000000 --- a/crates/compiler/prometeu-language-api/src/language_spec.rs +++ /dev/null @@ -1,21 +0,0 @@ -#[derive(Debug, Clone)] -pub struct SourcePolicy { - pub extensions: Vec<&'static str>, - pub case_sensitive: bool, -} - -impl SourcePolicy { - pub fn matches_ext(&self, ext: &str) -> bool { - if self.case_sensitive { - self.extensions.iter().any(|e| *e == ext) - } else { - self.extensions.iter().any(|e| e.eq_ignore_ascii_case(ext)) - } - } -} - -#[derive(Debug, Clone)] -pub struct LanguageSpec { - pub id: &'static str, - pub source_policy: SourcePolicy, -} \ No newline at end of file diff --git a/crates/compiler/prometeu-language-api/src/lib.rs b/crates/compiler/prometeu-language-api/src/lib.rs deleted file mode 100644 index 522059e9..00000000 --- a/crates/compiler/prometeu-language-api/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod language_spec; - -pub use language_spec::*; diff --git a/crates/compiler/prometeu-lowering/Cargo.toml b/crates/compiler/prometeu-lowering/Cargo.toml deleted file mode 100644 index 60035bed..00000000 --- a/crates/compiler/prometeu-lowering/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "prometeu-lowering" -version = "0.1.0" -edition = "2021" -license.workspace = true -repository.workspace = true - -[dependencies] -prometeu-bytecode = { path = "../prometeu-bytecode" } -prometeu-core = { path = "../prometeu-core" } -prometeu-language-api = { path = "../prometeu-language-api" } -clap = { version = "4.5.54", features = ["derive"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" -anyhow = "1.0.100" -pathdiff = "0.2.1" - -[dev-dependencies] -tempfile = "3.10.1" diff --git a/crates/compiler/prometeu-lowering/src/lib.rs b/crates/compiler/prometeu-lowering/src/lib.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/crates/console/prometeu-drivers/Cargo.toml b/crates/console/prometeu-drivers/Cargo.toml index 7fc1aa9a..098c30d2 100644 --- a/crates/console/prometeu-drivers/Cargo.toml +++ b/crates/console/prometeu-drivers/Cargo.toml @@ -6,6 +6,4 @@ license.workspace = true [dependencies] serde_json = "1.0.149" -prometeu-vm = { path = "../prometeu-vm" } -prometeu-core = { path = "../../compiler/prometeu-core" } prometeu-hal = { path = "../prometeu-hal" } diff --git a/crates/console/prometeu-firmware/Cargo.toml b/crates/console/prometeu-firmware/Cargo.toml index 7df91e12..57050b40 100644 --- a/crates/console/prometeu-firmware/Cargo.toml +++ b/crates/console/prometeu-firmware/Cargo.toml @@ -5,11 +5,6 @@ edition = "2024" license.workspace = true [dependencies] -prometeu-drivers = { path = "../prometeu-drivers" } prometeu-vm = { path = "../prometeu-vm" } prometeu-system = { path = "../prometeu-system" } -prometeu-bytecode = { path = "../../compiler/prometeu-bytecode" } -prometeu-core = { path = "../../compiler/prometeu-core" } -prometeu-hal = { path = "../prometeu-hal" } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" +prometeu-hal = { path = "../prometeu-hal" } \ No newline at end of file diff --git a/crates/console/prometeu-hal/Cargo.toml b/crates/console/prometeu-hal/Cargo.toml index 8f218611..db32d392 100644 --- a/crates/console/prometeu-hal/Cargo.toml +++ b/crates/console/prometeu-hal/Cargo.toml @@ -5,7 +5,6 @@ edition = "2024" license.workspace = true [dependencies] -prometeu-core = { path = "../../compiler/prometeu-core" } prometeu-bytecode = { path = "../../compiler/prometeu-bytecode" } serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" \ No newline at end of file diff --git a/crates/console/prometeu-system/Cargo.toml b/crates/console/prometeu-system/Cargo.toml index 0b6f2485..4fcb329f 100644 --- a/crates/console/prometeu-system/Cargo.toml +++ b/crates/console/prometeu-system/Cargo.toml @@ -8,7 +8,6 @@ license.workspace = true serde_json = "1.0.149" prometeu-vm = { path = "../prometeu-vm" } prometeu-bytecode = { path = "../../compiler/prometeu-bytecode" } -prometeu-core = { path = "../../compiler/prometeu-core" } prometeu-hal = { path = "../prometeu-hal" } [dev-dependencies] diff --git a/crates/console/prometeu-vm/Cargo.toml b/crates/console/prometeu-vm/Cargo.toml index 330702f9..e660d749 100644 --- a/crates/console/prometeu-vm/Cargo.toml +++ b/crates/console/prometeu-vm/Cargo.toml @@ -5,7 +5,5 @@ edition = "2024" license.workspace = true [dependencies] -serde = { version = "1.0.228", features = ["derive"] } prometeu-bytecode = { path = "../../compiler/prometeu-bytecode" } -prometeu-core = { path = "../../compiler/prometeu-core" } prometeu-hal = { path = "../prometeu-hal" } diff --git a/crates/console/prometeu-vm/src/virtual_machine.rs b/crates/console/prometeu-vm/src/virtual_machine.rs index 2cce3b97..e2eb24b0 100644 --- a/crates/console/prometeu-vm/src/virtual_machine.rs +++ b/crates/console/prometeu-vm/src/virtual_machine.rs @@ -114,6 +114,12 @@ pub struct GateEntry { pub type_id: u32, } +impl Default for VirtualMachine { + fn default() -> Self { + Self::new(vec![], vec![]) + } +} + impl VirtualMachine { /// Creates a new VM instance with the provided bytecode and constants. pub fn new(rom: Vec, constant_pool: Vec) -> Self { @@ -242,15 +248,6 @@ impl VirtualMachine { }); } -} - -impl Default for VirtualMachine { - fn default() -> Self { - Self::new(vec![], vec![]) - } -} - -impl VirtualMachine { /// Executes the VM for a limited number of cycles (budget). /// /// This is the heart of the deterministic execution model. Instead of running @@ -359,10 +356,6 @@ impl VirtualMachine { /// 2. Decode: Identify what operation to perform. /// 3. Execute: Perform the operation, updating stacks, memory, or calling peripherals. pub fn step(&mut self, native: &mut dyn NativeInterface, ctx: &mut HostContext) -> Result<(), LogicalFrameEndingReason> { - self.step_impl(native, ctx) - } - - fn step_impl(&mut self, native: &mut dyn NativeInterface, ctx: &mut HostContext) -> Result<(), LogicalFrameEndingReason> { if self.halted || self.pc >= self.program.rom.len() { return Ok(()); } diff --git a/crates/host/prometeu-host-desktop-winit/Cargo.toml b/crates/host/prometeu-host-desktop-winit/Cargo.toml index 8d901f89..4b7f0afb 100644 --- a/crates/host/prometeu-host-desktop-winit/Cargo.toml +++ b/crates/host/prometeu-host-desktop-winit/Cargo.toml @@ -14,7 +14,6 @@ dist = true include = ["../../VERSION.txt"] [dependencies] -prometeu-core = { path = "../../compiler/prometeu-core" } prometeu-firmware = { path = "../../console/prometeu-firmware" } prometeu-system = { path = "../../console/prometeu-system" } prometeu-drivers = { path = "../../console/prometeu-drivers" } diff --git a/crates/tools/prometeu-cli/Cargo.toml b/crates/tools/prometeu-cli/Cargo.toml index cdb351d7..29aef0bc 100644 --- a/crates/tools/prometeu-cli/Cargo.toml +++ b/crates/tools/prometeu-cli/Cargo.toml @@ -13,10 +13,6 @@ path = "src/main.rs" name = "prometeu-runtime" path = "src/bin/prometeu-runtime.rs" -[[bin]] -name = "prometeuc" -path = "src/bin/prometeuc.rs" - [package.metadata.dist] dist = true include = [ @@ -27,5 +23,4 @@ include = [ [dependencies] clap = { version = "4.5", features = ["derive"] } prometeu-host-desktop-winit = { path = "../../host/prometeu-host-desktop-winit" } -prometeu-build-pipeline = { path = "../../compiler/prometeu-build-pipeline" } anyhow = "1.0.100" diff --git a/crates/tools/prometeu-cli/src/bin/prometeuc.rs b/crates/tools/prometeu-cli/src/bin/prometeuc.rs deleted file mode 100644 index 8ee05386..00000000 --- a/crates/tools/prometeu-cli/src/bin/prometeuc.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() -> anyhow::Result<()> { prometeu_build_pipeline::run() } diff --git a/crates/tools/prometeu-lsp/Cargo.toml b/crates/tools/prometeu-lsp/Cargo.toml deleted file mode 100644 index 39165052..00000000 --- a/crates/tools/prometeu-lsp/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "prometeu-lsp" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -tower-lsp = "0.20" -tokio = { version = "1", features = ["full"] } -tokio-util = { version = "0.7" } -prometeu-core = { path = "../../compiler/prometeu-core" } -prometeu-build-pipeline = { path = "../../compiler/prometeu-build-pipeline" } diff --git a/crates/tools/prometeu-lsp/src/analysis_db.rs b/crates/tools/prometeu-lsp/src/analysis_db.rs deleted file mode 100644 index 283ac4ad..00000000 --- a/crates/tools/prometeu-lsp/src/analysis_db.rs +++ /dev/null @@ -1,51 +0,0 @@ -// use std::sync::Arc; -// use tokio::sync::RwLock; -// use tokio_util::sync::CancellationToken; -// -// use std::collections::HashMap; -// use prometeu_core::{FileDB, FileId, ProjectId}; -// use crate::rebuild::LspDiagnostic; -// use crate::rebuild::FlatSymbol; -// -// #[derive(Default)] -// pub struct AnalysisDb { -// pub file_db: FileDB, -// pub file_to_project: HashMap, -// -// // Os campos abaixo serão conectados conforme PR-03/04/05 (podem começar como None) -// // pub ast: Option, -// // pub symbols: Option, -// // pub types: Option, -// // pub diagnostics: Vec, -// -// /// Incrementa a cada rebuild concluído com sucesso -// pub revision: u64, -// -// /// Cancel token do último rebuild em progresso (se houver) -// pub active_rebuild: Option, -// -// /// Último snapshot bom (consultado pelos handlers LSP) -// pub last_good: Option, -// } -// -// pub type SharedDb = Arc>; -// -// impl AnalysisDb { -// pub fn project_for_file(&self, file: FileId) -> Option { -// self.file_to_project.get(&file).copied() -// } -// -// /// Returns all known file ids in the FileDB. -// pub fn file_ids(&self) -> Vec { -// // delegate to FileDB helper (added in prometeu-analysis) -// self.file_db.all_files() -// } -// } -// -// #[derive(Default, Clone)] -// pub struct AnalysisSnapshot { -// /// Diagnostics por arquivo (URI LSP → diagnostics já convertidos) -// pub diagnostics_by_uri: HashMap>, -// /// Lista “flatten” de símbolos para workspaceSymbol/documentSymbol -// pub symbols_flat: Vec, -// } diff --git a/crates/tools/prometeu-lsp/src/main.rs b/crates/tools/prometeu-lsp/src/main.rs deleted file mode 100644 index f3e34eae..00000000 --- a/crates/tools/prometeu-lsp/src/main.rs +++ /dev/null @@ -1,190 +0,0 @@ -// use std::sync::Arc; -// use tokio::sync::RwLock; -// use tower_lsp::{Client, LspService, Server}; -// use tower_lsp::lsp_types as lsp; -// -// mod analysis_db; -// mod rebuild; - -// struct Backend { -// db: SharedDb, -// client: Client, -// } - -// #[tower_lsp::async_trait] -// impl tower_lsp::LanguageServer for Backend { -// async fn initialize( -// &self, -// _: tower_lsp::lsp_types::InitializeParams, -// ) -> tower_lsp::jsonrpc::Result { -// Ok(tower_lsp::lsp_types::InitializeResult { -// capabilities: tower_lsp::lsp_types::ServerCapabilities { -// text_document_sync: Some( -// tower_lsp::lsp_types::TextDocumentSyncCapability::Kind( -// tower_lsp::lsp_types::TextDocumentSyncKind::FULL, -// ), -// ), -// // MVP capabilities only (PR-08): -// definition_provider: Some(tower_lsp::lsp_types::OneOf::Left(true)), -// document_symbol_provider: Some(tower_lsp::lsp_types::OneOf::Left(true)), -// // workspace_symbol is not available in tower-lsp 0.20 trait -// ..Default::default() -// }, -// ..Default::default() -// }) -// } -// -// async fn initialized(&self, _: tower_lsp::lsp_types::InitializedParams) {} -// -// async fn shutdown(&self) -> tower_lsp::jsonrpc::Result<()> { -// Ok(()) -// } -// -// // didOpen: upsert texto, solicita rebuild -// async fn did_open(&self, params: tower_lsp::lsp_types::DidOpenTextDocumentParams) { -// let uri = params.text_document.uri.to_string(); -// let text = params.text_document.text; -// { -// let mut guard = self.db.write().await; -// guard.file_db.upsert(&uri, text); -// } -// rebuild::request_rebuild(self.db.clone(), self.client.clone()).await; -// } -// -// // didChange (FULL): receber conteúdo completo e upsert -// async fn did_change(&self, params: tower_lsp::lsp_types::DidChangeTextDocumentParams) { -// let uri = params.text_document.uri.to_string(); -// // Full-sync: esperamos 1 conteúdo completo -// if let Some(change) = params.content_changes.into_iter().last() { -// let text = change.text; -// let mut guard = self.db.write().await; -// guard.file_db.upsert(&uri, text); -// } -// rebuild::request_rebuild(self.db.clone(), self.client.clone()).await; -// } -// -// // didClose: opcionalmente remover do db e limpar diagnostics -// async fn did_close(&self, params: tower_lsp::lsp_types::DidCloseTextDocumentParams) { -// let uri = params.text_document.uri; -// // Estratégia simples: manter FileDB para estabilidade de IDs, mas limpar diagnostics -// let _ = self -// .client -// .publish_diagnostics(uri.clone(), vec![], Some(0)) -// .await; -// } -// -// async fn goto_definition( -// &self, -// params: tower_lsp::lsp_types::GotoDefinitionParams, -// ) -> tower_lsp::jsonrpc::Result> { -// let tdp = params.text_document_position_params; -// let uri = tdp.text_document.uri; -// let pos = tdp.position; -// -// let guard = self.db.read().await; -// // Map URI to current text and index -// let Some(fid) = guard.file_db.file_id(uri.as_str()) else { return Ok(None) }; -// let text = guard.file_db.text(fid).to_string(); -// let idx = prometeu_analysis::TextIndex::new(&text); -// let byte = idx.lsp_to_byte(pos.line, pos.character); -// let ident = ident_at(&text, byte); -// -// if let Some(name) = ident { -// if let Some(snap) = &guard.last_good { -// let mut hits: Vec = Vec::new(); -// for s in &snap.symbols_flat { -// if s.name == name { -// hits.push(s.location.clone()); -// } -// } -// if !hits.is_empty() { -// return Ok(Some(lsp::GotoDefinitionResponse::Array(hits))); -// } -// } -// } -// Ok(None) -// } -// -// -// // MVP stubs: documentSymbol/workspaceSymbol/definition retornam vazio até PRs seguintes -// async fn document_symbol( -// &self, -// params: tower_lsp::lsp_types::DocumentSymbolParams, -// ) -> tower_lsp::jsonrpc::Result> { -// let uri = params.text_document.uri; -// let guard = self.db.read().await; -// if let Some(snap) = &guard.last_good { -// let mut items: Vec = Vec::new(); -// for s in &snap.symbols_flat { -// if s.location.uri == uri { -// items.push(lsp::SymbolInformation { -// name: s.name.clone(), -// kind: s.kind, -// location: s.location.clone(), -// tags: None, -// deprecated: None, -// container_name: None, -// }); -// } -// } -// return Ok(Some(lsp::DocumentSymbolResponse::Flat(items))); -// } -// Ok(Some(lsp::DocumentSymbolResponse::Flat(vec![]))) -// } -// -// // async fn workspace_symbol( -// // &self, -// // params: lsp::WorkspaceSymbolParams, -// // ) -> tower_lsp::jsonrpc::Result>> { -// // let query = params.query.to_lowercase(); -// // let guard = self.db.read().await; -// // if let Some(snap) = &guard.last_good { -// // let mut out: Vec = Vec::new(); -// // for s in &snap.symbols_flat { -// // if s.name.to_lowercase().contains(&query) { -// // out.push(lsp::SymbolInformation { -// // name: s.name.clone(), -// // kind: s.kind, -// // location: s.location.clone(), -// // tags: None, -// // deprecated: None, -// // container_name: None, -// // }); -// // if out.len() >= 50 { break; } -// // } -// // } -// // return Ok(Some(out)); -// // } -// // Ok(Some(vec![])) -// // } -// } - -#[tokio::main] -async fn main() { - // let stdin = tokio::io::stdin(); - // let stdout = tokio::io::stdout(); - // - // let db: SharedDb = Arc::new(RwLock::new(analysis_db::sourceDb::default())); - // - // let (service, socket) = LspService::new(|client| Backend { db: db.clone(), client }); - // Server::new(stdin, stdout, socket).serve(service).await; -} - -// // Simple textual identifier extraction for MVP definition lookup. -// fn ident_at(text: &str, byte: u32) -> Option { -// let b = byte as usize; -// if b > text.len() { return None; } -// // Expand left and right over identifier characters (ASCII + underscore; acceptable MVP) -// let bytes = text.as_bytes(); -// let mut start = b; -// while start > 0 { -// let c = bytes[start - 1]; -// if (c as char).is_ascii_alphanumeric() || c == b'_' { start -= 1; } else { break; } -// } -// let mut end = b; -// while end < bytes.len() { -// let c = bytes[end]; -// if (c as char).is_ascii_alphanumeric() || c == b'_' { end += 1; } else { break; } -// } -// if start < end { Some(text[start..end].to_string()) } else { None } -// } diff --git a/crates/tools/prometeu-lsp/src/rebuild.rs b/crates/tools/prometeu-lsp/src/rebuild.rs deleted file mode 100644 index a24fd735..00000000 --- a/crates/tools/prometeu-lsp/src/rebuild.rs +++ /dev/null @@ -1,147 +0,0 @@ -// use tokio_util::sync::CancellationToken; -// use tower_lsp::Client; -// -// use crate::source_db::{AnalysisSnapshot, SharedDb}; -// use tower_lsp::lsp_types as lsp; -// use prometeu_core::{FileId, NameInterner, Severity, SymbolKind, TextIndex}; -// -// #[derive(Clone, Debug)] -// pub struct LspDiagnostic { -// pub range: lsp::Range, -// pub severity: Option, -// pub code: Option, -// pub message: String, -// } -// -// #[derive(Clone, Debug)] -// pub struct FlatSymbol { -// pub name: String, -// pub kind: lsp::SymbolKind, -// pub location: lsp::Location, -// } -// -// /// Requests a project rebuild (coarse). Cancels the previous rebuild if in progress. -// pub async fn request_rebuild(db: SharedDb, client: Client) { -// // 1) short lock: cancel previous token and install a new one -// let new_token = CancellationToken::new(); -// { -// let mut guard = db.write().await; -// if let Some(prev) = guard.active_rebuild.take() { -// prev.cancel(); -// } -// guard.active_rebuild = Some(new_token.clone()); -// } -// -// // 2) spawn task: run analysis outside the lock -// tokio::spawn(async move { -// // Safe point: check before starting -// if new_token.is_cancelled() { return; } -// -// // Clone snapshot of files (URIs and texts) under a short read lock -// let (files, revision) = { -// let guard = db.read().await; -// let mut v = Vec::new(); -// for fid in guard.file_ids() { -// let uri = guard.file_db.uri(fid).to_string(); -// let text = guard.file_db.text(fid).to_string(); -// v.push((fid, uri, text)); -// } -// (v, guard.revision) -// }; -// -// // Prepare accumulators -// let mut diagnostics_by_uri: std::collections::HashMap> = std::collections::HashMap::new(); -// let mut symbols_flat: Vec = Vec::new(); -// -// // For each file: run a minimal frontend to collect diagnostics and top-level symbols -// for (fid, uri, text) in files.into_iter() { -// if new_token.is_cancelled() { return; } -// let text_index = TextIndex::new(&text); -// -// // Parser + basic pipeline -// let mut interner = NameInterner::new(); -// let mut parser = ParserFacade::new(&text, fid, &mut interner); -// match parser.parse_and_collect() { -// Ok(parsed) => { -// // Diagnostics (from parse/collect are already inside parsed.diags) -// let mut file_diags = Vec::new(); -// for d in parsed.diagnostics { -// let range = span_to_range(fid, &text_index, d.span.start, d.span.end); -// file_diags.push(LspDiagnostic { -// range, -// severity: Some(match d.severity { Severity::Error => lsp::DiagnosticSeverity::ERROR, Severity::Warning => lsp::DiagnosticSeverity::WARNING }), -// code: Some(lsp::NumberOrString::String(d.code)), -// message: d.message, -// }); -// } -// diagnostics_by_uri.insert(uri.clone(), file_diags); -// -// // Symbols: flatten only top-level decls with their decl_span -// for sym in parsed.symbols { -// let lsp_loc = lsp::Location { -// uri: uri.parse().unwrap_or_else(|_| lsp::Url::parse("untitled:").unwrap()), -// range: span_to_range(fid, &text_index, sym.decl_span.start, sym.decl_span.end), -// }; -// let kind = match sym.kind { -// SymbolKind::Function => lsp::SymbolKind::FUNCTION, -// SymbolKind::Service => lsp::SymbolKind::INTERFACE, -// SymbolKind::Struct => lsp::SymbolKind::STRUCT, -// SymbolKind::Contract => lsp::SymbolKind::CLASS, -// SymbolKind::ErrorType => lsp::SymbolKind::ENUM, -// _ => lsp::SymbolKind::VARIABLE, -// }; -// symbols_flat.push(FlatSymbol { name: sym.name, kind, location: lsp_loc }); -// } -// } -// Err(diags) => { -// // Parser returned errors only; publish them -// let mut file_diags = Vec::new(); -// for d in diags { -// let range = span_to_range(fid, &text_index, d.span.start, d.span.end); -// file_diags.push(LspDiagnostic { -// range, -// severity: Some(match d.severity { Severity::Error => lsp::DiagnosticSeverity::ERROR, Severity::Warning => lsp::DiagnosticSeverity::WARNING }), -// code: Some(lsp::NumberOrString::String(d.code)), -// message: d.message, -// }); -// } -// diagnostics_by_uri.insert(uri.clone(), file_diags); -// } -// } -// } -// -// if new_token.is_cancelled() { return; } -// -// // 3) short lock: swap state + revision++ if not cancelled; then publish diagnostics -// let snapshot = AnalysisSnapshot { diagnostics_by_uri: diagnostics_by_uri.clone(), symbols_flat }; -// { -// let mut guard = db.write().await; -// if new_token.is_cancelled() { return; } -// // if no new changes since we started, accept this snapshot -// guard.last_good = Some(snapshot); -// guard.revision = revision.saturating_add(1); -// } -// -// // Publish diagnostics per file -// for (uri, diags) in diagnostics_by_uri.into_iter() { -// let lsp_diags: Vec = diags.into_iter().map(|d| lsp::Diagnostic { -// range: d.range, -// severity: d.severity, -// code: d.code, -// message: d.message, -// ..Default::default() -// }).collect(); -// let _ = client.publish_diagnostics(uri.parse().unwrap_or_else(|_| lsp::Url::parse("untitled:").unwrap()), lsp_diags, None).await; -// } -// }); -// } -// -// fn span_to_range(file: FileId, idx: &TextIndex, start: u32, end: u32) -> lsp::Range { -// // Ignore `file` here since idx is built from that file's text -// let (s_line, s_col) = idx.byte_to_lsp(start); -// let (e_line, e_col) = idx.byte_to_lsp(end); -// lsp::Range { -// start: lsp::Position { line: s_line, character: s_col }, -// end: lsp::Position { line: e_line, character: e_col }, -// } -// } diff --git a/docs/specs/hardware/topics/chapter-15.md b/docs/specs/hardware/topics/chapter-15.md index 5f41fc3b..53e950e1 100644 --- a/docs/specs/hardware/topics/chapter-15.md +++ b/docs/specs/hardware/topics/chapter-15.md @@ -1,4 +1,4 @@ -< [Back](chapter-14.md) | [Summary](table-of-contents.md) > +< [Back](chapter-14.md) | [Summary](table-of-contents.md) | [Next](chapter-16.md) > # Asset Management @@ -328,4 +328,4 @@ Where: > **Asset Types describe content.** > **The SDK orchestrates; the hardware executes.** -< [Back](chapter-14.md) | [Summary](table-of-contents.md) > \ No newline at end of file +< [Back](chapter-14.md) | [Summary](table-of-contents.md) | [Next](chapter-16.md) > \ No newline at end of file diff --git a/docs/specs/hardware/topics/chapter-16.md b/docs/specs/hardware/topics/chapter-16.md new file mode 100644 index 00000000..e321e619 --- /dev/null +++ b/docs/specs/hardware/topics/chapter-16.md @@ -0,0 +1,294 @@ +< [Back](chapter-15.md) | [Summary](table-of-contents.md) > + +# **Host ABI and Syscalls** + +This chapter defines the Application Binary Interface (ABI) between the Prometeu Virtual Machine (PVM) and the host environment. It specifies how syscalls are encoded, invoked, verified, and accounted for. + +Syscalls provide controlled access to host-managed subsystems such as graphics, audio, input, asset banks, and persistent storage. + +This chapter defines the **contract**. Individual subsystems (GFX, AUDIO, MEMCARD, ASSETS, etc.) define their own syscall tables that conform to this ABI. + +--- + +## 1 Design Principles + +The syscall system follows these rules: + +1. **Deterministic**: Syscalls must behave deterministically for the same inputs and frame state. +2. **Synchronous**: Syscalls execute to completion within the current VM slice. +3. **Non-blocking**: Long operations must be modeled as request + status polling. +4. **Capability-gated**: Each syscall requires a declared capability. +5. **Stack-based ABI**: Arguments and return values are passed via VM slots. +6. **Not first-class**: Syscalls are callable but cannot be stored as values. + +--- + +## 2 Syscall Instruction Semantics + +The VM provides a single instruction: + +``` +SYSCALL +``` + +Where: + +* `` is a 32-bit integer identifying the syscall. + +Execution steps: + +1. The VM looks up the syscall metadata using ``. +2. The VM verifies that enough arguments exist on the stack. +3. The VM checks capability requirements. +4. The syscall executes in the host environment. +5. The syscall leaves exactly `ret_slots` values on the stack. + +If any contract rule is violated, the VM traps. + +--- + +## 3 Syscall Metadata Table + +Each syscall is defined by a metadata entry. + +### SyscallMeta structure + +``` +SyscallMeta { + id: u32 + name: string + arg_slots: u8 + ret_slots: u8 + capability: CapabilityId + may_allocate: bool + cost_hint: u32 +} +``` + +Fields: + +| Field | Description | +| -------------- | ------------------------------------------------ | +| `id` | Unique syscall identifier | +| `name` | Human-readable name | +| `arg_slots` | Number of input stack slots | +| `ret_slots` | Number of return stack slots | +| `capability` | Required capability | +| `may_allocate` | Whether the syscall may allocate VM heap objects | +| `cost_hint` | Expected cycle cost (for analysis/profiling) | + +The verifier uses this table to validate stack effects. + +--- + +## 4 Arguments and Return Values + +Syscalls use the same slot-based ABI as functions. + +### Argument passing + +Arguments are pushed onto the stack before the syscall. + +Example: + +``` +push a +push b +SYSCALL X // expects 2 arguments +``` + +### Return values + +After execution, the syscall leaves exactly `ret_slots` values on the stack. + +Example: + +``` +// before: [] +SYSCALL input_state +// after: [held, pressed, released] +``` + +### Slot types + +Each slot contains one of the VM value types: + +* int +* bool +* float +* handle +* null + +Composite return values are represented as multiple slots (stack tuples). + +--- + +## 5 Syscalls as Callable Entities (Not First-Class) + +Syscalls behave like functions in terms of arguments and return values, but they are **not first-class values**. + +This means: + +* Syscalls can be invoked. +* Syscalls cannot be stored in variables. +* Syscalls cannot be passed as arguments. +* Syscalls cannot be returned from functions. + +Only user-defined functions and closures are first-class. + +### Example declaration (conceptual) + +``` +host fn input_state() -> (int, int, int) +``` + +This represents a syscall with three return values, but it cannot be treated as a function value. + +--- + +## 6 Error Model: Traps vs Status Codes + +Syscalls use a hybrid error model. + +### Trap conditions (contract violations) + +The VM traps when: + +* The syscall id is invalid. +* The required capability is missing. +* The stack does not contain enough arguments. +* A handle is invalid or dead. + +These are considered fatal contract violations. + +### Status returns (domain conditions) + +Normal operational states are returned as values. + +Examples: + +* asset not yet loaded +* audio voice unavailable +* memcard full + +These are represented by status codes in return slots. + +--- + +## 7 Capability System + +Each syscall requires a capability. + +Capabilities are declared by the cartridge manifest. + +Example capability groups: + +* `gfx` +* `audio` +* `input` +* `asset` +* `memcard` + +If a syscall is invoked without the required capability: + +* The VM traps. + +--- + +## 8 Interaction with the Garbage Collector + +The VM heap is managed by the GC. Host-managed memory is separate. + +### Heap vs host memory + +| Memory | Managed by | GC scanned | +| --------------- | ---------- | ---------- | +| VM heap objects | VM GC | Yes | +| Asset banks | Host | No | +| Audio buffers | Host | No | +| Framebuffers | Host | No | + +Assets are addressed by identifiers, not VM heap handles. + +### Host root rule + +If a syscall stores a handle to a VM heap object beyond the duration of the call, it must register that handle as a **host root**. + +This prevents the GC from collecting objects still in use by the host. + +This rule applies only to VM heap objects (such as closures or user objects), not to asset identifiers or primitive values. + +--- + +## 9 Determinism Rules + +Syscalls must obey deterministic execution rules. + +Forbidden behaviors: + +* reading real-time clocks +* accessing non-deterministic OS APIs +* performing blocking I/O + +Allowed patterns: + +* frame-based timers +* request + poll status models +* event delivery at frame boundaries + +--- + +## 10 Cost Model and Budgeting + +Each syscall contributes to frame cost. + +The VM tracks: + +* cycles spent in syscalls +* syscall counts +* allocation cost (if any) + +Example telemetry: + +``` +Frame 10231: +Syscalls: 12 +Cycles (syscalls): 380 +Allocations via syscalls: 2 +``` + +Nothing is free. + +--- + +## 11 Blocking and Long Operations + +Syscalls must not block. + +Long operations must use a two-phase model: + +1. Request +2. Status polling or event notification + +Example pattern: + +``` +asset.load(id) +... +status, progress = asset.status(id) +``` + +--- + +## 12 Summary + +* Syscalls are deterministic, synchronous, and non-blocking. +* They use the same slot-based ABI as functions. +* They are callable but not first-class. +* Capabilities control access to host subsystems. +* GC only manages VM heap objects. +* Host-held heap objects must be registered as roots. +* All syscall costs are tracked per frame. + + +< [Back](chapter-15.md) | [Summary](table-of-contents.md) > \ No newline at end of file diff --git a/docs/specs/hardware/topics/chapter-2.md b/docs/specs/hardware/topics/chapter-2.md index 48ef1ecd..5be38fe2 100644 --- a/docs/specs/hardware/topics/chapter-2.md +++ b/docs/specs/hardware/topics/chapter-2.md @@ -1,457 +1,427 @@ < [Back](chapter-1.md) | [Summary](table-of-contents.md) | [Next](chapter-3.md) > -# ⚙️ ** PVM (PROMETEU VM) — Instruction Set** +# **Prometeu Virtual Machine (PVM)** -## 1. Overview +This chapter defines the execution model, value system, calling convention, memory model, and host interface of the Prometeu Virtual Machine. -The **PROMETEU VM** is a mandatory virtual machine always present in the logical hardware: +The PVM is a **deterministic, stack-based VM** designed for a 2D fantasy console environment. Its primary goal is to provide predictable performance, safe memory access, and a stable execution contract suitable for real-time games running at a fixed frame rate. fileciteturn2file0 -* **stack-based** +--- + +## 1 Core Design Principles + +The PVM is designed around the following constraints: + +1. **Deterministic execution**: no hidden threads or asynchronous callbacks. +2. **Frame-based timing**: execution is bounded by frame time. +3. **Safe memory model**: all heap objects are accessed through handles. +4. **Simple compilation target**: stack-based bytecode with verified control flow. +5. **Stable ABI**: multi-value returns with fixed slot semantics. +6. **First-class functions**: functions can be passed, stored, and returned. + +--- + +## 2 Execution Model + +The PVM executes bytecode in a **frame loop**. Each frame: + +1. The firmware enters the VM. +2. The VM runs until: + + * the frame budget is consumed, or + * a `FRAME_SYNC` instruction is reached. +3. At `FRAME_SYNC`: + + * events are delivered + * input is sampled + * optional GC may run +4. Control returns to the firmware. + +`FRAME_SYNC` is the **primary safepoint** in the system. + +--- + +## 3 Value Types + +All runtime values are stored in VM slots as a `Value`. + +### Primitive value types (stack values) + +| Type | Description | +| ------- | --------------------- | +| `int` | 64-bit signed integer | +| `bool` | Boolean value | +| `float` | 64-bit floating point | + +### Built-in vector and graphics types (stack values) + +These are treated as VM primitives with dedicated opcodes: + +| Type | Description | +| ------- | --------------------------------- | +| `vec2` | 2D vector (x, y) | +| `color` | Packed color value | +| `pixel` | Combination of position and color | + +These types: + +* live entirely on the stack +* are copied by value +* never allocate on the heap + +### Heap values + +All user-defined objects live on the heap and are accessed via **handles**. + +| Type | Description | +| -------- | -------------------------- | +| `handle` | Reference to a heap object | +| `null` | Null handle | + +Handles may refer to: + +* user objects +* arrays +* strings +* closures + +--- + +## 4 Handles and Gate Table + +Heap objects are accessed through **handles**. A handle is a pair: + +``` +handle = { index, generation } +``` + +The VM maintains a **gate table**: + +``` +GateEntry { + alive: bool + generation: u32 + base: usize + slots: u32 + type_id: u32 +} +``` + +When an object is freed: + +* its gate entry is marked dead +* its generation is incremented + +If a handle’s generation does not match the gate entry, the VM traps. + +This prevents use-after-free bugs. + +--- + +## 5 Heap Model + +* All user objects live in the heap. +* Objects are fixed-layout blocks of slots. +* No inheritance at the memory level. +* Traits/interfaces are resolved by the compiler or via vtables. + +Built-in types remain stack-only. + +Heap objects include: + +* user structs/classes +* strings +* arrays +* closures + +--- + +## 6 Tuples and Multi-Return ABI + +The PVM supports **multi-value returns**. + +### Tuple rules + +* Tuples are **stack-only**. +* Maximum tuple arity is **N = 6**. +* Tuples are not heap objects by default. +* To persist a tuple, it must be explicitly boxed. + +### Call convention + +Each function declares a fixed `ret_slots` value. + +At call time: + +1. Caller prepares arguments. +2. `CALL` transfers control. +3. Callee executes. +4. `RET` leaves exactly `ret_slots` values on the stack. + +The verifier ensures that: + +* all control paths produce the same `ret_slots` +* stack depth is consistent. + +--- + +## 7 Call Stack and Frames + +The VM uses a **call stack**. + +Each frame contains: + +``` +Frame { + return_pc + base_pointer + ret_slots +} +``` + +Execution uses only the following call instructions: + +| Opcode | Description | +| ------ | ---------------------- | +| `CALL` | Calls a function by id | +| `RET` | Returns from function | + +There is no separate `PUSH_FRAME` or `POP_FRAME` instruction in the public ISA. + +--- + +## 8 Closures and First-Class Functions + +Closures are heap objects and represent **function values**. + +The PVM treats functions as **first-class values**. This means: + +* Functions can be stored in variables. +* Functions can be passed as arguments. +* Functions can be returned from other functions. +* All function values are represented as closures. + +Even functions without captures are represented as closures with an empty capture set. + +### Closure layout + +``` +Closure { + func_id + captures[] +} +``` + +Captures are stored as handles or value copies. + +All closure environments are part of the GC root set. + +### Direct and indirect calls + +The PVM supports two forms of function invocation: + +| Opcode | Description | +| -------------- | -------------------------------------- | +| `CALL` | Direct call by function id | +| `CALL_CLOSURE` | Indirect call through a closure handle | + +For `CALL_CLOSURE`: + +1. The closure handle is read from the stack. +2. The VM extracts the `func_id` from the closure. +3. The function is invoked using the closure’s captures as its environment. + +The verifier ensures that: + +* The closure handle is valid. +* The target function’s arity matches the call site. +* The `ret_slots` contract is respected. + +--- + +## 9 Coroutines (Deterministic) + +The PVM supports **cooperative coroutines**. + +Characteristics: + +* Coroutines are scheduled deterministically. +* No preemption. +* No parallel execution. +* All scheduling happens at safepoints. + +Each coroutine contains: + +``` +Coroutine { + call_stack + operand_stack + state +} +``` + +### Coroutine instructions + +| Opcode | Description | +| ------- | -------------------------- | +| `SPAWN` | Creates a coroutine | +| `YIELD` | Suspends current coroutine | +| `SLEEP` | Suspends for N frames | + +Scheduling is: + +* round-robin * deterministic -* cycle-oriented -* designed for teaching and inspection +* bounded by frame budget -It exists to: - -* map high-level language concepts -* make computational cost visible -* allow execution analysis -* serve as the foundation of the PROMETEU cartridge - -> The PROMETEU VM is simple by choice. -> Simplicity is a pedagogical tool. +Coroutine stacks are part of the GC root set. --- -## 2. Execution Model +## 10 Garbage Collection -### 2.1 Main Components +The PVM uses a **mark-sweep collector**. -The VM has: +### GC rules -* **PC (Program Counter)** — next instruction -* **Operand Stack** — value stack -* **Call Stack** — stores execution frames for function calls -* **Scope Stack** — stores frames for blocks within a function -* **Heap** — dynamic memory -* **Globals** — global variables -* **Constant Pool** — literals and references -* **ROM** — cartridge bytecode -* **RAM** — mutable data +* GC runs only at **safepoints**. +* The primary safepoint is `FRAME_SYNC`. +* GC is triggered by: + + * heap thresholds, or + * allocation pressure. + +### Root set + +The GC marks from: + +* operand stack +* call stack frames +* global variables +* coroutine stacks +* closure environments +* host-held handles + +The collector: + +* does not compact memory (v1) +* uses free lists for reuse --- -### 2.2 Execution Cycle +## 11 Event and Interrupt Model -Each instruction executes: +The PVM does not allow asynchronous callbacks. -``` -FETCH → DECODE → EXECUTE → ADVANCE PC -``` +All events are: -Properties: +* queued by the firmware +* delivered at `FRAME_SYNC` -* every instruction has a fixed cost in cycles -* there is no invisible implicit work -* execution is fully deterministic +This ensures: ---- - -## 3. Fundamental Types - -| Type | Description | -| --------- | ------------------------- | -| `int32` | 32-bit signed integer | -| `int64` | 64-bit signed integer | -| `float` | 64-bit floating point | -| `boolean` | true/false | -| `string` | immutable UTF-8 | -| `null` | absence of value | -| `ref` | heap reference | - -### 3.1 Numeric Promotion -The VM promotes types automatically during operations: -* `int32` + `int32` → `int32` -* `int32` + `int64` → `int64` -* `int` + `float` → `float` -* Bitwise operations promote `int32` to `int64` if any operand is `int64`. - -Do not exist: - -* magic coercions -* implicit casts -* silent overflows - ---- - -## 4. Stack Conventions & Calling ABI - -* Operations use the top of the stack. -* Results always return to the stack. -* **LIFO Order:** Last pushed = first consumed. -* **Mandatory Return:** Every function (`Call`) and `Syscall` MUST leave exactly **one** value on the stack upon completion. If there is no meaningful value to return, `Null` must be pushed. - -### 4.1 Calling Convention (Call / Ret) - -1. **Arguments:** The caller pushes arguments in order (arg0, arg1, ..., argN-1). -2. **Execution:** The `Call` instruction specifies `args_count`. These `N` values become the **locals** of the new frame (local 0 = arg0, local 1 = arg1, etc.). -3. **Return Value:** Before executing `Ret`, the callee MUST push its return value. -4. **Cleanup:** The `Ret` instruction is responsible for: - - Popping the return value. - - Removing all locals (the arguments) from the operand stack. - - Re-pushing the return value. - - Restoring the previous frame and PC. - -### 4.2 Syscall Convention - -1. **Arguments:** The caller pushes arguments in order. -2. **Execution:** The native implementation pops arguments as needed. Since it's a stack, it will pop them in reverse order (argN-1 first, then argN-2, ..., arg0). -3. **Return Value:** The native implementation MUST push exactly one value onto the stack before returning to the VM. -4. **Cleanup:** The native implementation is responsible for popping all arguments it expects. - -Example: - -``` -PUSH_CONST 3 -PUSH_CONST 4 -ADD -``` - -State: - -``` -[3] -[3, 4] -[7] -``` - ---- - -## 5. Instruction Categories - -1. Flow control -2. Stack -3. Arithmetic and logic -4. Variables -5. Functions -6. Heap and structures -7. Peripherals (syscalls) -8. System - ---- - -## 6. Instructions — VM Set 1 - -### 6.1 Execution Control - -| Instruction | Cycles | Description | -| ------------------- | ------ | ------------------------- | -| `NOP` | 1 | Does nothing | -| `HALT` | 1 | Terminates execution | -| `JMP addr` | 2 | Unconditional jump | -| `JMP_IF_FALSE addr` | 3 | Jumps if top is false | -| `JMP_IF_TRUE addr` | 3 | Jumps if top is true | - ---- - -### 6.2 Stack - -| Instruction | Cycles | Description | -| -------------- | ------ | ------------------- | -| `PUSH_CONST k` | 2 | Pushes constant | -| `POP` | 1 | Removes top | -| `DUP` | 1 | Duplicates top | -| `SWAP` | 1 | Swaps two tops | -| `PUSH_I32 v` | 2 | Pushes 32-bit int | -| `PUSH_I64 v` | 2 | Pushes 64-bit int | -| `PUSH_F64 v` | 2 | Pushes 64-bit float | -| `PUSH_BOOL v` | 2 | Pushes boolean | - ---- - -### 6.3 Arithmetic - -| Instruction | Cycles | -| ----------- | ------ | -| `ADD` | 2 | -| `SUB` | 2 | -| `MUL` | 4 | -| `DIV` | 6 | - ---- - -### 6.4 Comparison and Logic - -| Instruction | Cycles | -| ----------- | ------ | -| `EQ` | 2 | -| `NEQ` | 2 | -| `LT` | 2 | -| `GT` | 2 | -| `LTE` | 2 | -| `GTE` | 2 | -| `AND` | 2 | -| `OR` | 2 | -| `NOT` | 1 | -| `BIT_AND` | 2 | -| `BIT_OR` | 2 | -| `BIT_XOR` | 2 | -| `SHL` | 2 | -| `SHR` | 2 | -| `NEG` | 1 | - ---- - -### 6.5 Variables - -| Instruction | Cycles | Description | -| -------------- | ------ | ---------------- | -| `GET_GLOBAL i` | 3 | Reads global | -| `SET_GLOBAL i` | 3 | Writes global | -| `GET_LOCAL i` | 2 | Reads local | -| `SET_LOCAL i` | 2 | Writes local | - ---- - -### 6.6 Functions - -| Instruction | Cycles | Description | -|----------------------| ------ |-----------------------------------------------| -| `CALL ` | 5 | Saves PC and creates a new call frame | -| `RET` | 4 | Returns from function, restoring PC | -| `PUSH_SCOPE` | 3 | Creates a scope within the current function | -| `POP_SCOPE` | 3 | Removes current scope and its local variables | - -**ABI Rules for Functions:** -* **`func_id`:** A 32-bit index into the **final FunctionTable**, assigned by the compiler linker at build time. -* **Mandatory Return Value:** Every function MUST leave exactly one value on the stack before `RET`. If the function logic doesn't return a value, it must push `null`. -* **Stack Cleanup:** `RET` automatically clears all local variables (based on `stack_base`) and re-pushes the return value. - ---- - -### 6.7 Heap - -| Instruction | Cycles | Description | -| --------------- | ------ | --------------- | -| `ALLOC size` | 10 | Allocates on heap | -| `LOAD_REF off` | 3 | Reads field | -| `STORE_REF off` | 3 | Writes field | - -Heap is: - -* finite -* monitored -* accounted for in the CAP - ---- - -### 6.8 Peripherals (Syscalls) - -| Instruction | Cycles | Description | -|--------------| -------- | --------------------- | -| `SYSCALL id` | variable | Call to hardware | - -**ABI Rules for Syscalls:** -* **Argument Order:** Arguments must be pushed in the order they appear in the call (LIFO stack behavior). - * Example: `gfx.draw_rect(x, y, w, h, color)` means: - 1. `PUSH x` - 2. `PUSH y` - 3. `PUSH w` - 4. `PUSH h` - 5. `PUSH color` - 6. `SYSCALL 0x1002` -* **Consumption:** The native function MUST pop all its arguments from the stack. -* **Return Value:** If the syscall returns a value, it will be pushed onto the stack by the native implementation. If not, the stack state for the caller remains as it was before pushing arguments. - -#### Implemented Syscalls (v0.1) - -| ID | Name | Arguments (Stack) | Return | -| ---------- | ----------------- | ---------------------------- | ------- | -| `0x0001` | `system.has_cart` | - | `bool` | -| `0x0002` | `system.run_cart` | - | - | -| `0x1001` | `gfx.clear` | `color_idx` | - | -| `0x1002` | `gfx.draw_rect` | `x, y, w, h, color_idx` | - | -| `0x1003` | `gfx.draw_line` | `x1, y1, x2, y2, color_idx` | - | -| `0x1004` | `gfx.draw_circle` | `xc, yc, r, color_idx` | - | -| `0x1005` | `gfx.draw_disc` | `xc, yc, r, b_col, f_col` | - | -| `0x1006` | `gfx.draw_square` | `x, y, w, h, b_col, f_col` | - | -| `0x2001` | `input.get_pad` | `button_id` | `bool` | -| `0x3001` | `audio.play` | `s_id, v_id, vol, pan, pitch`| - | - -**Button IDs:** -- `0`: Up, `1`: Down, `2`: Left, `3`: Right -- `4`: A, `5`: B, `6`: X, `7`: Y -- `8`: L, `9`: R -- `10`: Start, `11`: Select - ---- - -## 7. Execution Errors - -Errors are: - -* explicit -* fatal -* never silent - -Types: - -* stack underflow -* invalid type -* invalid heap -* invalid frame - -Generate: - -* clear message -* state dump -* stack trace - ---- - -## 8. Determinism - -Guarantees: - -* same input → same result -* same sequence → same cycles -* no speculative execution -* no invisible optimizations - -> If you see the instruction, you pay for it. - ---- - -## 9. Relationship with Languages - -Java, TypeScript, Lua etc: - -* are source languages -* compiled to this bytecode -* never executed directly - -All run on the **same VM**. - ---- - -## 10. Example - -Source: - -```java -x = 3 + 4; -``` - -Bytecode: - -``` -PUSH_CONST 3 -PUSH_CONST 4 -ADD -SET_GLOBAL 0 -``` - -Cost: - -``` -2 + 2 + 2 + 3 = 9 cycles -``` - ---- - -## 11. Execution per Tick - -The VM does not run infinitely. - -It executes: - -* until consuming the **logical frame** budget -* or until `HALT` - -The budget is defined by the PROMETEU logical hardware (e.g., `CYCLES_PER_FRAME`). - -Example: - -``` -vm.step_budget(10_000) -``` - -This feeds: - -* CAP -* profiling -* certification - ---- - -## 12. Logical Frame and `FRAME_SYNC` - -PROMETEU defines **logical frame** as the minimum unit of consistent game update. - -* **Input is latched per logical frame** (does not change until the logical frame is completed). -* The **cycle budget** is applied to the logical frame. -* A new logical frame only starts when the current frame ends. - -### 12.1 System Instruction: `FRAME_SYNC` - -The `FRAME_SYNC` instruction marks the **end of the logical frame**. - -| Instruction | Cycles | Description | -| ------------ | ------ | ---------------------------------- | -| `FRAME_SYNC` | 1 | Finalizes the current logical frame | - -Properties: - -* `FRAME_SYNC` is a **system instruction**. -* It should not be exposed as a "manual" API to the user. -* Tooling/compiler can **inject** `FRAME_SYNC` automatically at the end of the main loop. - -### 12.2 Semantics (what happens when it executes) - -When executing `FRAME_SYNC`, the core: - -1. **Finalizes** the current logical frame. -2. **Presents** the frame (`gfx.present()` or `gfx.compose_and_present()` depending on the GFX model). -3. **Releases** the input latch. -4. **Resets** the budget for the next logical frame. - -### 12.3 Overbudget (when the frame doesn't finish on time) - -If the logical frame budget runs out **before** the VM reaches `FRAME_SYNC`: - -* the VM **pauses** (PC and stacks remain at the exact point) -* there is **no present** -* the input latch is **maintained** -* on the next host tick, the VM **continues** from where it left off, still in the same logical frame - -Practical effect: - -* if the code needs 2 budgets to reach `FRAME_SYNC`, the game updates at ~30 FPS (logical frame takes 2 ticks) -* this is deterministic and reportable in the CAP - ---- - -## 15. Extensibility - -The Instruction Set is versioned. - -Future: - -* DMA -* streaming -* vectors -* fictitious coprocessors - -No existing instruction changes its meaning. - ---- - -## 16. Summary - -* stack-based VM -* explicit cost * deterministic execution -* integrated with CAP -* foundation of every PROMETEU cartridge +* predictable frame timing + +Coroutines are the only supported concurrency mechanism. + +--- + +## 12 Host Interface (Syscalls) + +All hardware access occurs through syscalls. + +Syscalls are: + +* synchronous +* deterministic +* capability-checked + +They operate on the following subsystems: + +### Graphics + +* tilebanks +* layers +* sprites +* palette control +* fade registers +* frame present + +### Audio + +* voice allocation +* play/stop +* volume/pan/pitch +* steal policy + +### Input + +* sampled once per frame +* exposed as frame state + +### Assets + +Asset banks are **host-owned memory**. + +The VM interacts through handles: + +| Syscall | Description | +| -------------- | ---------------------------- | +| `asset.load` | Request asset load into slot | +| `asset.status` | Query load state | +| `asset.commit` | Activate loaded asset | + +Asset memory: + +* is not part of the VM heap +* is not scanned by GC + +### Save Memory (MEMCARD) + +| Syscall | Description | +| --------------- | --------------- | +| `mem.read_all` | Read save data | +| `mem.write_all` | Write save data | +| `mem.commit` | Persist save | +| `mem.size` | Query capacity | + +--- + +## 13 Verifier Requirements + +Before execution, bytecode must pass the verifier. + +The verifier ensures: + +1. Valid jump targets +2. Stack depth consistency +3. Correct `ret_slots` across all paths +4. Handle safety rules +5. Closure call safety +6. No invalid opcode sequences + +Invalid bytecode is rejected. + +--- + +## 14 Summary + +The Prometeu VM is: + +* stack-based +* deterministic +* frame-synchronized +* handle-based for heap access +* multi-return capable +* first-class function capable +* coroutine-driven for concurrency + +This design balances: + +* ease of compilation +* predictable performance +* safety and debuggability +* suitability for real-time 2D games. < [Back](chapter-1.md) | [Summary](table-of-contents.md) | [Next](chapter-3.md) > \ No newline at end of file diff --git a/docs/specs/hardware/topics/chapter-3.md b/docs/specs/hardware/topics/chapter-3.md index f48e7260..452aa766 100644 --- a/docs/specs/hardware/topics/chapter-3.md +++ b/docs/specs/hardware/topics/chapter-3.md @@ -1,309 +1,353 @@ < [Back](chapter-2.md) | [Summary](table-of-contents.md) | [Next](chapter-4.md) > -# 🧠 **Memory: Stack, Heap, and Allocation** +# 🧠 **Memory Model** -## 1. Overview +This chapter defines the memory architecture of the Prometeu Virtual Machine (PVM). It describes the stack, heap, handles, object layout, garbage collection, and interaction with host-owned memory such as asset banks. -PROMETEU treats **memory as an explicit resource**. +The memory model is designed to be: -Nothing is allocated "for convenience". - -Nothing grows "automatically". - -Nothing is invisible. - -This chapter defines: - -- the **memory spaces** of the PROMETEU VM -- how **Stack** and **Heap** work -- the cost and consequences of **dynamic allocation** -- how memory relates to **CAP and certification** +* deterministic +* safe +* simple to verify +* suitable for real-time 2D games --- -## 2. PROMETEU VM Memory Spaces +## 1 Overview -The PROMETEU VM memory is divided into regions with clear responsibilities: +The PVM uses a **split memory model**: -``` -+---------------------------+ -|Constant Pool | -+---------------------------+ -|Global Space | -+---------------------------+ -|Call Stack | -| (Frames + Locals) | -+---------------------------+ -| Operand Stack | -+---------------------------+ -| Heap | -+---------------------------+ +1. **Stack memory** -``` + * used for temporary values + * function arguments + * multi-return tuples +2. **Heap memory** -Each region: + * used for all user-defined objects + * accessed only through handles +3. **Host-owned memory** -- has its own semantics -- has defined limits -- has a direct impact on execution cost + * asset banks + * audio buffers + * framebuffers + * not part of the VM heap --- -## 3. Operand Stack +## 2 Stack Memory -### 3.1 Definition +The stack is used for: -The **Operand Stack** is used for: +* primitive values +* built-in value types +* temporary results +* function arguments +* tuple returns -- passing operands between instructions -- intermediate results -- expression evaluation +### Stack value types -It is: +| Type | Description | +| -------- | ------------------------ | +| `int` | 64-bit integer | +| `bool` | Boolean | +| `float` | 64-bit float | +| `vec2` | 2D vector | +| `color` | Packed color | +| `pixel` | Position + color | +| `handle` | Reference to heap object | -- **LIFO** -- automatically growing within the frame -- **reset** between frames (except explicitly persisted values) +All stack values are: + +* fixed-size +* copied by value +* never directly reference raw memory + +### Stack properties + +* Stack is bounded and verified. +* Stack depth must be consistent across all control paths. +* Stack never stores raw pointers. --- -### 3.2 Characteristics +## 3 Tuples (Stack-Only Aggregates) -- does not store complex structures -- stores primitive values or references -- overflow or underflow are **fatal errors** +Tuples are used for multi-value returns. -> The operand stack is cheap, fast, and temporary. -> +### Tuple rules ---- +* Tuples exist only on the stack. +* Maximum tuple arity: **6 slots**. +* Tuples are not heap objects by default. +* To persist a tuple, it must be explicitly boxed into a heap object. -## 4. Call Stack +### Example -### 4.1 Execution Frames - -Each function call creates a **Call Frame**, containing: - -- local variables -- parameters -- return address -- execution context - -Frames are created with: +Function returning two values: ``` -PUSH_FRAME n +fn position(): (int, int) ``` -And destroyed with: +At runtime: ``` -POP_FRAME +stack top → [x, y] ``` --- -### 4.2 Costs and Limits +## 4 Heap Memory -- frame creation has an explicit cost -- maximum stack depth is limited -- deep recursion is discouraged +All user-defined objects live in the heap. -PROMETEU favors: +### Heap characteristics -- iteration -- explicit state -- conscious depth control +* Linear slot-based storage. +* Objects are fixed-layout blocks. +* No raw pointer access. +* No inheritance at memory level. + +Heap objects include: + +* user structs/classes +* arrays +* strings +* closures +* boxed tuples (optional) --- -## 5. Global Space +## 5 Handles and Gate Table -### 5.1 Definition +All heap objects are accessed via **handles**. -The **Global Space** stores: - -- global variables -- persistent game state -- long-term references - -Globals: - -- survive between frames -- occupy memory permanently -- count towards total memory usage - ---- - -### 5.2 Conscious usage - -PROMETEU encourages: - -- few globals -- compact structures -- explicit initialization - -Globals are equivalent to **static RAM** in microcontrollers. - ---- - -## 6. Heap - -### 6.1 Definition - -The **Heap** is the dynamic memory region of the PROMETEU VM. - -It is used for: - -- objects -- arrays -- tables -- composite structures - -Every allocation on the heap is done explicitly with: +A handle is defined as: ``` -ALLOC size +handle = { index, generation } ``` ---- - -### 6.2 Allocation Costs - -Allocating memory: - -- consumes **cycles** -- consumes **available heap** -- increases pressure on the system - -PROMETEU treats allocation as an **expensive operation by definition**. - -> Allocation is an architectural decision, not a detail. -> - ---- - -## 7. Heap Limits - -### 7.1 Finite Heap - -The heap: - -- has a defined maximum size -- can vary according to the active CAP -- never grows dynamically - -Example: +The VM maintains a **gate table**: ``` -Heap Limit:32KB -Heap Used:28KB +GateEntry { + alive: bool + generation: u32 + base: usize + slots: u32 + type_id: u32 +} ``` -Exceeding the limit: +### Handle safety -- does not crash the game -- generates an execution error -- appears in the certification report +When an object is freed: + +* `alive` becomes false +* `generation` is incremented + +When a handle is used: + +* index must exist +* generation must match + +Otherwise, the VM traps. + +This prevents: + +* use-after-free +* stale references --- -### 7.2 Heap and CAP +## 6 Object Layout -During a JAM or evaluation: +Heap objects have a simple, fixed layout: -- heap peak is measured -- the value is compared to the CAP limit -- non-compliances are recorded +``` +Object { + type_id + field_0 + field_1 + ... +} +``` -The game **continues running**, but the evidence is recorded. +Properties: + +* Fields are stored in slot order. +* No hidden base classes. +* No pointer arithmetic. + +Traits and method dispatch are resolved: + +* statically by the compiler, or +* via vtable handles (if dynamic dispatch is used). --- -## 8. Garbage Collection (GC) +## 7 Closures -### 8.1 Existence of GC +Closures are heap objects. -PROMETEU may use **simple Garbage Collection**, with the following properties: +Layout: -- non-incremental (v0.1) -- explicit cost -- observable pauses -- documented behavior +``` +Closure { + func_id + capture_count + captures[] +} +``` -GC **is not invisible**. +Captures may be: + +* copied values +* handles to heap objects + +Closure environments are part of the GC root set. --- -### 8.2 GC Cost +## 8 Coroutine Memory -When GC occurs: +Each coroutine owns its own stacks: -- cycles are consumed -- the frame may be impacted -- the event is recorded +``` +Coroutine { + call_stack + operand_stack + state +} +``` -PROMETEU teaches: +All coroutine stacks are included in the GC root set. -> "Creating garbage has a cost." -> +Coroutines do not share stacks or frames. --- -## 9. Memory Best Practices +## 9 Garbage Collection -PROMETEU explicitly encourages: +The PVM uses a **mark-sweep collector**. -- structure reuse -- allocation outside the main loop -- persistent buffers -- pooling manual +### GC properties -And discourages: +* Non-moving (no compaction in v1). +* Runs only at **safepoints**. +* Primary safepoint: `FRAME_SYNC`. -- per-frame allocation -- disposable temporary structures -- unplanned growth +### GC triggers + +GC may run when: + +* heap usage exceeds threshold +* allocation pressure is high + +### Root set + +The collector marks from: + +* operand stack +* call stack frames +* global variables +* coroutine stacks +* closure environments +* host-held handles --- -## 10. Relationship with Microcontrollers +## 10 Allocation and Deallocation -The PROMETEU memory model is intentionally similar to real MCUs: +### Allocation -| MCU | PROMETEU | -| --- | --- | -| Static RAM | Global Space | -| Stack | Call Stack | -| Heap | Heap | -| Allocation failure | Explicit error | -| Fragmentation | Dev's responsibility | +Heap allocation: -This creates a direct transfer of learning. +1. VM reserves a slot block. +2. A gate entry is created. +3. A handle is returned. + +If allocation fails: + +* VM may trigger GC. +* If still failing, a trap occurs. + +### Deallocation + +Objects are freed only by the GC. + +When freed: + +* gate is marked dead +* generation is incremented +* memory becomes available via free list --- -## 11. Pedagogical Implications +## 11 Host-Owned Memory (Asset Banks) -This model allows teaching: +Asset memory is **not part of the VM heap**. -- the difference between stack and heap -- allocation cost -- data lifetime -- architectural impact of simple decisions -- the relationship between memory and time +It is managed by the firmware. -Everything with **immediate and visible feedback**. +Examples: + +* tilebanks +* audio sample banks +* sprite sheets + +### Properties + +* VM cannot access asset memory directly. +* Access occurs only through syscalls. +* Asset memory is not scanned by GC. --- -## 12. Summary +## 12 Save Memory (MEMCARD) -- PROMETEU has well-defined memory spaces -- stack is temporary and cheap -- heap is finite and expensive -- allocation has an explicit cost -- GC is visible and measurable -- memory participates in certification +Save memory is a host-managed persistent storage area. + +Properties: + +* fixed size +* accessed only via syscalls +* not part of the VM heap +* not scanned by GC + +--- + +## 13 Memory Safety Rules + +The VM enforces: + +1. All heap access via handles. +2. Generation checks on every handle use. +3. Bounds checking on object fields. +4. No raw pointer arithmetic. +5. Verified stack discipline. + +Any violation results in a trap. + +--- + +## 14 Summary + +The PVM memory model is based on: + +* stack-only primitive and tuple values +* heap-only user objects +* generation-based handles +* deterministic GC at frame safepoints +* strict separation between VM heap and host memory + +This design ensures: + +* predictable performance +* memory safety +* simple verification +* suitability for real-time game workloads. < [Back](chapter-2.md) | [Summary](table-of-contents.md) | [Next](chapter-4.md) > \ No newline at end of file diff --git a/docs/specs/hardware/topics/chapter-9.md b/docs/specs/hardware/topics/chapter-9.md index f82f6fb4..a2a79ee9 100644 --- a/docs/specs/hardware/topics/chapter-9.md +++ b/docs/specs/hardware/topics/chapter-9.md @@ -1,289 +1,308 @@ < [Back](chapter-8.md) | [Summary](table-of-contents.md) | [Next](chapter-10.md) > -# ⚡ **Events and Interrupts** +# ⚡ **Events and Scheduling** -## 1. Overview +This chapter defines how the Prometeu Virtual Machine (PVM) handles events, frame synchronization, and cooperative concurrency. It replaces the older interrupt-oriented terminology with a simpler and more accurate model based on **frame boundaries**, **event queues**, and **coroutines**. -PROMETEU clearly distinguishes between **normal execution**, **events**, and **interrupts**. - -Nothing occurs "out of time". - -Nothing interrupts the system without cost. - -Nothing happens without a well-defined point in the execution cycle. - -> Events are signals. -> Interrupts are machine decisions. -> - -This chapter defines: - -- what PROMETEU considers an event -- how interrupts are modeled -- when they can occur -- how they relate to cycles, CAP, and determinism +The goal is to preserve determinism while still allowing responsive and structured game logic. --- -## 2. Event Philosophy in PROMETEU +## 1 Core Philosophy -PROMETEU **does not use invisible asynchronous callbacks**. +Prometeu does **not use asynchronous callbacks** or preemptive interrupts for user code. -Every event: +All external signals are: -- is registered -- is delivered at a predictable moment -- is handled within the main loop +* queued by the firmware +* delivered at deterministic points +* processed inside the main execution loop -This model avoids: +Nothing executes “out of time”. +Nothing interrupts the program in the middle of an instruction. +Nothing occurs without a known cost. -- implicit concurrency -- hidden race conditions -- non-deterministic side effects +This guarantees: -PROMETEU favors: - -> explicit control over reactivity. -> +* deterministic behavior +* reproducible runs +* stable frame timing --- -## 3. Events +## 2 Events -### 3.1 Definition +### 2.1 Definition -An **event** in PROMETEU is a **logical signal** generated by the system or the program, indicating that something has occurred. - -Examples of events: - -- end of frame -- timer expired -- system state change -- execution error - -Events **do not execute code automatically**. - -They only **inform**. - ---- - -### 3.2 Event Queue - -PROMETEU maintains an **event queue**: - -- events are queued -- the queue is processed in order -- processing occurs at defined points in the frame +An **event** is a logical signal generated by the system or by internal runtime mechanisms. Events: -- do not interrupt execution arbitrarily -- do not execute outside the loop +* represent something that has occurred +* do not execute code automatically +* are processed explicitly during the frame + +Examples: + +* end of frame +* timer expiration +* asset load completion +* system state change +* execution error --- -## 4. Interrupts +### 2.2 Event Queue -### 4.1 Definition +The firmware maintains an **event queue**. -An **interrupt** is a special event, treated by the system as **priority**, which can: +Properties: -- change the normal flow of execution -- execute specific system code -- impact cycles and budget +* events are queued in order +* events are processed at frame boundaries +* event processing is deterministic -Interrupts are **rare and explicit**. +Events never: + +* execute user code automatically +* interrupt instructions +* run outside the main loop --- -### 4.2 What is NOT an interrupt +## 3 Frame Boundary (Sync Phase) -In PROMETEU, the following are **not interrupts**: +The primary synchronization point in Prometeu is the **frame boundary**, reached by the `FRAME_SYNC` instruction. -- button input -- collisions -- common timers -- game logic +At this point: -These are treated as **state or normal events**. +1. Input state is sampled. +2. Events are delivered. +3. Coroutine scheduling occurs. +4. Optional garbage collection may run. +5. Control returns to the firmware. + +This replaces the older notion of a "VBlank interrupt". + +The frame boundary: + +* has a fixed, measurable cost +* does not execute arbitrary user code +* is fully deterministic --- -## 5. Types of Interrupts in PROMETEU +## 4 System Events vs System Faults -PROMETEU defines a small and well-controlled set of interrupts. +Prometeu distinguishes between normal events and system faults. -### 5.1 Frame Interrupt (Conceptual VBlank) +### 4.1 Normal events -The end of each frame generates a **logical synchronization interrupt**, responsible for: +Examples: -- framebuffer swap -- audio commit -- state synchronization +* timer expired +* asset loaded +* frame boundary -This interrupt: +These are delivered through the event queue. -- occurs at SYNC -- has a fixed cost -- does not execute user code - ---- - -### 5.2 System Interrupt +### 4.2 System faults Generated by exceptional conditions: -- fatal VM error -- memory violation -- invalid instruction +* invalid instruction +* memory violation +* handle misuse +* verifier failure Result: -- execution is halted -- VM state is preserved -- detailed report is generated +* VM execution stops +* state is preserved +* a diagnostic report is generated + +System faults are not recoverable events. --- -### 5.3 Timed Interrupts (Timers) +## 5 Timers -PROMETEU can offer **system timers**, modeled as: +Timers are modeled as **frame-based counters**. -- counters based on frames -- signals generated upon reaching zero +Properties: + +* measured in frames, not real time +* deterministic across runs +* generate events when they expire Timers: -- do not trigger code automatically -- generate queryable events +* do not execute code automatically +* produce queryable or queued events -Conceptual example: +Example: ``` -if (timer.expired(T1)) { -// handle event +if timer.expired(t1) { + // handle event } ``` --- -## 6. Relationship between Events, Interrupts, and the Loop +## 6 Coroutines and Cooperative Scheduling -The complete flow can be represented as follows: +Prometeu provides **coroutines** as the only form of concurrency. -``` -FRAME N -────────────── -SAMPLEINPUT -PROCESS EVENTS -UPDATE -DRAW -AUDIO -INTERRUPT: VBLANK -SYNC -────────────── -``` +Coroutines are: -Important: +* cooperative +* deterministic +* scheduled only at safe points -- events are processed before main logic -- interrupts occur only at safe points -- no interrupt occurs "in the middle" of an instruction +There is: + +* no preemption +* no parallel execution +* no hidden threads + +### 6.1 Coroutine lifecycle + +Each coroutine can be in one of the following states: + +* `Ready` +* `Running` +* `Sleeping` +* `Finished` + +### 6.2 Scheduling + +At each frame boundary: + +1. The scheduler selects the next coroutine. +2. Coroutines run in a deterministic order. +3. Each coroutine executes within the frame budget. + +The default scheduling policy is: + +* round-robin +* deterministic --- -## 7. Costs and Budget +### 6.3 Coroutine operations -Events and interrupts: +Typical coroutine instructions: -- consume cycles -- participate in the CAP -- appear in certification +| Operation | Description | +| --------- | ----------------------------- | +| `spawn` | Create a coroutine | +| `yield` | Voluntarily suspend execution | +| `sleep` | Suspend for N frames | -Example report: +`yield` and `sleep` only take effect at safe points. + +--- + +## 7 Relationship Between Events, Coroutines, and the Frame Loop + +The high-level frame structure is: + +``` +FRAME N +------------------------ +Sample Input +Deliver Events +Schedule Coroutines +Run VM until: + - budget exhausted, or + - FRAME_SYNC reached +Sync Phase +------------------------ +``` + +Important properties: + +* events are processed at known points +* coroutine scheduling is deterministic +* no execution occurs outside the frame loop + +--- + +## 8 Costs and Budget + +All event processing and scheduling: + +* consumes cycles +* contributes to the CAP (certification and analysis profile) +* appears in profiling reports + +Example: ``` Frame 18231: -Event processing:120cycles -VBlank interrupt:80cycles +Event processing: 120 cycles +Coroutine scheduling: 40 cycles +Frame sync: 80 cycles ``` Nothing is free. --- -## 8. Determinism and Reproducibility +## 9 Determinism and Reproducibility -PROMETEU guarantees: +Prometeu guarantees: -- same sequence of events → same behavior -- interrupts always at the same point in the frame -- timers based on frame count, not real time +* same sequence of inputs and events → same behavior +* frame-based timers +* deterministic coroutine scheduling This allows: -- reliable replays -- precise debugging -- fair certification +* reliable replays +* precise debugging +* fair certification --- -## 9. Best Practices +## 10 Best Practices -PROMETEU encourages: +Prometeu encourages: -- treating events as data -- querying events explicitly -- avoiding heavy logic in handlers -- using timers instead of excessive polling +* treating events as data +* querying events explicitly +* structuring logic around frame steps +* using coroutines for asynchronous flows -PROMETEU discourages: +Prometeu discourages: -- simulating asynchronous callbacks -- depending on implicit order -- using events as a "shortcut" for complex logic +* simulating asynchronous callbacks +* relying on hidden timing +* using events as implicit control flow --- -## 10. Relationship with Microcontrollers +## 11 Conceptual Comparison -The model reflects real MCUs: +| Traditional System | Prometeu | +| ------------------ | ----------------------- | +| Hardware interrupt | Frame boundary event | +| ISR | System sync phase | +| Main loop | VM frame loop | +| Timer interrupt | Frame-based timer event | +| Threads | Coroutines | -| MCU | PROMETEU | -| --- | --- | -| ISR | Explicit interrupt | -| Main Loop | PROMETEU Loop | -| Flags | Events | -| Timers | Per-frame timers | - -But without: - -- real concurrency -- unpredictable interrupts - -PROMETEU **teaches the concept**, not the chaos. +Prometeu teaches reactive system concepts without the unpredictability of real interrupts. --- -## 11. Pedagogical Implications +## 12 Summary -This model allows teaching: - -- the difference between event and interrupt -- safe synchronization -- flow control in reactive systems -- the impact of temporal decisions - -Everything with **order, clarity, and measurement**. - ---- - -## 12. Summary - -- events inform, they do not execute -- interrupts are rare and controlled -- no execution occurs outside the loop -- costs are explicit -- behavior is deterministic +* Events inform; they do not execute code. +* The frame boundary is the only global synchronization point. +* System faults stop execution. +* Coroutines provide cooperative concurrency. +* All behavior is deterministic and measurable. < [Back](chapter-8.md) | [Summary](table-of-contents.md) | [Next](chapter-10.md) > \ No newline at end of file diff --git a/docs/specs/hardware/topics/table-of-contents.md b/docs/specs/hardware/topics/table-of-contents.md index fdf147ba..47a2b29b 100644 --- a/docs/specs/hardware/topics/table-of-contents.md +++ b/docs/specs/hardware/topics/table-of-contents.md @@ -15,6 +15,7 @@ - [Chapter 13: Cartridge](chapter-13.md) - [Chapter 14: Boot Profiles](chapter-14.md) - [Chapter 15: Asset Management](chapter-15.md) +- [Chapter 16: Host ABI and Syscalls](chapter-16.md) --- [Back to README](../README.md) \ No newline at end of file diff --git a/prometeu-vscode/language-configuration.json b/prometeu-vscode/language-configuration.json deleted file mode 100644 index 921df468..00000000 --- a/prometeu-vscode/language-configuration.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["[[", "]]"], - ["(", ")"] - ], - "autoClosingPairs": [ - { "open": "{", "close": "}" }, - { "open": "[", "close": "]" }, - { "open": "[[", "close": "]]" }, - { "open": "(", "close": ")" }, - { "open": "\"", "close": "\"" } - ] -} diff --git a/prometeu-vscode/out/extension.js b/prometeu-vscode/out/extension.js deleted file mode 100644 index a444457f..00000000 --- a/prometeu-vscode/out/extension.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.activate = activate; -exports.deactivate = deactivate; -const vscode = require("vscode"); -const node_1 = require("vscode-languageclient/node"); -let client; -function activate(context) { - const cfg = vscode.workspace.getConfiguration("prometeuPbs"); - const serverPath = cfg.get("serverPath"); - if (!serverPath) { - vscode.window.showErrorMessage("Prometeu PBS: configure 'prometeuPbs.serverPath' com o caminho do bin prometeu-lsp."); - return; - } - const serverOptions = { - command: serverPath, - args: [] - }; - const clientOptions = { - documentSelector: [{ scheme: "file", language: "pbs" }] - }; - client = new node_1.LanguageClient("prometeuPbsLsp", "Prometeu PBS LSP", serverOptions, clientOptions); - // ✅ O client é “parável” no deactivate, não o start() Promise - context.subscriptions.push({ - dispose: () => { - void client?.stop(); - } - }); - void client.start(); -} -function deactivate() { - return client?.stop(); -} -//# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/prometeu-vscode/out/extension.js.map b/prometeu-vscode/out/extension.js.map deleted file mode 100644 index 04874627..00000000 --- a/prometeu-vscode/out/extension.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;AAKA,4BA8BC;AAED,gCAEC;AAvCD,iCAAiC;AACjC,qDAAkG;AAElG,IAAI,MAAkC,CAAC;AAEvC,SAAgB,QAAQ,CAAC,OAAgC;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAS,YAAY,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAC1B,qFAAqF,CACxF,CAAC;QACF,OAAO;IACX,CAAC;IAED,MAAM,aAAa,GAAkB;QACjC,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,EAAE;KACX,CAAC;IAEF,MAAM,aAAa,GAA0B;QACzC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KAC1D,CAAC;IAEF,MAAM,GAAG,IAAI,qBAAc,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAEhG,8DAA8D;IAC9D,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE;YACV,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;KACJ,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,UAAU;IACtB,OAAO,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"} \ No newline at end of file diff --git a/prometeu-vscode/package-lock.json b/prometeu-vscode/package-lock.json deleted file mode 100644 index 4cc5bfc5..00000000 --- a/prometeu-vscode/package-lock.json +++ /dev/null @@ -1,7378 +0,0 @@ -{ - "name": "prometeu-pbs", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "prometeu-pbs", - "version": "0.0.1", - "dependencies": { - "vscode-languageclient": "^9.0.1" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "@types/vscode": "^1.85.0", - "generator-code": "^1.11.17", - "typescript": "^5.0.0", - "yo": "^6.0.0" - }, - "engines": { - "vscode": "^1.85.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@inquirer/ansi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", - "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.21", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/arborist": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.2.0.tgz", - "integrity": "sha512-FRvpUoL5RUaMZ+CNJAZAegHymbamcGptjktD72T8Td94OllbJcBlOZQ69cB/DiNTYDvGBU0uvmcBWivlip1h+Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^5.0.0", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^6.0.0", - "cacache": "^20.0.1", - "common-ancestor-path": "^2.0.0", - "hosted-git-info": "^9.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^9.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.0.0", - "proggy": "^4.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "semver": "^7.3.7", - "ssri": "^13.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/fs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", - "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", - "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^9.0.0", - "ini": "^6.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", - "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/map-workspaces": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz", - "integrity": "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^13.0.0", - "minimatch": "^10.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz", - "integrity": "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^5.0.0", - "pacote": "^21.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", - "integrity": "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", - "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", - "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-5.0.0.tgz", - "integrity": "sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", - "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", - "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0", - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz", - "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz", - "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.2.2", - "@octokit/request": "^9.2.3", - "@octokit/request-error": "^6.1.8", - "@octokit/types": "^14.0.0", - "before-after-hook": "^3.0.2", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz", - "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^14.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/graphql": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz", - "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^9.2.3", - "@octokit/types": "^14.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", - "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz", - "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.10.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", - "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz", - "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.10.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/request": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz", - "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^10.1.4", - "@octokit/request-error": "^6.1.8", - "@octokit/types": "^14.0.0", - "fast-content-type-parse": "^2.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz", - "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^14.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/rest": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz", - "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^6.1.4", - "@octokit/plugin-paginate-rest": "^11.4.2", - "@octokit/plugin-request-log": "^5.3.1", - "@octokit/plugin-rest-endpoint-methods": "^13.3.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/types": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", - "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^25.1.0" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/npm-conf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", - "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sigstore/bundle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", - "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", - "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", - "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", - "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.3", - "proc-log": "^6.1.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", - "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", - "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", - "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/expect": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", - "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/node": { - "version": "20.19.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.32.tgz", - "integrity": "sha512-Ez8QE4DMfhjjTsES9K2dwfV258qBui7qxUsoaixZDiTzbde4U12e1pXGNu/ECsUIOi5/zoCxAQxIhQnaUQ2VvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/vinyl": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", - "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/expect": "^1.20.4", - "@types/node": "*" - } - }, - "node_modules/@types/vscode": { - "version": "1.109.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz", - "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@yeoman/adapter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@yeoman/adapter/-/adapter-3.1.1.tgz", - "integrity": "sha512-yhBK+r5LHcUcZi1JvjL6BCg0HsbWkeh+nsTJa0zJxjFeRvMDLTSVb222hVXUMKP9qHjrK1Cu2Nga0EaRlLpm4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.0.0", - "chalk": "^5.2.0", - "inquirer": "^12.0.0", - "log-symbols": "^7.0.0", - "ora": "^9.0.0", - "p-queue": "^9.0.0", - "text-table": "^0.2.0" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@yeoman/conflicter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@yeoman/conflicter/-/conflicter-4.0.0.tgz", - "integrity": "sha512-h/PPw+XR9URrLdKb90aeiIAbnl8ToMvVJoPqO0KHldPBF+T60HUJlN+oDBfKugqYPsuTKASniPUrxagwtcdwgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@yeoman/transform": "^2.1.0", - "binary-extensions": "^3.1.0", - "cli-table": "^0.3.11", - "dateformat": "^5.0.3", - "diff": "^8.0.2", - "isbinaryfile": "^5.0.4", - "mem-fs-editor": "^11.1.4", - "minimatch": "^10.0.3", - "p-transform": "^5.0.1", - "pretty-bytes": "^7.0.1", - "slash": "^5.1.0", - "textextensions": "^6.11.0" - }, - "acceptDependencies": { - "@yeoman/transform": "^2.0.0", - "minimatch": "^10.0.1", - "p-transform": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "peerDependencies": { - "@types/node": ">=20.14.8", - "@yeoman/types": "^1.0.0", - "mem-fs": "^4.0.0" - } - }, - "node_modules/@yeoman/conflicter/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@yeoman/namespace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz", - "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.13.0 || >=18.12.0" - } - }, - "node_modules/@yeoman/transform": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@yeoman/transform/-/transform-2.1.0.tgz", - "integrity": "sha512-dAgDEMa8S+0ORAmrfFtufUccZpvwj6ZsZLZqMS86bxLUnB9h4n4dZN9IOHJHJfuOY+PAiLrEHgQYQvJ9R6IU6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": ">=18.19.0" - }, - "peerDependencies": { - "@types/node": ">=18.19.44" - } - }, - "node_modules/@yeoman/transform/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@yeoman/types": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz", - "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.13.0 || >=18.12.0" - }, - "peerDependencies": { - "@types/node": ">=16.18.26", - "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0", - "mem-fs": "^3.0.0 || ^4.0.0-beta.1", - "mem-fs-editor": "^10.0.2 || >=10.0.2" - }, - "peerDependenciesMeta": { - "@yeoman/adapter": { - "optional": true - }, - "mem-fs": { - "optional": true - }, - "mem-fs-editor": { - "optional": true - } - } - }, - "node_modules/abbrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", - "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/array-differ": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", - "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/atomically": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", - "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "stubborn-fs": "^2.0.0", - "when-exit": "^2.1.4" - } - }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/before-after-hook": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/bin-links": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-6.0.0.tgz", - "integrity": "sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "proc-log": "^6.0.0", - "read-cmd-shim": "^6.0.0", - "write-file-atomic": "^7.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/binary-extensions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-3.1.0.tgz", - "integrity": "sha512-Jvvd9hy1w+xUad8+ckQsWA/V1AoyubOvqn0aygjMOVM4BfIaRav1NFS3LsTSDaV4n4FtcCtQXvzep1E6MboqwQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/binary-version": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/binary-version/-/binary-version-7.1.0.tgz", - "integrity": "sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^8.0.1", - "find-versions": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/binary-version-check": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/binary-version-check/-/binary-version-check-6.1.0.tgz", - "integrity": "sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-version": "^7.1.0", - "semver": "^7.6.0", - "semver-truncate": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/binaryextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", - "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", - "dev": true, - "license": "Artistic-2.0", - "dependencies": { - "editions": "^6.21.0" - }, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacache": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", - "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^13.0.0", - "unique-filename": "^5.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-list/-/cli-list-1.0.0.tgz", - "integrity": "sha512-0jbGr6RmRjxkCWc74+jc0fDdifaZXxcY7FTUnNV0mT8Mf75WSsPqSSWE22PucqO9C6Mok8Hbd+GHgLQpVcxSVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cli-spinners": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", - "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "dev": true, - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-regexp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", - "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regexp": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cmd-shim": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-8.0.0.tgz", - "integrity": "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/common-ancestor-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", - "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">= 18" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", - "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "atomically": "^2.0.3", - "dot-prop": "^9.0.0", - "graceful-fs": "^4.2.11", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/configstore/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/convert-hrtime": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dateformat": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-5.0.3.tgz", - "integrity": "sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.1.tgz", - "integrity": "sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-uid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-uid/-/default-uid-2.0.0.tgz", - "integrity": "sha512-aMYTP7vinmUN/dR5n9JUNCB85jy+N+41jx53lMzR6DyGE6NeVPIxCPGbWjDYVNjz6Ei8C9hyeYAfuxVOe3UdsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", - "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/downgrade-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/downgrade-root/-/downgrade-root-2.0.0.tgz", - "integrity": "sha512-tke0knZzG76FThh9diBex027u3qsoXv6PKZDva1fsEuqlzlstkcyoJgdHE/wQc2nBU1rnUcmhMUnQA3gucXc0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-uid": "^2.0.0", - "is-root": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/editions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", - "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", - "dev": true, - "license": "Artistic-2.0", - "dependencies": { - "version-range": "^4.15.0" - }, - "engines": { - "ecmascript": ">= es5", - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execall": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-3.0.0.tgz", - "integrity": "sha512-FaJeg2uWc8ADWnAnoDbxhAAr4U/j86ujlojnEpnBHQ4FM2viZKNjjyO2O6AKG6+9usZAnqsI4+1+w6vzx0x4uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-regexp": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-plist": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.3.tgz", - "integrity": "sha512-d9cEfo/WcOezgPLAC/8t8wGb6YOD6JTCPMw2QcG2nAdFmyY+9rTUizCTaGjIZAloWENTEUMAPpkUAIJJJ0i96A==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-versions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", - "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver-regex": "^4.0.5", - "super-regex": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/first-chunk-stream": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz", - "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fly-import": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fly-import/-/fly-import-1.0.0.tgz", - "integrity": "sha512-JZEaXZw9QR+DRMClMVJYeY5SNn8zzHBuc+KTreFGDBghRXzCiGR9aDgYGP7O/EeoxwHBZ2Brl+2ixlH/Jmt/qg==", - "dev": true, - "dependencies": { - "@npmcli/arborist": "^9.1.3", - "env-paths": "^3.0.0", - "registry-auth-token": "^5.1.0", - "registry-url": "^7.2.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/fly-import/node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/fly-import/node_modules/registry-url": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-7.2.0.tgz", - "integrity": "sha512-I5UEBQ+09LWKInA1fPswOMZps0cs2Z+IQXb5Z5EkTJiUmIN52Vm/FD3ji5X82c5jIXL3nWEWOrYK0RkON6Oqyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.1", - "ini": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==", - "dev": true, - "license": "Apache2" - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fullname": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fullname/-/fullname-5.0.0.tgz", - "integrity": "sha512-RVjGQY8ryXcWMrvjyXK4v9pK2kFyHOEqJz/JslPadc+HQMzqbSwX+y5Emvzg5I+TPNe8f5VqF5xQn72qUnP6Iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^8.0.1", - "filter-obj": "^5.1.0", - "mem": "^5.1.0", - "p-any": "^4.0.0", - "passwd-user": "^4.0.0", - "rc": "^1.2.8" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/function-timeout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", - "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/generator-code": { - "version": "1.11.17", - "resolved": "https://registry.npmjs.org/generator-code/-/generator-code-1.11.17.tgz", - "integrity": "sha512-eYR7p24qTu2uZRMt4L1t8O2jP+KZ8W0lt6WbWIhYi8Rkaa90Wnfl4duqB5CjYRLysGpObeI4jA6JS/80Dn4osA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "fast-plist": "^0.1.3", - "request-light": "^0.8.0", - "which": "^6.0.0", - "yeoman-generator": "^7.5.1", - "yosay": "^3.0.0" - }, - "engines": { - "node": ">=20.5.0" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-username": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz", - "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/rest": "^21.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", - "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.2", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/grouped-queue": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-2.1.0.tgz", - "integrity": "sha512-c5NDCWO0XiXuJAhOegMiNotkDmgORN+VNo3+YHMhWpoWG/u2+8im8byqsOe3/myI9YcC//plRdqGa2AE3Qsdjw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/humanize-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/humanize-string/-/humanize-string-3.1.0.tgz", - "integrity": "sha512-wEtOOR3sT8nZ7W0WZwEXo68z2EA0kpcpjaN/ZXxpps9PDzZdX8+TAj+XOGKx2WkagP9mnhWtFpfMNSd2WAhiIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", - "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^10.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/index-to-position": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", - "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "12.11.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", - "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/prompts": "^7.10.1", - "@inquirer/type": "^3.0.10", - "mute-stream": "^2.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-in-ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", - "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", - "dev": true, - "license": "MIT", - "bin": { - "is-in-ci": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", - "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-regexp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", - "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-root": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-3.0.0.tgz", - "integrity": "sha512-C13bL54yQdgniduW8KFe81ttgQINcwMgil/zyNuDzr/xjIyDMkcvcc9dON62RH9VBAHOI7le+lTo/U3PY3irwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isbinaryfile": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", - "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.2.tgz", - "integrity": "sha512-mIcis6w+JiQf3P7t7mg/35GKB4T1FQsBOtMIvuKw4YErj5RjtbhcTd5/I30fmkmGMwvI0WlzSNN+27K0QCMkAw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" - } - }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", - "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/just-diff": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", - "dev": true, - "license": "MIT" - }, - "node_modules/just-diff-apply": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ky": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", - "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/locate-path": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", - "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/locutus": { - "version": "2.0.39", - "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.39.tgz", - "integrity": "sha512-v2iub44UtGpbIv+pFkkYhZ+JsbIM0bJsQcQ1+VayUNGVA/YhM8+CkBiRACcpuuE9Q0xI1pgNzGNwzZDCp1MCww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10", - "yarn": ">= 1" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", - "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-asynchronous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.0.1.tgz", - "integrity": "sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-event": "^6.0.0", - "type-fest": "^4.6.0", - "web-worker": "1.2.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", - "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "ssri": "^13.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mem-fs": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz", - "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": ">=18", - "@types/vinyl": "^2.0.12", - "vinyl": "^3.0.0", - "vinyl-file": "^5.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/mem-fs-editor": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz", - "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ejs": "^3.1.4", - "@types/node": ">=18", - "binaryextensions": "^6.11.0", - "commondir": "^1.0.1", - "deep-extend": "^0.6.0", - "ejs": "^3.1.10", - "globby": "^14.0.2", - "isbinaryfile": "5.0.3", - "minimatch": "^9.0.3", - "multimatch": "^7.0.0", - "normalize-path": "^3.0.0", - "textextensions": "^6.11.0", - "vinyl": "^3.0.0" - }, - "acceptDependencies": { - "isbinaryfile": "^5.0.3" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "mem-fs": "^4.0.0" - } - }, - "node_modules/mem-fs-editor/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/meow": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-14.0.0.tgz", - "integrity": "sha512-JhC3R1f6dbspVtmF3vKjAWz1EVIvwFrGGPLSdU6rK79xBwHWTuHoLnRX/t1/zHS1Ch1Y2UtIrih7DAHuH9JFJA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.1.tgz", - "integrity": "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", - "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/multimatch": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz", - "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-differ": "^4.0.0", - "array-union": "^3.0.1", - "minimatch": "^9.0.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-gyp": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", - "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^15.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/node-gyp/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/nopt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", - "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^5.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-install-checks": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", - "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-keyword": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-keyword/-/npm-keyword-8.0.0.tgz", - "integrity": "sha512-45v1SvuOmocKXJ5i2UJQV5FyGtnK4KVxXSNZ6nndKNUAO5PqOBLQjzM548956dZ0FWjij/kHlgwQ4e4fMZkLzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ky": "^1.2.1", - "registry-url": "^6.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-package-arg": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", - "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/npm-packlist": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", - "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", - "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", - "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", - "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.1", - "string-width": "^8.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-any": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-4.0.0.tgz", - "integrity": "sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-cancelable": "^3.0.0", - "p-some": "^6.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-event/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", - "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^7.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-some": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-6.0.0.tgz", - "integrity": "sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^4.0.0", - "p-cancelable": "^3.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-transform": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-transform/-/p-transform-5.0.1.tgz", - "integrity": "sha512-tb3/zIwbU6Z9RMDxZM3/UsyL5LpIUQj7Drq7iXWG9ilPpzyGG28EEFRRrGTsxHf3sOSOiQEiwevQH/VWtHbZfg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/node": ">=18.19.0", - "p-queue": "^8.0.1" - }, - "engines": { - "node": ">=18.19.0" - } - }, - "node_modules/p-transform/node_modules/p-queue": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", - "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-transform/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.1.0.tgz", - "integrity": "sha512-WF/PwrImIIVaLmtuCeO5L7n6DA0ZGCqmDPO/XbNjZgNUX+2O5z4f4Wdmu6erBWNICkl3ftKJvit2eIVcpegRRw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/pad-component": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", - "integrity": "sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g==", - "dev": true - }, - "node_modules/parse-conflict-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-5.0.1.tgz", - "integrity": "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^5.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/parse-help": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-help/-/parse-help-2.0.0.tgz", - "integrity": "sha512-bb93UtyO4Pd9apV2ZQ2i///wIiW6eR1ZC+CraKHKMJX8dTayipqxwlOBmzjaoYQzfd3vzE00U9vND9K34LBgDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "execall": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/passwd-user": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/passwd-user/-/passwd-user-4.0.0.tgz", - "integrity": "sha512-Y0hVgYTHsWRkOF/lG2ciRChuD1kiQCGbmg9hQuyxRrszz2B9779U8nUa90NVJ089UTCFIcvfQ6zgmbXj/YoIYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/passwd-user/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/passwd-user/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/passwd-user/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/passwd-user/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/passwd-user/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/passwd-user/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/passwd-user/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/passwd-user/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/passwd-user/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-bytes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz", - "integrity": "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/proggy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/proggy/-/proggy-4.0.0.tgz", - "integrity": "sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", - "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/pupa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", - "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/read-cmd-shim": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz", - "integrity": "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", - "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^3.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "license": "ISC" - }, - "node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/request-light": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.8.0.tgz", - "integrity": "sha512-bH6E4PMmsEXYrLX6Kr1vu+xI3HproB1vECAwaPSJeroLE1kpWE3HR27uB4icx+6YORu1ajqBJXxuedv8ZQg5Lw==", - "dev": true, - "license": "MIT" - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/root-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/root-check/-/root-check-2.0.0.tgz", - "integrity": "sha512-r9sl0ZLw27mJHTluboMNs345zqeRkIEthbrK2/1pSnl86XZGrNh58X4LqlS8EIViuOxZzjjvSoeIa7Q7OegrMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "downgrade-root": "^2.0.0", - "sudo-block": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-truncate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", - "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", - "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.0", - "@sigstore/tuf": "^4.0.1", - "@sigstore/verify": "^3.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/simple-git": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", - "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/git-js?sponsor=1" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/sort-keys": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz", - "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sort-on": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-7.0.0.tgz", - "integrity": "sha512-e+4RRxt7jsWdGPp4H5PKOER/ELYlemNB1plvW686Qi3j4WVaCjCpro2zaTD7Cn0VtBImq/hg3x1JfovMNXXfJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-prop": "^10.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sort-on/node_modules/dot-prop": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", - "integrity": "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^5.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sort-on/node_modules/type-fest": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.3.tgz", - "integrity": "sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/stdin-discarder": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", - "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/string-length": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", - "integrity": "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", - "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom-buf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz", - "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-utf8": "^0.2.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-bom-stream": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz", - "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "first-chunk-stream": "^5.0.0", - "strip-bom-buf": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stubborn-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", - "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "stubborn-utils": "^1.0.1" - } - }, - "node_modules/stubborn-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", - "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sudo-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sudo-block/-/sudo-block-4.0.0.tgz", - "integrity": "sha512-bjCE4CcLPEX7K9aCOc9Z4iyNmi1bgEcjS11DU20IbhjxiY2CHwxP7Dy+JlXlGHRq47+wmVr8zmixfELWq+hKBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.1", - "is-docker": "^2.2.1", - "is-root": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sudo-block/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/sudo-block/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sudo-block/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/super-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", - "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-timeout": "^1.0.1", - "make-asynchronous": "^1.0.1", - "time-span": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/tagged-tag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", - "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" - } - }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/textextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", - "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", - "dev": true, - "license": "Artistic-2.0", - "dependencies": { - "editions": "^6.21.0" - }, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-hrtime": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/titleize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-4.0.0.tgz", - "integrity": "sha512-ZgUJ1K83rhdu7uh7EHAC2BgY5DzoX8V5rTvoWI4vFysggi6YjLe5gUXABPWAU7VkvGP7P/0YiWq+dcPeYDsf1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/treeverse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", - "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/twig": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/twig/-/twig-1.17.1.tgz", - "integrity": "sha512-atxccyr/BHtb1gPMA7Lvki0OuU17XBqHsNH9lzDHt9Rr1293EVZOosSZabEXz/DPVikIW8ZDqSkEddwyJnQN2w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@babel/runtime": "^7.8.4", - "locutus": "^2.0.11", - "minimatch": "3.0.x", - "walk": "2.3.x" - }, - "bin": { - "twigjs": "bin/twigjs" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/twig/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/twig/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", - "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/unique-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", - "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "dev": true, - "license": "ISC" - }, - "node_modules/untildify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-6.0.0.tgz", - "integrity": "sha512-sA2YTBvW2F463GvSbiZtso+dpuQV+B7xX9saX30SGrR5Fyx4AUcvA/zN+ShAkABKUKVyDaHECsJrHv5ToTuHsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", - "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^8.0.1", - "chalk": "^5.3.0", - "configstore": "^7.0.0", - "is-in-ci": "^1.0.0", - "is-installed-globally": "^1.0.0", - "is-npm": "^6.0.0", - "latest-version": "^9.0.0", - "pupa": "^3.1.0", - "semver": "^7.6.3", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", - "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/version-range": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", - "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", - "dev": true, - "license": "Artistic-2.0", - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz", - "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/vinyl": "^2.0.7", - "strip-bom-buf": "^3.0.1", - "strip-bom-stream": "^5.0.0", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", - "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", - "license": "MIT", - "dependencies": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.5" - }, - "engines": { - "vscode": "^1.82.0" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "license": "MIT" - }, - "node_modules/walk": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", - "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "foreachasync": "^3.0.0" - } - }, - "node_modules/walk-up-path": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", - "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/when-exit": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", - "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", - "dev": true, - "license": "MIT" - }, - "node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/which-package-manager": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-package-manager/-/which-package-manager-1.0.1.tgz", - "integrity": "sha512-Nse2rVsL302dkEhCyyS1U3iEQ9FRYPPkWJNk188xUVkKIGXjMmDPlA3L1VettE+T2z7SGLsJiDaZw//8CHUQwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^7.0.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-file-atomic": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.0.tgz", - "integrity": "sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yeoman-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yeoman-character/-/yeoman-character-2.0.0.tgz", - "integrity": "sha512-6dJH8L1Pt8GeXjbzM2EVvcF0n12l+7qeVMsZHKmFq7LVokH/TIFxmB4Wng6syr0t+0pqyw+1G8F4KGiHua7bwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "supports-color": "^9.4.0" - }, - "bin": { - "yeoman-character": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/yeoman-doctor": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/yeoman-doctor/-/yeoman-doctor-6.0.0.tgz", - "integrity": "sha512-qG7KUB8fcs6ez4r5m+tLPDg5c5qNSOYy5ZddknK49GkGXHgsZFLRsJ5Mr3gQh+Kw/XmK7AoZU5uFykDnUcXKYw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "ansi-styles": "^6.2.3", - "binary-version-check": "^6.1.0", - "chalk": "^5.6.2", - "global-agent": "^3.0.0", - "latest-version": "^9.0.0", - "log-symbols": "^7.0.1", - "semver": "^7.7.2", - "twig": "^1.17.1" - }, - "bin": { - "yo-doctor": "lib/cli.js", - "yodoctor": "lib/cli.js" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/yeoman-doctor/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/yeoman-environment": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-5.1.3.tgz", - "integrity": "sha512-SqxwIDysjTqNG1YX9LgrC5y5c6L9qfBjMD1u81co1Cze6kZwQzW8lzivCug283UbSOhEA0as39rO6EyzDJYhuw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@yeoman/adapter": "^3.1.0", - "@yeoman/conflicter": "^4.0.0", - "@yeoman/namespace": "^1.0.1", - "@yeoman/transform": "^2.1.0", - "@yeoman/types": "^1.8.0", - "arrify": "^3.0.0", - "chalk": "^5.5.0", - "commander": "^14.0.0", - "debug": "^4.4.1", - "execa": "^9.6.0", - "fly-import": "^1.0.0", - "globby": "^16.0.0", - "grouped-queue": "^2.1.0", - "locate-path": "^8.0.0", - "lodash-es": "^4.17.21", - "mem-fs": "^4.1.2", - "mem-fs-editor": "^11.1.4", - "semver": "^7.7.2", - "slash": "^5.1.0", - "untildify": "^6.0.0", - "which-package-manager": "^1.0.1" - }, - "acceptDependencies": { - "@yeoman/adapter": ">=3.0.0" - }, - "bin": { - "yoe": "bin/bin.cjs" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - }, - "peerDependencies": { - "@yeoman/adapter": "^3.0.0", - "@yeoman/types": "^1.8.0", - "mem-fs": "^4.1.2" - } - }, - "node_modules/yeoman-environment/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/execa": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", - "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.1", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.2.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": "^18.19.0 || >=20.5.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/yeoman-environment/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/globby": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", - "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.5", - "is-path-inside": "^4.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/globby/node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/human-signals": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/yeoman-environment/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-environment/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yeoman-generator": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz", - "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/lodash-es": "^4.17.9", - "@yeoman/namespace": "^1.0.0", - "chalk": "^5.3.0", - "debug": "^4.1.1", - "execa": "^8.0.1", - "github-username": "^9.0.0", - "json-schema": "^0.4.0", - "latest-version": "^9.0.0", - "lodash-es": "^4.17.21", - "mem-fs-editor": "^11.0.1", - "minimist": "^1.2.8", - "read-package-up": "^11.0.0", - "semver": "^7.5.4", - "simple-git": "^3.20.0", - "sort-keys": "^5.0.0", - "text-table": "^0.2.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "peerDependencies": { - "@types/node": ">=18.18.5", - "@yeoman/types": "^1.1.1", - "mem-fs": "^4.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/yo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/yo/-/yo-6.0.0.tgz", - "integrity": "sha512-Sr8v70Y8rq7+nqyNvw/nvcA5X0LfHAKm7ePb74Sju/LmNJBCQj9D28eCfPCn7KznE/taR9FrPeY3Ntw6ezmJAg==", - "dev": true, - "hasInstallScript": true, - "license": "BSD-2-Clause", - "dependencies": { - "@yeoman/adapter": "^3.1.0", - "@yeoman/types": "^1.8.0", - "chalk": "^5.6.2", - "cli-list": "^1.0.0", - "configstore": "^7.1.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "fullname": "^5.0.0", - "global-agent": "^3.0.0", - "humanize-string": "^3.1.0", - "lodash": "^4.17.21", - "meow": "^14.0.0", - "npm-keyword": "^8.0.0", - "open": "^10.2.0", - "package-json": "^10.0.1", - "parse-help": "^2.0.0", - "read-package-up": "^12.0.0", - "root-check": "^2.0.0", - "sort-on": "^7.0.0", - "string-length": "^6.0.0", - "titleize": "^4.0.0", - "update-notifier": "^7.3.1", - "yeoman-character": "^2.0.0", - "yeoman-doctor": "^6.0.0", - "yeoman-environment": "^5.0.0", - "yosay": "^3.0.0" - }, - "bin": { - "yo": "lib/cli.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/yo/node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/yo/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/yo/node_modules/normalize-package-data": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", - "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^9.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/yo/node_modules/read-package-up": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", - "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.1", - "read-pkg": "^10.0.0", - "type-fest": "^5.2.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yo/node_modules/read-pkg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.0.0.tgz", - "integrity": "sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.4", - "normalize-package-data": "^8.0.0", - "parse-json": "^8.3.0", - "type-fest": "^5.2.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yo/node_modules/type-fest": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.3.tgz", - "integrity": "sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yosay": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yosay/-/yosay-3.0.0.tgz", - "integrity": "sha512-ydCeqln4hPSPMA1ggS0ZsUnrXxDaatbmtigxF+4R2h/y2USVTaOIIZFPXANeq7tkmHo2bLEK8eal2wmrFMiwYA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "ansi-regex": "^6.0.1", - "ansi-styles": "^6.2.1", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "meow": "^12.1.1", - "pad-component": "0.0.1", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^8.1.0" - }, - "bin": { - "yosay": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/yosay/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/yosay/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yosay/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yosay/node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yosay/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/yosay/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/yosay/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/prometeu-vscode/package.json b/prometeu-vscode/package.json deleted file mode 100644 index a93aba54..00000000 --- a/prometeu-vscode/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "prometeu-pbs", - "displayName": "Prometeu PBS", - "version": "0.0.1", - "publisher": "local", - "engines": { - "vscode": "^1.85.0" - }, - "main": "./out/extension.js", - "contributes": { - "languages": [ - { - "id": "pbs", - "aliases": [ - "PBS", - "Prometeu Base Script" - ], - "extensions": [ - ".pbs" - ], - "configuration": "./language-configuration.json" - } - ], - "configuration": { - "type": "object", - "title": "Prometeu PBS", - "properties": { - "prometeuPbs.serverPath": { - "type": "string", - "default": "", - "description": "/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/target/debug/prometeu-lsp --stdio" - } - } - } - }, - "dependencies": { - "vscode-languageclient": "^9.0.1" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "@types/vscode": "^1.85.0", - "generator-code": "^1.11.17", - "typescript": "^5.0.0", - "yo": "^6.0.0" - }, - "scripts": { - "compile": "tsc -p .", - "watch": "tsc -watch -p ." - } -} diff --git a/prometeu-vscode/settings.json b/prometeu-vscode/settings.json deleted file mode 100644 index eebc61ac..00000000 --- a/prometeu-vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "prometeuPbs.serverPath": "/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/target/debug/prometeu-lsp" -} diff --git a/prometeu-vscode/src/extension.ts b/prometeu-vscode/src/extension.ts deleted file mode 100644 index 164ed321..00000000 --- a/prometeu-vscode/src/extension.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as vscode from "vscode"; -import { LanguageClient, LanguageClientOptions, ServerOptions } from "vscode-languageclient/node"; - -let client: LanguageClient | undefined; - -export function activate(context: vscode.ExtensionContext) { - const cfg = vscode.workspace.getConfiguration("prometeuPbs"); - const serverPath = cfg.get("serverPath"); - - if (!serverPath) { - vscode.window.showErrorMessage( - "Prometeu PBS: configure 'prometeuPbs.serverPath' com o caminho do bin prometeu-lsp." - ); - return; - } - - const serverOptions: ServerOptions = { - command: serverPath, - args: [] - }; - - const clientOptions: LanguageClientOptions = { - documentSelector: [{ scheme: "file", language: "pbs" }] - }; - - client = new LanguageClient("prometeuPbsLsp", "Prometeu PBS LSP", serverOptions, clientOptions); - - // ✅ O client é “parável” no deactivate, não o start() Promise - context.subscriptions.push({ - dispose: () => { - void client?.stop(); - } - }); - - void client.start(); -} - -export function deactivate(): Thenable | undefined { - return client?.stop(); -} diff --git a/prometeu-vscode/tsconfig.json b/prometeu-vscode/tsconfig.json deleted file mode 100644 index 50264b3e..00000000 --- a/prometeu-vscode/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "outDir": "out", - "rootDir": "src", - "lib": ["ES2020"], - "sourceMap": true, - "strict": true - }, - "exclude": ["node_modules", ".vscode-test"] -}