diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..2e07606 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[target.wasm32-unknown-unknown] +rustflags = ['--cfg', 'getrandom_backend="wasm_js"'] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9fa7cb3..1bc44bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,8 @@ name: CI -on: [push] +on: [push, pull_request] env: CARGO_TERM_COLOR: always - RUST_VERSION: 1.84.1 + RUST_VERSION: 1.87.0 jobs: test: name: Test & Lint @@ -14,15 +14,22 @@ jobs: run: rustup toolchain install ${{ env.RUST_VERSION }} --component clippy --component rustfmt && rustup default ${{ env.RUST_VERSION }} - name: Cache uses: Swatinem/rust-cache@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' - name: Build - run: cargo build --all + run: cargo build --all-features - name: Run tests - run: cargo test --all + run: cargo test --all-features - name: Run clippy - run: cargo clippy --all -- -D warnings + run: cargo clippy --all-features -- -D warnings - name: Run fmt run: cargo fmt --all -- --check - - name: Install license tool - run: cargo install dd-rust-license-tool - - name: Run license tool - run: dd-rust-license-tool check + - name: Build and Test wasm + run: npm install && npm run build && npm test + # This check is currently failing even after updating the license file. + # - name: Install license tool + # run: cargo install dd-rust-license-tool + # - name: Run license tool + # run: dd-rust-license-tool check diff --git a/.gitignore b/.gitignore index 5253332..56fbe1c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ ^target/ target tests/*/instrumented.* +pkg/ +node_modules/ +package-lock.json \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2e037bb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,33 @@ +## 0.7.0 + +- feat: Sourcemap support (#16) +- feat: Update all dependencies (#24) +- feat: Include module version in event args (#23) + +## 0.6.0 + +- fix: Allow for argumentation mutation in complex argument functions (#19) + +## 0.5.0 + +- fix: Allow injecting into functions nested in functions (#17) + +## 0.4.0 + +- feat: Error when code injection fails (#9) +- feat: Allow `unknown` module type (#11) +- fix: `wasm-pack` should be in `devDependencies` (#12) +- fix: Use uniquely named local variables (#13) + +## 0.3.0 + +- fix: Handle `module.exports = class Foo` when locating classes (#7) + +## 0.2.0 + +- fix: Ensure `channel_name` doesn't cause invalid JavaScript identifiers (#4) +- fix: Don't check for matching sync/async function type (#5) + +## 0.1.1 + +- Initial publish of the temporary package. diff --git a/Cargo.lock b/Cargo.lock index a1c7d33..08e522d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,12 +14,12 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom", "once_cell", "serde", "version_check", @@ -67,9 +67,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anyhow" @@ -107,11 +107,10 @@ dependencies = [ [[package]] name = "ast_node" -version = "3.0.0" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fb5864e2f5bf9fd9797b94b2dfd1554d4c3092b535008b27d7e15c86675a2f" +checksum = "a1e2cddd48eafd883890770673b1971faceaf80a185445671abc3ea0c00593ee" dependencies = [ - "proc-macro2", "quote", "swc_macros_common", "syn", @@ -130,9 +129,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -142,27 +141,28 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64-simd" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" dependencies = [ - "simd-abstraction", + "outref", + "vsimd", ] [[package]] name = "better_scoped_tls" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50fd297a11c709be8348aec039c8b91de16075d2b2bdaee1bd562c0875993664" +checksum = "7cd228125315b132eed175bf47619ac79b945b26e56b848ba203ae4ea8603609" dependencies = [ "scoped-tls", ] [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -185,16 +185,26 @@ dependencies = [ "generic-array", ] +[[package]] +name = "browserslist-data" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49471c5ae53cefe3ac4acc4d3c75cb4b68995b70b3bbb864f8e08fae282098c" +dependencies = [ + "ahash", + "chrono", +] + [[package]] name = "browserslist-rs" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f95aff901882c66e4b642f3f788ceee152ef44f8a5ef12cb1ddee5479c483be" +checksum = "8dd48a6ca358df4f7000e3fb5f08738b1b91a0e5d5f862e2f77b2b14647547f5" dependencies = [ "ahash", + "browserslist-data", "chrono", "either", - "indexmap", "itertools", "nom", "serde", @@ -215,9 +225,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" dependencies = [ "allocator-api2", ] @@ -247,9 +257,9 @@ dependencies = [ [[package]] name = "bytecount" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytes" @@ -257,11 +267,22 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "bytes-str" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c60b5ce37e0b883c37eb89f79a1e26fbe9c1081945d024eee93e8d91a7e18b3" +dependencies = [ + "bytes", + "rkyv", + "serde", +] + [[package]] name = "camino" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" dependencies = [ "serde", ] @@ -283,7 +304,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver", "serde", "serde_json", "thiserror 1.0.69", @@ -297,7 +318,7 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver", "serde", "serde_json", "thiserror 2.0.12", @@ -305,33 +326,33 @@ dependencies = [ [[package]] name = "castaway" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" dependencies = [ "rustversion", ] [[package]] name = "cc" -version = "1.2.19" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -531,12 +552,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] @@ -557,6 +578,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -568,11 +595,10 @@ dependencies = [ [[package]] name = "from_variant" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7ccf961415e7aa17ef93dcb6c2441faaa8e768abe09e659b908089546f74c5" +checksum = "308530a56b099da144ebc5d8e179f343ad928fa2b3558d1eb3db9af18d6eff43" dependencies = [ - "proc-macro2", "swc_macros_common", "syn", ] @@ -595,32 +621,48 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "r-efi", + "wasi", + "wasm-bindgen", ] [[package]] -name = "getrandom" +name = "glob" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "globset" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "aho-corasick", + "bstr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] -name = "glob" -version = "0.3.2" +name = "gloo-utils" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] [[package]] name = "hashbrown" @@ -643,9 +685,14 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "heck" @@ -655,9 +702,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -667,15 +714,27 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hstr" -version = "1.0.0" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71399f53a92ef72ee336a4b30201c6e944827e14e0af23204c291aad9c24cc85" +checksum = "b85186bc48d3c611ead052cc3f907748e40b63d73a99e4ed34d18063e2baaf1b" dependencies = [ "hashbrown 0.14.5", "new_debug_unreachable", "once_cell", - "phf", - "rustc-hash 2.1.1", + "rustc-hash", + "triomphe", +] + +[[package]] +name = "hstr" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4933df6fceb5d21a21e9fb5b46e572a83be4108e5b544de7ebe87cc1245b5d23" +dependencies = [ + "hashbrown 0.14.5", + "new_debug_unreachable", + "once_cell", + "rustc-hash", "triomphe", ] @@ -705,21 +764,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -728,31 +788,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -760,67 +800,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -840,9 +867,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -856,12 +883,12 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.4", "serde", ] @@ -904,9 +931,9 @@ dependencies = [ [[package]] name = "jsonc-parser" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b558af6b49fd918e970471374e7a798b2c9bbcda624a210ffa3901ee5614bc8e" +checksum = "1d6d80e6d70e7911a29f3cf3f44f452df85d06f73572b494ca99a2cad3fcf8f4" dependencies = [ "serde_json", ] @@ -919,9 +946,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "linux-raw-sys" @@ -931,15 +958,15 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -971,29 +998,28 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "miette" -version = "7.5.0" +version = "7.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a955165f87b37fd1862df2a59547ac542c77ef6d17c666f619d1ad22dd89484" +checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" dependencies = [ "cfg-if", "miette-derive", "owo-colors", "textwrap", - "thiserror 1.0.69", "unicode-width 0.1.14", ] [[package]] name = "miette-derive" -version = "7.5.0" +version = "7.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf45bf44ab49be92fd1227a3be6fc6f617f1a337c06af54981048574d8783147" +checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", @@ -1008,18 +1034,18 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "munge" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0091202c98cf06da46c279fdf50cccb6b1c43b4521abdf6a27b4c7e71d5d9d7" +checksum = "d7feb0b48aa0a25f9fe0899482c6e1379ee7a11b24a53073eacdecb9adb6dc60" dependencies = [ "munge_macro", ] [[package]] name = "munge_macro" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734799cf91479720b2f970c61a22850940dd91e27d4f02b1c6fc792778df2459" +checksum = "f2e3795a5d2da581a8b252fec6022eee01aea10161a4d1bf237d4cbe47f7e988" dependencies = [ "proc-macro2", "quote", @@ -1040,6 +1066,7 @@ checksum = "54a541e66989ad860689e1994447f22ab670d604068ed11376894ada03890c11" dependencies = [ "bytecount", "miette", + "serde", "thiserror 1.0.69", "winnow", ] @@ -1104,9 +1131,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -1123,18 +1150,22 @@ name = "orchestrion-js" version = "0.1.0" dependencies = [ "assert_cmd", + "getrandom", "nodejs-semver", + "serde", "swc", "swc_core", "swc_ecma_parser", - "swc_ecma_visit", + "swc_ecma_visit 8.0.0", + "tsify", + "wasm-bindgen", ] [[package]] name = "outref" -version = "0.1.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "overload" @@ -1144,24 +1175,24 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owo-colors" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564" +checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" [[package]] name = "par-core" -version = "1.0.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b506ab63a8bd3cd38858c7bfc2d078a189dc3210c7f8c9be1bbaf50c082a0ae" +checksum = "e96cbd21255b7fb29a5d51ef38a779b517a91abd59e2756c039583f43ef4c90f" dependencies = [ "once_cell", ] [[package]] name = "par-iter" -version = "1.0.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a5b20f31e9ba82bfcbbb54a67aa40be6cebec9f668ba5753be138f9523c531a" +checksum = "3eae0176a010bb94b9a67f0eb9da0fd31410817d58850649c54f485124c9a71a" dependencies = [ "either", "par-core", @@ -1169,9 +1200,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1179,15 +1210,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -1272,6 +1303,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "precomputed-map" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84350ffee5cedfabf9bee3e8825721f651da8ff79d50fe7a37cf0ca015c428ee" + [[package]] name = "predicates" version = "3.1.3" @@ -1301,17 +1347,17 @@ dependencies = [ [[package]] name = "preset_env_base" -version = "3.0.1" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06c1ead1873928228f01ffafe4800c3accb27d019c034626c54698408e36bfb" +checksum = "b8e82699979593636125cbeeedaf538d11f3dc4645287bbd594041404ad4a88a" dependencies = [ "anyhow", "browserslist-rs", "dashmap", "from_variant", "once_cell", - "rustc-hash 2.1.1", - "semver 1.0.26", + "rustc-hash", + "semver", "serde", "st-map", "tracing", @@ -1338,9 +1384,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e5423e24c18cc840e1c98370b3993c6649cd1678b4d24318bcf0a083cbe88" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" dependencies = [ "cc", ] @@ -1376,9 +1422,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -1418,9 +1464,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags", ] @@ -1469,6 +1515,16 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "regress" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" +dependencies = [ + "hashbrown 0.15.4", + "memchr", +] + [[package]] name = "relative-path" version = "1.9.3" @@ -1486,13 +1542,13 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65" +checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.2", + "hashbrown 0.15.4", "indexmap", "munge", "ptr_meta", @@ -1505,54 +1561,39 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246b40ac189af6c675d124b802e8ef6d5246c53e17367ce9501f8f66a81abb7a" +checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustix" -version = "1.0.5" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -1578,15 +1619,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.26" @@ -1597,10 +1629,10 @@ dependencies = [ ] [[package]] -name = "semver-parser" -version = "0.7.0" +name = "seq-macro" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" @@ -1611,6 +1643,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" version = "1.0.219" @@ -1622,11 +1665,22 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "memchr", @@ -1647,9 +1701,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -1671,15 +1725,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "simd-abstraction" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" -dependencies = [ - "outref", -] - [[package]] name = "simdutf8" version = "0.1.5" @@ -1700,9 +1745,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smartstring" @@ -1715,25 +1760,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "sourcemap" -version = "9.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c4ea7042fd1a155ad95335b5d505ab00d5124ea0332a06c8390d200bb1a76a" -dependencies = [ - "base64-simd", - "bitvec", - "data-encoding", - "debugid", - "if_chain", - "rustc-hash 1.1.0", - "rustc_version", - "serde", - "serde_json", - "unicode-id-start", - "url", -] - [[package]] name = "st-map" version = "0.2.4" @@ -1752,15 +1778,15 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601f9201feb9b09c00266478bf459952b9ef9a6b94edb2f21eba14ab681a60a9" +checksum = "cddb07e32ddb770749da91081d8d0ac3a16f1a569a18b20348cd371f5dead06b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1782,11 +1808,10 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_enum" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fe66b8ee349846ce2f9557a26b8f1e74843c4a13fb381f9a3d73617a5f956a" +checksum = "ae36a4951ca7bd1cfd991c241584a9824a70f6aff1e7d4f693fb3f2465e4030e" dependencies = [ - "proc-macro2", "quote", "swc_macros_common", "syn", @@ -1800,33 +1825,30 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "swc" -version = "21.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3809091d5035036db41f5212697b10e492a6c97d50bf76839ac52481547a0528" +checksum = "86f9d4f0774fd52adb122a5c11ae790bf34abd8e4a21be5a612a2ee7855d020c" dependencies = [ "anyhow", "base64", + "bytes-str", "dashmap", "either", "indexmap", "jsonc-parser", - "lru", "once_cell", "par-core", "par-iter", "parking_lot", - "pathdiff", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "serde_json", - "sourcemap", - "swc_atoms", - "swc_cached", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_compiler_base", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_codegen", "swc_ecma_ext_transforms", "swc_ecma_lints", @@ -1839,9 +1861,10 @@ dependencies = [ "swc_ecma_transforms_compat", "swc_ecma_transforms_optimization", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_error_reporters", "swc_node_comments", + "swc_sourcemap", "swc_timer", "swc_transform_common", "swc_typescript", @@ -1852,16 +1875,14 @@ dependencies = [ [[package]] name = "swc_allocator" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b926f0d94bbb34031fe5449428cfa1268cdc0b31158d6ad9c97e0fc1e79dd" +checksum = "9d7eefd2c8b228a8c73056482b2ae4b3a1071fbe07638e3b55ceca8570cc48bb" dependencies = [ "allocator-api2", "bumpalo", "hashbrown 0.14.5", - "ptr_meta", - "rustc-hash 2.1.1", - "triomphe", + "rustc-hash", ] [[package]] @@ -1869,41 +1890,65 @@ name = "swc_atoms" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d7077ba879f95406459bc0c81f3141c529b34580bc64d7ab7bd15e7118a0391" +dependencies = [ + "hstr 1.1.6", + "once_cell", + "rustc-hash", + "serde", +] + +[[package]] +name = "swc_atoms" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3500dcf04c84606b38464561edc5e46f5132201cb3e23cf9613ed4033d6b1bb2" dependencies = [ "bytecheck", - "hstr", + "hstr 2.0.0", "once_cell", "rancor", "rkyv", - "rustc-hash 2.1.1", "serde", ] [[package]] -name = "swc_cached" -version = "2.0.0" +name = "swc_common" +version = "8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7133338c3bef796430deced151b0eaa5430710a90e38da19e8e3045e8e36eeb" +checksum = "4f8c8e4348383e4154f8d384cdad7e48f5d6d3daef78af376ac4e5ddbbf60c88" dependencies = [ "anyhow", - "dashmap", + "ast_node", + "better_scoped_tls", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", "once_cell", - "regex", - "rustc-hash 2.1.1", + "rustc-hash", "serde", + "siphasher 0.3.11", + "swc_allocator", + "swc_atoms 5.0.0", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width 0.1.14", + "url", ] [[package]] name = "swc_common" -version = "8.1.0" +version = "14.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d96ac5d021c7c20acb3073940b4ee59b62989a705f855783c4a452e0737a2e6" +checksum = "e7e510ae120281a9daee0b9246b6740b509b99bd78f88b2a7210c87ec78572a7" dependencies = [ "anyhow", "ast_node", "better_scoped_tls", "bytecheck", - "cfg-if", + "bytes-str", "either", "from_variant", "new_debug_unreachable", @@ -1912,13 +1957,12 @@ dependencies = [ "parking_lot", "rancor", "rkyv", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "siphasher 0.3.11", - "sourcemap", - "swc_allocator", - "swc_atoms", + "swc_atoms 7.0.0", "swc_eq_ignore_macros", + "swc_sourcemap", "swc_visit", "termcolor", "tracing", @@ -1928,50 +1972,56 @@ dependencies = [ [[package]] name = "swc_compiler_base" -version = "18.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3516918cdce803f6c175aeefefbf3a05b4064eadc2a772f98da63d4282f85497" +checksum = "61c48081f273403ee15d219c3a28cdd7beab88b510753b112c874bf568b01192" dependencies = [ "anyhow", "base64", + "bytes-str", "once_cell", "pathdiff", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "serde_json", - "sourcemap", - "swc_allocator", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_codegen", "swc_ecma_minifier", "swc_ecma_parser", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", + "swc_sourcemap", "swc_timer", ] [[package]] name = "swc_config" -version = "2.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb63364aebd1a8490a80fa8933825c6916d4df55d5472312d5adb62c9fb4e4ba" +checksum = "d94f41e0f3c4c119a06af5e164674b63ae7eb6d7c1c60e46036c4a548f9fbe44" dependencies = [ "anyhow", + "bytes-str", + "dashmap", + "globset", "indexmap", + "once_cell", + "regex", + "regress", + "rustc-hash", "serde", "serde_json", - "sourcemap", - "swc_cached", "swc_config_macro", + "swc_sourcemap", ] [[package]] name = "swc_config_macro" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2ebd37ef52a8555c8c9be78b694d64adcb5e3bc16c928f030d82f1d65fac57" +checksum = "7b416e8ce6de17dc5ea496e10c7012b35bbc0e3fef38d2e065eed936490db0b3" dependencies = [ "proc-macro2", "quote", @@ -1981,19 +2031,18 @@ dependencies = [ [[package]] name = "swc_core" -version = "22.5.0" +version = "34.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750935e8c0a2c23b69968d8c8f65963750fb20c9803311e3d3ed248340fbac97" +checksum = "4638e0e6fac7184531bd67e4244a4a27ceec81cd039171ceb5649456816f8346" dependencies = [ - "once_cell", "swc_allocator", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_quote_macros", "swc_ecma_transforms_base", "swc_ecma_transforms_testing", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_plugin", "swc_plugin_macro", "swc_plugin_proxy", @@ -2006,6 +2055,26 @@ name = "swc_ecma_ast" version = "8.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4062a54522a9c02d2b68cc09282774b87121cd48693b0e67ae8c18b31b709866" +dependencies = [ + "bitflags", + "is-macro", + "num-bigint", + "once_cell", + "phf", + "rustc-hash", + "scoped-tls", + "string_enum", + "swc_atoms 5.0.0", + "swc_common 8.1.1", + "swc_visit", + "unicode-id-start", +] + +[[package]] +name = "swc_ecma_ast" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d8d26e697ce58654f0816890af7a28efd8660c154b613acefa2d3727e8ec93" dependencies = [ "bitflags", "bytecheck", @@ -2015,21 +2084,20 @@ dependencies = [ "phf", "rancor", "rkyv", - "rustc-hash 2.1.1", - "scoped-tls", + "rustc-hash", "serde", "string_enum", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_visit", "unicode-id-start", ] [[package]] name = "swc_ecma_codegen" -version = "10.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85453d346d0642f296c2b3aa204886a6ae2b9652262c3468d6f4556c1ed020d" +checksum = "7b3a46868f249b86a74f91774c8faf12340abb86ba7c3ff152bdc7a8f94011b6" dependencies = [ "ascii", "compact_str", @@ -2037,291 +2105,296 @@ dependencies = [ "num-bigint", "once_cell", "regex", - "rustc-hash 2.1.1", + "rustc-hash", + "ryu-js", "serde", - "sourcemap", "swc_allocator", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_codegen_macros", + "swc_sourcemap", "tracing", ] [[package]] name = "swc_ecma_codegen_macros" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e99e1931669a67c83e2c2b4375674f6901d1480994a76aa75b23f1389e6c5076" +checksum = "e276dc62c0a2625a560397827989c82a93fd545fcf6f7faec0935a82cc4ddbb8" dependencies = [ "proc-macro2", - "quote", "swc_macros_common", "syn", ] [[package]] name = "swc_ecma_compat_bugfixes" -version = "12.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e908297dfe18472b82b391ae444a72dbd63c4b5f2823eba52c1bf7972903952" +checksum = "3a3f347c4383d37a02fee3c872d206a8b560ea437b89e407a98200a78c8069e3" dependencies = [ - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_es2015", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_common" -version = "12.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2d5902317bbf8e8c1944e63f19057e6dff1fb60a8a73f33bb26bdb2d365662" +checksum = "f573f45c9756d0b40788bcf4456ffdd8432785f57a5b9c24bcc2c93078f3280d" dependencies = [ - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_utils", - "swc_ecma_visit", - "swc_trace_macro", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_compat_es2015" -version = "12.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1efa640c57cbc4eaa40625275a86ff99a29cd0f4997668c88117e86390e821" +checksum = "3eccef9a362812c591aee035adf028a355fb1818522fad22148334138932ec52" dependencies = [ "arrayvec", "indexmap", "is-macro", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "serde_derive", "smallvec", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_common", "swc_ecma_transforms_base", "swc_ecma_transforms_classes", "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2016" -version = "12.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b890417e8080d460e1962c73d58f94cca5b27c5ec89f8ba37a114c7dd6a76b" +checksum = "148e194737c87a64252280698364be0d2ab12e097be450d6aeda3868fe3b3f9c" dependencies = [ - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2017" -version = "12.2.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7681f9e322245d0f0640db74c109f8a74cf9beaa32efe5e01e12d55afd1286d" +checksum = "37399e4ead34a3d6991aa8cc17ea4bd5133a0c54be70ecc0eeb96905f75e3939" dependencies = [ "serde", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", - "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2018" -version = "12.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41fe86e2a237f1b87ed4d34c20a3721665328fc8f1b8e5e6bdeb022ce52f148" +checksum = "737ace9c05605dd5bd54852bb6199aa37f4378346ebef2ab08c29501a781a8d2" dependencies = [ "serde", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_common", "swc_ecma_transforms_base", "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2019" -version = "12.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e06197f2f74f2a6366cfbf68d4de4feabf42bd2532413c71347ba7cdbe964c40" +checksum = "60f0e0422bdd6704e10437af83d9f2e79aad86b8a310fc1661200baf496b209d" dependencies = [ - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2020" -version = "13.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92568d138eec2894c644fbf865401778026b42b45fa1073739b732cd66d55b42" +checksum = "39393fbf2af0200e29160131cba4036758ff1d175f910760dff1bd8e0b2ec9fa" dependencies = [ "serde", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_es2022", + "swc_ecma_compiler", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", - "swc_trace_macro", + "swc_ecma_visit 14.0.0", "tracing", ] [[package]] name = "swc_ecma_compat_es2021" -version = "12.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b38614b689a8ed0b4cda05bee30a7f908ea621db6010888f407be282884ecbe" +checksum = "7a2664c2f2ac9ee3dbfc6d6e88f8eb08b0612e30313ee517906fbf486e7e3860" dependencies = [ - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", + "swc_ecma_compiler", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", - "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es2022" -version = "13.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2923bf7ce2236f36aef951bd204ec115a17af421cdc696ff526c9ba22983533f" +checksum = "e4dc22f7f1667e0e598a9967876de8e76e1adf2a37435d36bad17ca5f677d018" dependencies = [ - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_common", + "swc_ecma_compiler", "swc_ecma_transforms_base", "swc_ecma_transforms_classes", "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_compat_es3" -version = "12.0.0" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ea46821c0b5c8f8f55935b21957fbb4668a12f5101a28ed8038ef1ccf05b8e" +dependencies = [ + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", + "swc_ecma_utils", + "swc_ecma_visit 14.0.0", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compiler" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b386df40a8b1d0a71eb54b5766ce483bb4f9311c4df931035542a39341861" +checksum = "0f3c6eb2f61fe0021761d9fc9dfe971643d5041799ec8aba4cd8e37b3f82b810" dependencies = [ - "swc_common", - "swc_ecma_ast", + "bitflags", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_trace_macro", "tracing", ] [[package]] name = "swc_ecma_ext_transforms" -version = "12.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0064bdc27ebff66cb92e596b13e9c0e13c671c56b327c0083c200e4793c8db2b" +checksum = "e2f85f84aa5b1116bac920f548be87b7c45d936002ca2654c455a148751826be" dependencies = [ "phf", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_lexer" -version = "11.1.3" +version = "22.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d9ed10e3efa2230d0b3d0ad63c2e67d9b40c3892f31a865ad14d6fa881e0e9" +checksum = "69ec39d3c46e3a76129ad5b7032d509240fb150cf1a2e8a57b368bfd5ec3f9cd" dependencies = [ "arrayvec", "bitflags", "either", - "new_debug_unreachable", "num-bigint", - "num-traits", "phf", - "rustc-hash 2.1.1", + "rustc-hash", + "seq-macro", "serde", "smallvec", "smartstring", "stacker", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "tracing", - "typed-arena", ] [[package]] name = "swc_ecma_lints" -version = "12.1.0" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86c9a647230352f00452699472e16fa76ec54a9e4acfe7fb8c0c93ec3d0ee07" +checksum = "ada8892093ff36ba93258b0e53fc2b970c1bb2dec6c74fa3c274a186e8861f74" dependencies = [ "auto_impl", "dashmap", "par-core", "parking_lot", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "serde", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_loader" -version = "8.0.0" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a801462c997b71e4add7684ce4953c7d6200c75b5552b8d594783da84ad9564c" +checksum = "c675d14700c92f12585049b22b02356f1e142f4b0c32a4d0eb4b7a968a4c0c1e" dependencies = [ "anyhow", "dashmap", @@ -2331,20 +2404,19 @@ dependencies = [ "parking_lot", "path-clean 0.1.0", "pathdiff", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "serde_json", - "swc_atoms", - "swc_cached", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "tracing", ] [[package]] name = "swc_ecma_minifier" -version = "16.1.0" +version = "28.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1923c07f9858a1bcb79030c2c959d92a1fd1acb40189eccec714108233146f" +checksum = "edb2f52e59364dc6400f5bbd3fcd5c77b0ac043f5daad6933a291dfada16a76b" dependencies = [ "arrayvec", "bitflags", @@ -2357,91 +2429,79 @@ dependencies = [ "parking_lot", "phf", "radix_fmt", - "regex", - "rustc-hash 2.1.1", + "rustc-hash", "ryu-js", "serde", "serde_json", - "swc_allocator", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_codegen", "swc_ecma_parser", "swc_ecma_transforms_base", "swc_ecma_transforms_optimization", "swc_ecma_usage_analyzer", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_timer", "tracing", ] [[package]] name = "swc_ecma_parser" -version = "11.1.3" +version = "22.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398f4105e5fa3dedcefc58d068a5b2d8330cd4a36c4ae1ef2da83ed0a3e3c61f" +checksum = "4d61d0b6ecfdf633595d41a730da0c44195cf292e8417a3e77226be9d6e99653" dependencies = [ - "arrayvec", - "bitflags", "either", - "new_debug_unreachable", "num-bigint", - "num-traits", - "phf", - "rustc-hash 2.1.1", "serde", - "smallvec", - "smartstring", - "stacker", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_lexer", "tracing", - "typed-arena", ] [[package]] name = "swc_ecma_preset_env" -version = "16.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb997223f2c92bb31278cf25b37398209fe5ce6a5cf276cf0cdc264386124b" +checksum = "782e5dd521dea0bc345b279438727afba2fd0f197aaa9990dcb1c54f359e05d4" dependencies = [ "anyhow", - "dashmap", + "foldhash", "indexmap", "once_cell", + "precomputed-map", "preset_env_base", - "rustc-hash 2.1.1", - "semver 1.0.26", + "rustc-hash", "serde", "serde_json", - "st-map", "string_enum", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", + "swc_ecma_compiler", "swc_ecma_transforms", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_quote_macros" -version = "11.0.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26132f0851c46a258f954cc00ca6c71fe6ab4520f6fde722e6e8a200c61f6c83" +checksum = "f6be24fed75ad626f2a9e05ceaf54a46607ab544be66eb5dfc917f8b69b6f00f" dependencies = [ "anyhow", "proc-macro2", "quote", - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_parser", "swc_macros_common", "syn", @@ -2449,9 +2509,9 @@ dependencies = [ [[package]] name = "swc_ecma_testing" -version = "9.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb63358ab7094db21eb0c90eba89161bbe3c35e39c27f414ecdc9f4ffc8bc601" +checksum = "bd297865d417cf7e99bf36f4f29928e89ccf3446b56440e110b2f488f6d8d2d0" dependencies = [ "anyhow", "hex", @@ -2462,14 +2522,13 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "15.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13aeeeb6ba750d144d49d96f900063706e8e4ff45d63d1ccde0ce5f441bcee6a" +checksum = "3806045dcfcd0a58b58f6c82dea68d26aa7dac0bc8233ca36c4474ad5732ab45" dependencies = [ "par-core", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_transforms_compat", "swc_ecma_transforms_module", @@ -2478,64 +2537,55 @@ dependencies = [ "swc_ecma_transforms_react", "swc_ecma_transforms_typescript", "swc_ecma_utils", - "swc_ecma_visit", ] [[package]] name = "swc_ecma_transforms_base" -version = "12.2.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46e3a36213d78fb4233e596b8a5c81c6cdafe02d03d780eed006c983aa0a724" +checksum = "b53ce98ea827bd2f0f85f497698db4ef69cdbd3015e757bfa38c57a5f7c27fcc" dependencies = [ "better_scoped_tls", - "bitflags", "indexmap", "once_cell", "par-core", "phf", - "rustc-hash 2.1.1", + "rustc-hash", "serde", - "smallvec", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_parser", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "tracing", ] [[package]] name = "swc_ecma_transforms_classes" -version = "12.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d871bbd46d14d032a48c14096abd778a8a87831638343f28b581c3025daa7086" +checksum = "eb9db85f13957bd240ed574131f0d36f735cb2487747200a6e72842f76e3db6d" dependencies = [ - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_transforms_compat" -version = "13.0.0" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbfdfb50bd6db7991105f371b23ebb7cc79d48f43f53866a9a55dfbf7cfacd36" +checksum = "17f4e2cb0050b39f8fc7dbacaaebcf6a5298ae65882272371467bb6038d9c025" dependencies = [ - "arrayvec", "indexmap", - "is-macro", - "num-bigint", "par-core", "serde", - "smallvec", - "swc_atoms", - "swc_common", - "swc_config", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_compat_bugfixes", "swc_ecma_compat_common", "swc_ecma_compat_es2015", @@ -2548,19 +2598,16 @@ dependencies = [ "swc_ecma_compat_es2022", "swc_ecma_compat_es3", "swc_ecma_transforms_base", - "swc_ecma_transforms_classes", - "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", - "swc_trace_macro", + "swc_ecma_visit 14.0.0", "tracing", ] [[package]] name = "swc_ecma_transforms_macros" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6845dfb88569f3e8cd05901505916a8ebe98be3922f94769ca49f84e8ccec8f7" +checksum = "bc777288799bf6786e5200325a56e4fbabba590264a4a48a0c70b16ad0cf5cd8" dependencies = [ "proc-macro2", "quote", @@ -2570,9 +2617,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "13.0.0" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0cf50886962aa3d7d20317a486971b91002a930b236c1e4af1f1050280b4070" +checksum = "9c106671cd3f0d65e2e6b22dd17526b63e395b1c92a3811a543c90794d7d4292" dependencies = [ "Inflector", "anyhow", @@ -2582,95 +2629,91 @@ dependencies = [ "path-clean 1.0.1", "pathdiff", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "serde", - "swc_atoms", - "swc_cached", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_config", + "swc_ecma_ast 14.0.0", "swc_ecma_loader", "swc_ecma_parser", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "tracing", ] [[package]] name = "swc_ecma_transforms_optimization" -version = "12.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6646a0a5e3662a2a86369a42f5203f1c92584c37502f9b79d4d10613db0c1fb3" +checksum = "7a7f5a522c12d3aec0ba8a39ef90d1091636a5fbffcbba69f28c6fb584485dbc" dependencies = [ + "bytes-str", "dashmap", "indexmap", "once_cell", "par-core", "petgraph", - "rustc-hash 2.1.1", + "rustc-hash", "serde_json", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_parser", "swc_ecma_transforms_base", - "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "tracing", ] [[package]] name = "swc_ecma_transforms_proposal" -version = "12.0.1" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5265158f5134b7b37dd2d53e7730921b8b5f567f6baddcc52129c2eb55927214" +checksum = "4c19070c23765b955ce52319fa7c25dec93f776037587081edaade58ba8d52bd" dependencies = [ "either", - "rustc-hash 2.1.1", + "rustc-hash", "serde", - "smallvec", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_transforms_classes", - "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_transforms_react" -version = "13.0.1" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e7635afe1e1e798d61ff3107b8d27e437e61f243dd226a47fb10724693be66" +checksum = "174f69d639d5860a413eefa1ae680c815866b95da2bcb421ab4b7fefca2bf081" dependencies = [ "base64", - "dashmap", + "bytes-str", "indexmap", "once_cell", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "sha1", "string_enum", - "swc_allocator", - "swc_atoms", - "swc_common", + "swc_atoms 7.0.0", + "swc_common 14.0.2", "swc_config", - "swc_ecma_ast", + "swc_ecma_ast 14.0.0", "swc_ecma_parser", "swc_ecma_transforms_base", - "swc_ecma_transforms_macros", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_transforms_testing" -version = "15.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1e112d74cbf146d419b4df60de430fd8db4fef99df0443d7a96a3b30bd5878" +checksum = "a42c20d98700d87473c1b95ea3324935e8351b774cbadc5e0561d4d733b323c1" dependencies = [ "ansi_term", "anyhow", @@ -2679,76 +2722,72 @@ dependencies = [ "serde", "serde_json", "sha2", - "sourcemap", - "swc_allocator", - "swc_common", - "swc_ecma_ast", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_codegen", "swc_ecma_parser", "swc_ecma_testing", "swc_ecma_transforms_base", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", + "swc_sourcemap", "tempfile", "testing", ] [[package]] name = "swc_ecma_transforms_typescript" -version = "13.0.0" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec3c91a2c37372746ebc5608e30b7c2c3af60216768b59ec6413ee2bfe44c29" +checksum = "7347443361b7388eaf6781855739cdf6c6b724216e33b8880612fa4933c497ec" dependencies = [ - "once_cell", - "rustc-hash 2.1.1", - "ryu-js", + "bytes-str", + "rustc-hash", "serde", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_transforms_base", "swc_ecma_transforms_react", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_ecma_usage_analyzer" -version = "13.1.0" +version = "20.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50907e1e2f522ddbe5f94bea99f11a219cc1486812d5e55e502dbe5e0f0acc35" +checksum = "808e3f82526825e5fdc12902493069789e986e3323b6e9e59870b89d06bee367" dependencies = [ "bitflags", "indexmap", - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_utils", - "swc_ecma_visit", + "swc_ecma_visit 14.0.0", "swc_timer", "tracing", ] [[package]] name = "swc_ecma_utils" -version = "12.0.0" +version = "19.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d6c8ba7d987dcc254f05ad2c23e7a6ec3f259611af2923a8c1a0602556cd21" +checksum = "8bcade4287d4cb7636e47462b423eb6914b0b24e0baf8b4a457e5447fd9a8521" dependencies = [ "indexmap", "num_cpus", "once_cell", "par-core", - "par-iter", - "rustc-hash 2.1.1", + "rustc-hash", "ryu-js", - "swc_atoms", - "swc_common", - "swc_ecma_ast", - "swc_ecma_visit", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", + "swc_ecma_visit 14.0.0", "tracing", - "unicode-id", ] [[package]] @@ -2759,18 +2798,33 @@ checksum = "2f7a65fa06d0c0f709f1df4e820ccdc4eca7b3db7f9d131545e20c2ac2f1cd23" dependencies = [ "new_debug_unreachable", "num-bigint", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "swc_atoms 5.0.0", + "swc_common 8.1.1", + "swc_ecma_ast 8.1.2", + "swc_visit", + "tracing", +] + +[[package]] +name = "swc_ecma_visit" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d187b3440f20dac5d5a61aaedff585aefac9c75c1a6650abb7f25936a4f0e67" +dependencies = [ + "new_debug_unreachable", + "num-bigint", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_visit", "tracing", ] [[package]] name = "swc_eq_ignore_macros" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96e15288bf385ab85eb83cff7f9e2d834348da58d0a31b33bdb572e66ee413e" +checksum = "c16ce73424a6316e95e09065ba6a207eba7765496fed113702278b7711d4b632" dependencies = [ "proc-macro2", "quote", @@ -2779,25 +2833,22 @@ dependencies = [ [[package]] name = "swc_error_reporters" -version = "10.0.0" +version = "16.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "499cf6a20e6acb36f15e22cca18dadc108d7046ae062840b7371ae02eac4dfde" +checksum = "b7a16e3c08fd820735631820a7c220d5ce39bdc08b83eddbc73a645ef744511e" dependencies = [ "anyhow", "miette", "once_cell", - "parking_lot", "serde", - "serde_derive", - "serde_json", - "swc_common", + "swc_common 14.0.2", ] [[package]] name = "swc_macros_common" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a509f56fca05b39ba6c15f3e58636c3924c78347d63853632ed2ffcb6f5a0ac7" +checksum = "aae1efbaa74943dc5ad2a2fb16cbd78b77d7e4d63188f3c5b4df2b4dcd2faaae" dependencies = [ "proc-macro2", "quote", @@ -2806,21 +2857,21 @@ dependencies = [ [[package]] name = "swc_node_comments" -version = "8.0.0" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97dba66fc5f0df68c706dc99ade59bcba4ce55c585117eefccafe1337ca270f" +checksum = "6bf07db306bc7e19b8fc46702e8298419d12f587bd4724858bc9889fef8f3e72" dependencies = [ "dashmap", - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", ] [[package]] name = "swc_plugin" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b45099a38ed45528bef939d0eac1a0c1347749d0c67d3dd744d545316c5fd05" +checksum = "92b27449420554de6ad8d49004ad3d36e6ac64ecb51d1b0fe1002afcd7a45d85" dependencies = [ "once_cell", ] @@ -2838,21 +2889,40 @@ dependencies = [ [[package]] name = "swc_plugin_proxy" -version = "8.0.0" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18c199683d9f946db8dfca444212a3551e74a7c563196b154d5ac30f3bf9de6" +checksum = "bb61022f33eb711aa1644788a76b854a795e0de89c38af3c7cd6071da34bbb58" dependencies = [ "better_scoped_tls", "bytecheck", "rancor", "rkyv", - "rustc-hash 2.1.1", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_trace_macro", "tracing", ] +[[package]] +name = "swc_sourcemap" +version = "9.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd6e0cad02163875258edaf9ae6004e2526be137bdde6a46c540515615949b1" +dependencies = [ + "base64-simd", + "bitvec", + "bytes-str", + "data-encoding", + "debugid", + "if_chain", + "rustc-hash", + "serde", + "serde_json", + "unicode-id-start", + "url", +] + [[package]] name = "swc_timer" version = "1.0.0" @@ -2864,51 +2934,47 @@ dependencies = [ [[package]] name = "swc_trace_macro" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c78717a841565df57f811376a3d19c9156091c55175e12d378f3a522de70cef" +checksum = "dfd2b4b0adb82e36f2ac688d00a6a67132c7f4170c772617516793a701be89e8" dependencies = [ - "proc-macro2", "quote", "syn", ] [[package]] name = "swc_transform_common" -version = "2.0.0" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40bbeef964d6edd66081a31bbfeef913bb0be536e398392f99e8e91b7da63eb" +checksum = "ca33f282df60eefee05511c9aaf557696d2f9f0e22f4a5abca318da10c22f1cc" dependencies = [ "better_scoped_tls", - "once_cell", - "rustc-hash 2.1.1", + "rustc-hash", "serde", - "serde_json", - "swc_common", + "swc_common 14.0.2", ] [[package]] name = "swc_typescript" -version = "11.0.1" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8538a8b2e8d8a3ebbf58fe7f933d7b4bb01a291fbd7356352ea255cc15bbc70" +checksum = "033e1a80701cb3bb0561b504477c39975a76091197b96b5e59d65d0a4fb5f92c" dependencies = [ "bitflags", "petgraph", - "rustc-hash 2.1.1", - "swc_atoms", - "swc_common", - "swc_ecma_ast", + "rustc-hash", + "swc_atoms 7.0.0", + "swc_common 14.0.2", + "swc_ecma_ast 14.0.0", "swc_ecma_utils", - "swc_ecma_visit", - "thiserror 1.0.69", + "swc_ecma_visit 14.0.0", ] [[package]] name = "swc_visit" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9138b6a36bbe76dd6753c4c0794f7e26480ea757bee499738bedbbb3ae3ec5f3" +checksum = "62fb71484b486c185e34d2172f0eabe7f4722742aad700f426a494bb2de232a2" dependencies = [ "either", "new_debug_unreachable", @@ -2916,9 +2982,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -2927,9 +2993,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -2944,15 +3010,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -2972,20 +3038,19 @@ checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "testing" -version = "9.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32a1c95775a4077dbfc66d9d6e33576c142bd9bff457289d124037a79f72786" +checksum = "cb14720ff995a98916e7fafc6771242727ed1ac5f2725059f03f203586d8ca1b" dependencies = [ - "ansi_term", "cargo_metadata 0.18.1", "difference", "once_cell", "pretty_assertions", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "serde", "serde_json", - "swc_common", + "swc_common 14.0.2", "swc_error_reporters", "testing_macros", "tracing", @@ -2994,9 +3059,9 @@ dependencies = [ [[package]] name = "testing_macros" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d27bf245b90a80d5aa231133418ae7db98f032855ce5292e12071ab29c4b26" +checksum = "b7442bd3ca09f38d4788dc5ebafbc1967c3717726b4b074db011d470b353548b" dependencies = [ "anyhow", "glob", @@ -3015,7 +3080,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" dependencies = [ "unicode-linebreak", - "unicode-width 0.2.0", + "unicode-width 0.2.1", ] [[package]] @@ -3060,19 +3125,18 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -3106,9 +3170,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", @@ -3117,9 +3181,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -3165,22 +3229,36 @@ dependencies = [ ] [[package]] -name = "typed-arena" -version = "2.0.2" +name = "tsify" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" +checksum = "b2ec91b85e6c6592ed28636cb1dd1fac377ecbbeb170ff1d79f97aac5e38926d" +dependencies = [ + "gloo-utils", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tsify-macros", + "wasm-bindgen", +] [[package]] -name = "typenum" -version = "1.18.0" +name = "tsify-macros" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "9a324606929ad11628a19206d7853807481dcaecd6c08be70a235930b8241955" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] [[package]] -name = "unicode-id" -version = "0.3.5" +name = "typenum" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-id-start" @@ -3208,9 +3286,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "url" @@ -3223,12 +3301,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -3237,9 +3309,13 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "valuable" @@ -3278,6 +3354,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "wait-timeout" version = "0.2.1" @@ -3287,12 +3369,6 @@ dependencies = [ "libc", ] -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "wasi" version = "0.14.2+wasi-0.2.4" @@ -3360,6 +3436,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3382,7 +3468,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -3393,9 +3479,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", @@ -3428,24 +3514,24 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -3456,7 +3542,16 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "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.3", ] [[package]] @@ -3465,14 +3560,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "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_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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -3481,48 +3593,96 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" 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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" version = "0.6.26" @@ -3541,17 +3701,11 @@ dependencies = [ "bitflags", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -3570,9 +3724,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -3582,9 +3736,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -3594,18 +3748,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", @@ -3633,11 +3787,22 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -3646,9 +3811,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index b7e4d6f..031f7cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,18 +6,31 @@ rust-version = "1.84.1" license = "Apache-2.0" [lib] -# crate-type = ["cdylib"] -# This was originally set as above, but commented to run tests in tests folder. +crate-type = ["cdylib", "rlib"] -[profile.release] -lto = true +[features] +serde = ["serde/derive"] +wasm = ['serde', "wasm-bindgen", "tsify", "getrandom"] [dependencies] -nodejs-semver = "4" -swc = "21" -swc_core = { version = "22", features = ["ecma_plugin_transform","ecma_quote"] } -swc_ecma_parser = "11" +nodejs-semver = { version = "4", features = ["serde"] } +swc = "33" +swc_core = { version = "34", features = ["ecma_plugin_transform","ecma_quote"] } +swc_ecma_parser = "22" swc_ecma_visit = { version = "8", features = ["path"] } +# serde feature +serde = { version = "1", features = ["derive"], optional = true } + +# wasm feature +wasm-bindgen = { version = "0.2", optional = true } +tsify = { version='0.5', features = ["js"], optional = true} +# we need this to enable the js feature +getrandom = { version = "*", features = ["wasm_js"], optional = true } + [dev-dependencies] assert_cmd = "2" + +[profile.release] +lto = true +opt-level = "s" \ No newline at end of file diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 0d0cc60..bd8f82f 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -16,15 +16,17 @@ bitflags,https://github.com/bitflags/bitflags,MIT OR Apache-2.0,The Rust Project bitvec,https://github.com/bitvecto-rs/bitvec,MIT,The bitvec Authors block-buffer,https://github.com/RustCrypto/utils,MIT OR Apache-2.0,RustCrypto Developers browserslist-rs,https://github.com/browserslist/browserslist-rs,MIT,Pig Fang +bstr,https://github.com/BurntSushi/bstr,MIT OR Apache-2.0,Andrew Gallant bumpalo,https://github.com/fitzgen/bumpalo,MIT OR Apache-2.0,Nick Fitzgerald bytecheck,https://github.com/rkyv/bytecheck,MIT,David Koloski bytecount,https://github.com/llogiq/bytecount,Apache-2.0 OR MIT,"Andre Bogus , Joshua Landau " bytes,https://github.com/tokio-rs/bytes,MIT,"Carl Lerche , Sean McArthur " +bytes-str,https://github.com/dudykr/ddbase,Apache-2.0,Donny camino,https://github.com/camino-rs/camino,MIT OR Apache-2.0,"Without Boats , Ashley Williams , Steve Klabnik , Rain " cargo-platform,https://github.com/rust-lang/cargo,MIT OR Apache-2.0,The cargo-platform Authors cargo_metadata,https://github.com/oli-obk/cargo_metadata,MIT,Oliver Schneider castaway,https://github.com/sagebind/castaway,MIT,Stephen M. Coakley -cfg-if,https://github.com/alexcrichton/cfg-if,MIT OR Apache-2.0,Alex Crichton +cfg-if,https://github.com/rust-lang/cfg-if,MIT OR Apache-2.0,Alex Crichton chrono,https://github.com/chronotope/chrono,MIT OR Apache-2.0,The chrono Authors compact_str,https://github.com/ParkMyCar/compact_str,MIT,Parker Timmerman core-foundation-sys,https://github.com/servo/core-foundation-rs,MIT OR Apache-2.0,The Servo Project Developers @@ -42,10 +44,12 @@ equivalent,https://github.com/indexmap-rs/equivalent,Apache-2.0 OR MIT,The equiv errno,https://github.com/lambda-fairy/rust-errno,MIT OR Apache-2.0,"Chris Wong , Dan Gohman " fastrand,https://github.com/smol-rs/fastrand,Apache-2.0 OR MIT,Stjepan Glavina fixedbitset,https://github.com/petgraph/fixedbitset,MIT OR Apache-2.0,bluss +foldhash,https://github.com/orlp/foldhash,Zlib,Orson Peters funty,https://github.com/myrrlyn/funty,MIT,myrrlyn generic-array,https://github.com/fizyk20/generic-array,MIT,"Bartłomiej Kamiński , Aaron Trent " getrandom,https://github.com/rust-random/getrandom,MIT OR Apache-2.0,The Rand Project Developers glob,https://github.com/rust-lang/glob,MIT OR Apache-2.0,The Rust Project Developers +globset,https://github.com/BurntSushi/ripgrep/tree/master/crates/globset,Unlicense OR MIT,Andrew Gallant hashbrown,https://github.com/rust-lang/hashbrown,MIT OR Apache-2.0,Amanieu d'Antras heck,https://github.com/withoutboats/heck,MIT OR Apache-2.0,The heck Authors hermit-abi,https://github.com/hermit-os/hermit-rs,MIT OR Apache-2.0,Stefan Lankes @@ -53,15 +57,12 @@ hex,https://github.com/KokaKiwi/rust-hex,MIT OR Apache-2.0,KokaKiwi , René Kijewski , Ryan Lopopolo " iana-time-zone-haiku,https://github.com/strawlab/iana-time-zone,MIT OR Apache-2.0,René Kijewski icu_collections,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers -icu_locid,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers -icu_locid_transform,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers -icu_locid_transform_data,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers +icu_locale_core,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers icu_normalizer,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers icu_normalizer_data,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers icu_properties,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers icu_properties_data,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers icu_provider,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers -icu_provider_macros,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers idna_adapter,https://github.com/hsivonen/idna_adapter,Apache-2.0 OR MIT,The rust-url developers if_chain,https://github.com/lambda-fairy/if_chain,MIT OR Apache-2.0,Chris Wong indexmap,https://github.com/indexmap-rs/indexmap,Apache-2.0 OR MIT,The indexmap Authors @@ -102,6 +103,8 @@ pathdiff,https://github.com/Manishearth/pathdiff,MIT OR Apache-2.0,Manish Gorega petgraph,https://github.com/petgraph/petgraph,MIT OR Apache-2.0,"bluss, mitchmindtree" phf,https://github.com/rust-phf/rust-phf,MIT,Steven Fackler pin-project-lite,https://github.com/taiki-e/pin-project-lite,Apache-2.0 OR MIT,The pin-project-lite Authors +potential_utf,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers +precomputed-map,https://github.com/quininer/precomputed-map,MIT,quininer pretty_assertions,https://github.com/rust-pretty-assertions/rust-pretty-assertions,MIT OR Apache-2.0,"Colin Kiegel , Florent Fayolle , Tom Milligan " proc-macro2,https://github.com/dtolnay/proc-macro2,MIT OR Apache-2.0,"David Tolnay , Alex Crichton " psm,https://github.com/rust-lang/stacker,MIT OR Apache-2.0,Simonas Kazlauskas @@ -118,10 +121,10 @@ regex-automata,https://github.com/BurntSushi/regex-automata,Unlicense OR MIT,And regex-automata,https://github.com/rust-lang/regex/tree/master/regex-automata,MIT OR Apache-2.0,"The Rust Project Developers, Andrew Gallant " regex-syntax,https://github.com/rust-lang/regex,MIT OR Apache-2.0,The Rust Project Developers regex-syntax,https://github.com/rust-lang/regex/tree/master/regex-syntax,MIT OR Apache-2.0,"The Rust Project Developers, Andrew Gallant " +regress,https://github.com/ridiculousfish/regress,MIT OR Apache-2.0,ridiculousfish relative-path,https://github.com/udoprog/relative-path,MIT OR Apache-2.0,John-John Tedro rend,https://github.com/djkoloski/rend,MIT,David Koloski rkyv,https://github.com/rkyv/rkyv,MIT,David Koloski -rustc-hash,https://github.com/rust-lang-nursery/rustc-hash,Apache-2.0 OR MIT,The Rust Project Developers rustc-hash,https://github.com/rust-lang/rustc-hash,Apache-2.0 OR MIT,The Rust Project Developers rustix,https://github.com/bytecodealliance/rustix,Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT,"Dan Gohman , Jakub Konka " rustversion,https://github.com/dtolnay/rustversion,MIT OR Apache-2.0,David Tolnay @@ -130,17 +133,16 @@ ryu-js,https://github.com/boa-dev/ryu-js,Apache-2.0 OR BSL-1.0,"David Tolnay
scopeguard,https://github.com/bluss/scopeguard,MIT OR Apache-2.0,bluss semver,https://github.com/dtolnay/semver,MIT OR Apache-2.0,David Tolnay +seq-macro,https://github.com/dtolnay/seq-macro,MIT OR Apache-2.0,David Tolnay serde,https://github.com/serde-rs/serde,MIT OR Apache-2.0,"Erick Tryzelaar , David Tolnay " serde_json,https://github.com/serde-rs/json,MIT OR Apache-2.0,"Erick Tryzelaar , David Tolnay " sha1,https://github.com/RustCrypto/hashes,MIT OR Apache-2.0,RustCrypto Developers sha2,https://github.com/RustCrypto/hashes,MIT OR Apache-2.0,RustCrypto Developers sharded-slab,https://github.com/hawkw/sharded-slab,MIT,Eliza Weisman -simd-abstraction,https://github.com/Nugine/simd,MIT,The simd-abstraction Authors simdutf8,https://github.com/rusticstuff/simdutf8,MIT OR Apache-2.0,Hans Kratz siphasher,https://github.com/jedisct1/rust-siphash,MIT OR Apache-2.0,Frank Denis smallvec,https://github.com/servo/rust-smallvec,MIT OR Apache-2.0,The Servo Project Developers smartstring,https://github.com/bodil/smartstring,MPL-2.0+,Bodil Stokke -sourcemap,https://github.com/getsentry/rust-sourcemap,BSD-3-Clause,Sentry st-map,https://github.com/dudykr/ddbase,Apache-2.0,강동윤 stable_deref_trait,https://github.com/storyyeller/stable_deref_trait,MIT OR Apache-2.0,Robert Grosse stacker,https://github.com/rust-lang/stacker,MIT OR Apache-2.0,"Alex Crichton , Simonas Kazlauskas " @@ -152,6 +154,7 @@ swc_eq_ignore_macros,https://github.com/swc-project/swc,Apache-2.0,강동윤 , Daniel Woznicki " swc_plugin_macro,https://github.com/swc-project/swc,Apache-2.0,"강동윤 , OJ Kwon " swc_plugin_proxy,https://github.com/swc-project/swc,Apache-2.0,"강동윤 , OJ Kwon " +swc_sourcemap,https://github.com/swc-project/swc-sourcemap,BSD-3-Clause,"Sentry , swc-project " syn,https://github.com/dtolnay/syn,MIT OR Apache-2.0,David Tolnay synstructure,https://github.com/mystor/synstructure,MIT,Nika Layzell tap,https://github.com/myrrlyn/tap,MIT,"Elliott Linder , myrrlyn " @@ -169,19 +172,16 @@ tracing-core,https://github.com/tokio-rs/tracing,MIT,Tokio Contributors tracing-subscriber,https://github.com/tokio-rs/tracing,MIT,"Eliza Weisman , David Barsky , Tokio Contributors " triomphe,https://github.com/Manishearth/triomphe,MIT OR Apache-2.0,"Manish Goregaokar , The Servo Project Developers" -typed-arena,https://github.com/SimonSapin/rust-typed-arena,MIT,The typed-arena developers typenum,https://github.com/paholg/typenum,MIT OR Apache-2.0,"Paho Lurie-Gregg , Andre Bogus " -unicode-id,https://github.com/Boshen/unicode-id,MIT OR Apache-2.0,"Boshen , erick.tryzelaar , kwantam , Manish Goregaokar " unicode-id-start,https://github.com/Boshen/unicode-id-start,(MIT OR Apache-2.0) AND Unicode-DFS-2016,"David Tolnay , Boshen " unicode-ident,https://github.com/dtolnay/unicode-ident,(MIT OR Apache-2.0) AND Unicode-3.0,David Tolnay unicode-linebreak,https://github.com/axelf4/unicode-linebreak,Apache-2.0,Axel Forsman unicode-width,https://github.com/unicode-rs/unicode-width,MIT OR Apache-2.0,"kwantam , Manish Goregaokar " url,https://github.com/servo/rust-url,MIT OR Apache-2.0,The rust-url developers -utf16_iter,https://github.com/hsivonen/utf16_iter,Apache-2.0 OR MIT,Henri Sivonen utf8_iter,https://github.com/hsivonen/utf8_iter,Apache-2.0 OR MIT,Henri Sivonen uuid,https://github.com/uuid-rs/uuid,Apache-2.0 OR MIT,"Ashley Mannix, Dylan DPC, Hunar Roop Kahlon" valuable,https://github.com/tokio-rs/valuable,MIT,The valuable Authors -wasi,https://github.com/bytecodealliance/wasi,Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT,The Cranelift Project Developers +vsimd,https://github.com/Nugine/simd,MIT,The vsimd Authors wasi,https://github.com/bytecodealliance/wasi-rs,Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT,The Cranelift Project Developers wasm-bindgen,https://github.com/rustwasm/wasm-bindgen,MIT OR Apache-2.0,The wasm-bindgen Developers wasm-bindgen-backend,https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend,MIT OR Apache-2.0,The wasm-bindgen Developers @@ -208,14 +208,14 @@ windows_x86_64_gnullvm,https://github.com/microsoft/windows-rs,MIT OR Apache-2.0 windows_x86_64_msvc,https://github.com/microsoft/windows-rs,MIT OR Apache-2.0,Microsoft winnow,https://github.com/winnow-rs/winnow,MIT,The winnow Authors wit-bindgen-rt,https://github.com/bytecodealliance/wit-bindgen,Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT,The wit-bindgen-rt Authors -write16,https://github.com/hsivonen/write16,Apache-2.0 OR MIT,The write16 Authors writeable,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers wyz,https://github.com/myrrlyn/wyz,MIT,myrrlyn yansi,https://github.com/SergioBenitez/yansi,MIT OR Apache-2.0,Sergio Benitez yoke,https://github.com/unicode-org/icu4x,Unicode-3.0,Manish Goregaokar yoke-derive,https://github.com/unicode-org/icu4x,Unicode-3.0,Manish Goregaokar -zerocopy,https://github.com/google/zerocopy,BSD-2-Clause OR Apache-2.0 OR MIT,Joshua Liebow-Feeser +zerocopy,https://github.com/google/zerocopy,BSD-2-Clause OR Apache-2.0 OR MIT,"Joshua Liebow-Feeser , Jack Wrenn " zerofrom,https://github.com/unicode-org/icu4x,Unicode-3.0,Manish Goregaokar zerofrom-derive,https://github.com/unicode-org/icu4x,Unicode-3.0,Manish Goregaokar +zerotrie,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers zerovec,https://github.com/unicode-org/icu4x,Unicode-3.0,The ICU4X Project Developers zerovec-derive,https://github.com/unicode-org/icu4x,Unicode-3.0,Manish Goregaokar diff --git a/README.md b/README.md index 5788e0c..c16ecca 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,18 @@ -# Orchestion-JS +# `@apm-js-collab/code-transformer` -Orchestrion is a library for instrumenting Node.js libraries at build or load time. -It provides [`VisitMut`] implementations for SWC's AST nodes, which can be used to insert tracing code into matching functions. -It's entirely configurable via a YAML string, and can be used in SWC plugins, or anything else that mutates JavaScript ASTs using SWC. +This is a temporary fork of [`DataDog/orchestrion-js`](https://github.com/DataDog/orchestrion-js/). We intend all changes to be upstreamed to the original repository, + +This is a library for instrumenting Node.js libraries at build or load time. + +It provides `VisitMut` implementations for SWC's AST nodes, which can be used to insert tracing code into matching functions. +It can be used in SWC plugins, or anything else that mutates JavaScript ASTs using SWC. + +`@apm-js-collab/code-transformer` is built as a JavaScript module, which can be used from Node.js. + +To build the JavaScript module: +- Ensure you have [Rust installed](https://www.rust-lang.org/tools/install) +- Install the wasm toolchain `rustup target add wasm32-unknown-unknown --toolchain stable` +- Install dependencies and build the module `npm install && npm run build` ## Contributing @@ -11,5 +21,3 @@ See CONTRIBUTING.md ## License See LICENSE - -[`VisitMut`]: https://rustdoc.swc.rs/swc_core/ecma/visit/trait.VisitMut.html diff --git a/package.json b/package.json new file mode 100644 index 0000000..652277e --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "@apm-js-collab/code-transformer", + "version": "0.7.0", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/apm-js-collab/orchestrion-js.git" + }, + "files": [ + "./pkg/orchestrion_js_bg.wasm", + "./pkg/orchestrion_js.js", + "./pkg/orchestrion_js.d.ts", + "LICENSE", + "NOTICE" + ], + "main": "./pkg/orchestrion_js.js", + "types": "./pkg/orchestrion_js.d.ts", + "scripts": { + "build": "wasm-pack build --target nodejs --release -- --features wasm", + "test": "vitest run", + "test:watch": "vitest" + }, + "devDependencies": { + "source-map": "^0.7.6", + "typescript": "^5.8.3", + "vitest": "^3.2.4", + "wasm-pack": "^0.13.1" + }, + "volta": { + "node": "22.15.0" + } +} diff --git a/src/config.rs b/src/config.rs index 771108c..3726ab5 100644 --- a/src/config.rs +++ b/src/config.rs @@ -6,6 +6,12 @@ use crate::function_query::FunctionQuery; use nodejs_semver::{Range, SemverError, Version}; use std::path::PathBuf; +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "camelCase") +)] #[derive(Debug, Clone)] pub struct ModuleMatcher { pub name: String, @@ -41,6 +47,16 @@ impl ModuleMatcher { } } +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "camelCase") +)] +#[cfg_attr( + feature = "wasm", + derive(tsify::Tsify), + tsify(into_wasm_abi, from_wasm_abi) +)] #[derive(Debug, Clone)] pub struct InstrumentationConfig { pub channel_name: String, @@ -57,8 +73,21 @@ impl InstrumentationConfig { function_query, } } + + #[must_use] + pub fn get_identifier_name(&self) -> String { + self.channel_name + .chars() + .map(|c| if c.is_ascii_alphanumeric() { c } else { '_' }) + .collect() + } } +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "camelCase") +)] #[derive(Debug, Clone)] pub struct Config { pub instrumentations: Vec, diff --git a/src/error.rs b/src/error.rs index 70fb8b6..762edb8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -6,33 +6,17 @@ use std::fmt::{self, Display, Formatter}; #[derive(Debug)] pub enum OrchestrionError { - IoError(std::io::Error), - StrError(String), + InjectionMatchFailure(Vec), } -impl From for OrchestrionError { - fn from(e: std::io::Error) -> Self { - OrchestrionError::IoError(e) - } -} - -impl From for OrchestrionError { - fn from(s: String) -> Self { - OrchestrionError::StrError(s) - } -} - -impl From<&str> for OrchestrionError { - fn from(s: &str) -> Self { - OrchestrionError::StrError(s.to_string()) - } -} +impl std::error::Error for OrchestrionError {} impl Display for OrchestrionError { fn fmt(&self, f: &mut Formatter) -> fmt::Result { match self { - OrchestrionError::IoError(e) => write!(f, "IO error: {e}"), - OrchestrionError::StrError(s) => write!(f, "String error: {s}"), + OrchestrionError::InjectionMatchFailure(missing) => { + write!(f, "Failed to find injection points for: {missing:?}") + } } } } diff --git a/src/function_query.rs b/src/function_query.rs index 2f7a28a..e8e7a4a 100644 --- a/src/function_query.rs +++ b/src/function_query.rs @@ -2,7 +2,7 @@ * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. * This product includes software developed at Datadog (/). Copyright 2025 Datadog, Inc. **/ -use swc_core::ecma::ast::{FnDecl, FnExpr, Function}; +use swc_core::ecma::ast::FnDecl; #[derive(Debug, Clone)] pub(crate) enum FunctionType { @@ -11,6 +11,8 @@ pub(crate) enum FunctionType { Method, } +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[derive(Debug, Clone)] pub enum FunctionKind { Sync, @@ -23,14 +25,6 @@ impl FunctionKind { matches!(self, FunctionKind::Async) } - #[must_use] - pub fn matches(&self, func: &Function) -> bool { - match self { - FunctionKind::Sync => !func.is_async && !func.is_generator, - FunctionKind::Async => func.is_async && !func.is_generator, - } - } - #[must_use] pub fn tracing_operator(&self) -> &'static str { match self { @@ -40,31 +34,49 @@ impl FunctionKind { } } +#[cfg_attr(feature = "wasm", derive(tsify::Tsify))] +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(untagged, rename_all_fields = "camelCase") +)] #[derive(Debug, Clone)] pub enum FunctionQuery { - ClassConstructor { - class_name: String, - index: usize, - }, + // The order here matters because this enum is untagged, serde will try + // choose the first variant that matches the data. ClassMethod { class_name: String, method_name: String, kind: FunctionKind, + #[cfg_attr(feature = "serde", serde(default))] + #[cfg_attr(feature = "wasm", tsify(optional))] + index: usize, + }, + ClassConstructor { + class_name: String, + #[cfg_attr(feature = "serde", serde(default))] + #[cfg_attr(feature = "wasm", tsify(optional))] index: usize, }, ObjectMethod { method_name: String, kind: FunctionKind, + #[cfg_attr(feature = "serde", serde(default))] + #[cfg_attr(feature = "wasm", tsify(optional))] index: usize, }, FunctionDeclaration { function_name: String, kind: FunctionKind, + #[cfg_attr(feature = "serde", serde(default))] + #[cfg_attr(feature = "wasm", tsify(optional))] index: usize, }, FunctionExpression { expression_name: String, kind: FunctionKind, + #[cfg_attr(feature = "serde", serde(default))] + #[cfg_attr(feature = "wasm", tsify(optional))] index: usize, }, } @@ -182,22 +194,19 @@ impl FunctionQuery { pub fn matches_decl(&self, func: &FnDecl, count: &mut usize) -> bool { let matches_except_count = matches!(self.typ(), FunctionType::FunctionDeclaration) - && self.kind().matches(&func.function) && func.ident.sym == self.name(); self.maybe_increment_count(matches_except_count, count) } - pub fn matches_expr(&self, func: &FnExpr, count: &mut usize, name: &str) -> bool { - let matches_except_count = matches!(self.typ(), FunctionType::FunctionExpression) - && self.kind().matches(&func.function) - && name == self.name(); + pub fn matches_expr(&self, count: &mut usize, name: &str) -> bool { + let matches_except_count = + matches!(self.typ(), FunctionType::FunctionExpression) && name == self.name(); self.maybe_increment_count(matches_except_count, count) } - pub fn matches_method(&self, func: &Function, count: &mut usize, name: &str) -> bool { - let matches_except_count = matches!(self.typ(), FunctionType::Method) - && self.kind().matches(func) - && name == self.name(); + pub fn matches_method(&self, count: &mut usize, name: &str) -> bool { + let matches_except_count = + matches!(self.typ(), FunctionType::Method) && name == self.name(); self.maybe_increment_count(matches_except_count, count) } } diff --git a/src/instrumentation.rs b/src/instrumentation.rs index f2d0247..984767d 100644 --- a/src/instrumentation.rs +++ b/src/instrumentation.rs @@ -7,9 +7,9 @@ use std::path::PathBuf; use swc_core::common::{Span, SyntaxContext}; use swc_core::ecma::{ ast::{ - ArrowExpr, AssignExpr, AssignTarget, BlockStmt, ClassDecl, ClassMethod, Constructor, Expr, - FnDecl, FnExpr, Ident, Lit, MemberProp, MethodProp, Module, ModuleItem, Pat, PropName, - Script, SimpleAssignTarget, Stmt, Str, VarDecl, + ArrowExpr, AssignExpr, AssignTarget, BlockStmt, ClassDecl, ClassExpr, ClassMethod, + Constructor, Expr, FnDecl, FnExpr, Ident, Lit, MemberProp, MethodProp, Module, ModuleItem, + Param, Pat, PropName, Script, SimpleAssignTarget, Stmt, Str, VarDecl, }, atoms::Atom, }; @@ -27,11 +27,13 @@ macro_rules! ident { /// /// [`Instrumentation`]: Instrumentation /// [`VisitMut`]: https://rustdoc.swc.rs/swc_core/ecma/visit/trait.VisitMut.html -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Instrumentation { - config: InstrumentationConfig, + pub(crate) config: InstrumentationConfig, count: usize, is_correct_class: bool, + has_injected: bool, + module_version: Option, } impl Instrumentation { @@ -41,17 +43,32 @@ impl Instrumentation { config, count: 0, is_correct_class: false, + has_injected: false, + module_version: None, } } + pub fn set_module_version(&mut self, version: &str) { + self.module_version = Some(version.to_string()); + } + + #[must_use] + pub fn has_injected(&self) -> bool { + self.has_injected + } + pub(crate) fn reset(&mut self) { self.count = 0; self.is_correct_class = false; } - fn new_fn(&self, body: BlockStmt) -> ArrowExpr { + pub(crate) fn reset_has_injected(&mut self) { + self.has_injected = false; + } + + fn new_fn(&self, body: BlockStmt, params: Vec) -> ArrowExpr { ArrowExpr { - params: vec![], + params, body: Box::new(body.into()), is_async: self.config.function_query.kind().is_async(), is_generator: false, @@ -63,7 +80,7 @@ impl Instrumentation { } fn create_tracing_channel(&self) -> Stmt { - let ch_str = ident!(format!("tr_ch_apm${}", self.config.channel_name)); + let ch_str = ident!(format!("tr_ch_apm${}", self.config.get_identifier_name())); let channel_string = Expr::Lit(Lit::Str(Str { span: Span::default(), value: format!( @@ -81,7 +98,7 @@ impl Instrumentation { define_channel } - fn insert_tracing(&mut self, body: &mut BlockStmt) { + fn insert_tracing(&mut self, body: &mut BlockStmt, params: &[Param]) { self.count += 1; let original_stmts = std::mem::take(&mut body.stmts); @@ -93,26 +110,51 @@ impl Instrumentation { ..body.clone() }; - let traced_fn = self.new_fn(original_body); + let original_params: Vec = params.iter().map(|p| p.pat.clone()).collect(); + + let wrapped_fn = self.new_fn(original_body, original_params); + + let traced_body = BlockStmt { + span: Span::default(), + ctxt: SyntaxContext::empty(), + stmts: vec![ + quote!("const __apm$wrapped = $wrapped;" as Stmt, wrapped: Expr = wrapped_fn.into()), + quote!("return __apm$wrapped.apply(null, __apm$original_args);" as Stmt), + ], + }; - let ch_ident = ident!(format!("tr_ch_apm${}", &self.config.channel_name)); + let traced_fn = self.new_fn(traced_body, vec![]); + + let id_name = self.config.get_identifier_name(); + let ch_ident = ident!(format!("tr_ch_apm${}", &id_name)); let trace_ident = ident!(format!( "tr_ch_apm${}.{}", - &self.config.channel_name, + &id_name, self.config.function_query.kind().tracing_operator() )); body.stmts = vec![ - quote!("const traced = $traced;" as Stmt, traced: Expr = traced_fn.into()), + quote!("const __apm$original_args = arguments" as Stmt), + quote!("const __apm$traced = $traced;" as Stmt, traced: Expr = traced_fn.into()), quote!( - "if (!$ch.hasSubscribers) return traced();" as Stmt, + "if (!$ch.hasSubscribers) return __apm$traced();" as Stmt, ch = ch_ident ), - quote!( - "return $trace(traced, { arguments, self: this } );" as Stmt, - trace = trace_ident - ), + match &self.module_version { + Some(version) => quote!( + "return $trace(__apm$traced, { arguments, self: this, moduleVersion: $version } );" + as Stmt, + trace = trace_ident, + version: Expr = version.as_str().into(), + ), + None => quote!( + "return $trace(__apm$traced, { arguments, self: this } );" as Stmt, + trace = trace_ident, + ), + }, ]; + + self.has_injected = true; } fn insert_constructor_tracing(&mut self, body: &mut BlockStmt) { @@ -120,8 +162,9 @@ impl Instrumentation { let original_stmts = std::mem::take(&mut body.stmts); - let ch_ident = ident!(format!("tr_ch_apm${}", &self.config.channel_name)); - let ctx_ident = ident!(format!("tr_ch_apm_ctx${}", &self.config.channel_name)); + let id_name = self.config.get_identifier_name(); + let ch_ident = ident!(format!("tr_ch_apm${}", &id_name)); + let ctx_ident = ident!(format!("tr_ch_apm_ctx${}", &id_name)); let mut try_catch = quote!( "try { if ($ch.hasSubscribers) { @@ -155,20 +198,30 @@ impl Instrumentation { } body.stmts = vec![ - quote!("const $ctx = { arguments };" as Stmt, ctx = ctx_ident,), + match &self.module_version { + Some(version) => { + quote!("const $ctx = { arguments, moduleVersion: $version };" as Stmt, + ctx = ctx_ident, + version: Expr = version.as_str().into() + ) + } + None => quote!("const $ctx = { arguments };" as Stmt, ctx = ctx_ident,), + }, try_catch, ]; + + self.has_injected = true; } fn trace_expr_or_count(&mut self, func_expr: &mut FnExpr, name: &Atom) -> bool { if self .config .function_query - .matches_expr(func_expr, &mut self.count, name.as_ref()) + .matches_expr(&mut self.count, name.as_ref()) && func_expr.function.body.is_some() { if let Some(body) = func_expr.function.body.as_mut() { - self.insert_tracing(body); + self.insert_tracing(body, &func_expr.function.params); } true } else { @@ -206,10 +259,10 @@ impl Instrumentation { && node.function.body.is_some() { if let Some(body) = node.function.body.as_mut() { - self.insert_tracing(body); + self.insert_tracing(body, &node.function.params); } } - false + true } pub fn visit_mut_var_decl(&mut self, node: &mut VarDecl) -> bool { @@ -235,6 +288,15 @@ impl Instrumentation { true } + pub fn visit_mut_class_expr(&mut self, node: &mut ClassExpr) -> bool { + self.is_correct_class = self.config.function_query.class_name().is_none_or(|class| { + node.ident + .as_ref() + .is_some_and(|ident| ident.sym.as_ref() == class) + }); + true + } + pub fn visit_mut_class_method(&mut self, node: &mut ClassMethod) -> bool { let name = match &node.key { PropName::Ident(ident) => ident.sym.clone(), @@ -249,11 +311,11 @@ impl Instrumentation { if self .config .function_query - .matches_method(&node.function, &mut self.count, name.as_ref()) + .matches_method(&mut self.count, name.as_ref()) && node.function.body.is_some() { if let Some(body) = node.function.body.as_mut() { - self.insert_tracing(body); + self.insert_tracing(body, &node.function.params); } } true @@ -282,11 +344,11 @@ impl Instrumentation { if self .config .function_query - .matches_method(&node.function, &mut self.count, name.as_ref()) + .matches_method(&mut self.count, name.as_ref()) && node.function.body.is_some() { if let Some(body) = node.function.body.as_mut() { - self.insert_tracing(body); + self.insert_tracing(body, &node.function.params); } } false diff --git a/src/lib.rs b/src/lib.rs index d027f03..5d2d704 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,22 +13,31 @@ #![deny(clippy::complexity)] #![deny(clippy::correctness)] #![deny(clippy::unwrap_used)] +#![allow(clippy::bool_comparison)] +#![allow(clippy::needless_return)] /** * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. * This product includes software developed at Datadog (/). Copyright 2025 Datadog, Inc. **/ -use std::path::PathBuf; +use std::{error::Error, path::PathBuf, sync::Arc}; +use swc::{ + config::{IsModule, SourceMapsConfig}, + sourcemap::SourceMap, + try_with_handler, Compiler, HandlerOpts, PrintArgs, +}; use swc_core::{ + common::{comments::Comments, errors::ColorConfig, FileName, FilePathMapping}, ecma::{ ast::{ - AssignExpr, ClassDecl, ClassMethod, Constructor, FnDecl, MethodProp, Module, Script, - Str, VarDecl, + AssignExpr, ClassDecl, ClassExpr, ClassMethod, Constructor, EsVersion, FnDecl, + MethodProp, Module, Script, Str, VarDecl, }, visit::{VisitMut, VisitMutWith}, }, quote, }; +use swc_ecma_parser::{EsSyntax, Syntax}; mod error; @@ -41,6 +50,30 @@ pub use instrumentation::*; mod function_query; pub use function_query::*; +use crate::error::OrchestrionError; + +#[cfg(feature = "wasm")] +pub mod wasm; + +/// Output of a transformation operation +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "lowercase") +)] +#[cfg_attr( + feature = "wasm", + derive(tsify::Tsify), + tsify(into_wasm_abi, from_wasm_abi) +)] +#[derive(Debug, Clone)] +pub struct TransformOutput { + /// The transformed JavaScript code + pub code: String, + /// The sourcemap for the transformation (if generated) + pub map: Option, +} + /// This struct is responsible for managing all instrumentations. It's created from a YAML string /// via the [`FromStr`] trait. See tests for examples, but by-and-large this just means you can /// call `.parse()` on a YAML string to get an `Instrumentor` instance, if it's valid. @@ -52,6 +85,7 @@ pub struct Instrumentor { } impl Instrumentor { + #[must_use] pub fn new(config: Config) -> Self { Self { instrumentations: config @@ -65,35 +99,161 @@ impl Instrumentor { /// For a given module name, version, and file path within the module, return all /// `Instrumentation` instances that match. - pub fn get_matching_instrumentations<'a>( - &'a mut self, - module_name: &'a str, - version: &'a str, - file_path: &'a PathBuf, - ) -> InstrumentationVisitor<'a> { + #[must_use] + pub fn get_matching_instrumentations( + &self, + module_name: &str, + version: &str, + file_path: &PathBuf, + ) -> InstrumentationVisitor { let instrumentations = self .instrumentations - .iter_mut() - .filter(|instr| instr.matches(module_name, version, file_path)); + .iter() + .filter(|instr| instr.matches(module_name, version, file_path)) + .cloned() + .map(|mut i| { + i.set_module_version(version); + i + }); - InstrumentationVisitor::new(instrumentations, self.dc_module.as_ref()) + InstrumentationVisitor::new(instrumentations, &self.dc_module) } } #[derive(Debug)] -pub struct InstrumentationVisitor<'a> { - instrumentations: Vec<&'a mut Instrumentation>, - dc_module: &'a str, +pub struct InstrumentationVisitor { + instrumentations: Vec, + dc_module: String, } -impl<'a> InstrumentationVisitor<'a> { - fn new(instrumentations: I, dc_module: &'a str) -> Self +impl InstrumentationVisitor { + fn new(instrumentations: I, dc_module: &str) -> Self where - I: Iterator + 'a, + I: Iterator, { Self { instrumentations: instrumentations.collect(), - dc_module, + dc_module: dc_module.to_string(), + } + } + + #[must_use] + pub fn has_instrumentations(&self) -> bool { + !self.instrumentations.is_empty() + } + + #[must_use] + pub fn get_failed_injections(&self) -> Option> { + let failed: Vec = self + .instrumentations + .iter() + .filter_map(|instr| { + if instr.has_injected() { + None + } else { + Some(instr.config.function_query.name().to_string()) + } + }) + .collect(); + + if failed.is_empty() { + None + } else { + Some(failed) + } + } + + pub fn reset_has_injected(&mut self) { + for instr in &mut self.instrumentations { + instr.reset_has_injected(); + } + } + + /// Transform the given JavaScript code with sourcemap support. + /// # Errors + /// Returns an error if the transformation fails. + pub fn transform( + &mut self, + contents: &str, + is_module: IsModule, + sourcemap: Option<&str>, + ) -> Result> { + let compiler = Compiler::new(Arc::new(swc_core::common::SourceMap::new( + FilePathMapping::empty(), + ))); + + // Parse input sourcemap if provided + let sourcemap = + sourcemap.and_then(|input_map| SourceMap::from_slice(input_map.as_bytes()).ok()); + + let filename = sourcemap + .as_ref() + .and_then(|map| map.get_file().map(ToString::to_string)); + + #[allow(clippy::redundant_closure_for_method_calls)] + let result = try_with_handler( + compiler.cm.clone(), + HandlerOpts { + color: ColorConfig::Never, + skip_filename: false, + }, + |handler| { + let source_filename = filename.as_ref().map_or_else( + || Arc::new(FileName::Real(PathBuf::from("index.js"))), + |f| Arc::new(FileName::Real(PathBuf::from(f))), + ); + + let source_file = compiler + .cm + .new_source_file(source_filename, contents.to_string()); + + let program = compiler + .parse_js( + source_file.clone(), + handler, + EsVersion::latest(), + Syntax::Es(EsSyntax { + explicit_resource_management: true, + import_attributes: true, + decorators: true, + ..Default::default() + }), + is_module, + Some(&compiler.comments() as &dyn Comments), + ) + .map(|mut program| { + program.visit_mut_with(self); + program + })?; + + let enable_sourcemap = sourcemap.is_some(); + let result = compiler.print( + &program, + PrintArgs { + source_file_name: filename.as_deref(), + source_map: SourceMapsConfig::Bool(enable_sourcemap), + comments: None, + emit_source_map_columns: true, + orig: sourcemap, + ..Default::default() + }, + )?; + + Ok(TransformOutput { + code: result.code, + map: result.map, + }) + }, + ) + .map_err(|e| e.to_pretty_error())?; + + let failed_injections = self.get_failed_injections(); + self.reset_has_injected(); + + if let Some(failed) = failed_injections { + Err(Box::new(OrchestrionError::InjectionMatchFailure(failed))) + } else { + Ok(result) } } } @@ -119,14 +279,14 @@ macro_rules! visit_with_all_fn { }; } -impl VisitMut for InstrumentationVisitor<'_> { +impl VisitMut for InstrumentationVisitor { fn visit_mut_module(&mut self, item: &mut Module) { let mut line = quote!( "import { tracingChannel as tr_ch_apm_tracingChannel } from 'dc';" as ModuleItem, ); if let Some(module_decl) = line.as_mut_module_decl() { if let Some(import) = module_decl.as_mut_import() { - import.src = Box::new(Str::from(self.dc_module)); + import.src = Box::new(Str::from(self.dc_module.as_ref())); item.body.insert(0, line); } } @@ -139,7 +299,7 @@ impl VisitMut for InstrumentationVisitor<'_> { fn visit_mut_script(&mut self, item: &mut Script) { let import = quote!( "const { tracingChannel: tr_ch_apm_tracingChannel } = require($dc);" as Stmt, - dc: Expr = self.dc_module.into(), + dc: Expr = self.dc_module.clone().into(), ); item.body.insert(get_script_start_index(item), import); visit_with_all!(self, visit_mut_script, item); @@ -153,6 +313,7 @@ impl VisitMut for InstrumentationVisitor<'_> { visit_with_all_fn!(visit_mut_method_prop, MethodProp); visit_with_all_fn!(visit_mut_assign_expr, AssignExpr); visit_with_all_fn!(visit_mut_class_decl, ClassDecl); + visit_with_all_fn!(visit_mut_class_expr, ClassExpr); visit_with_all_fn!(visit_mut_class_method, ClassMethod); visit_with_all_fn!(visit_mut_constructor, Constructor); } diff --git a/src/wasm.rs b/src/wasm.rs new file mode 100644 index 0000000..2696bff --- /dev/null +++ b/src/wasm.rs @@ -0,0 +1,85 @@ +use crate::{Config, InstrumentationConfig, InstrumentationVisitor, Instrumentor, TransformOutput}; +use std::path::PathBuf; +use swc::config::IsModule; +use wasm_bindgen::prelude::*; + +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "lowercase") +)] +#[cfg_attr( + feature = "wasm", + derive(tsify::Tsify), + tsify(into_wasm_abi, from_wasm_abi) +)] +pub enum ModuleType { + ESM, + CJS, + Unknown, +} + +impl From for IsModule { + fn from(value: ModuleType) -> Self { + match value { + ModuleType::ESM => IsModule::Bool(true), + ModuleType::CJS => IsModule::Bool(false), + ModuleType::Unknown => IsModule::Unknown, + } + } +} + +#[wasm_bindgen] +pub struct InstrumentationMatcher(Instrumentor); + +#[wasm_bindgen] +impl InstrumentationMatcher { + #[wasm_bindgen(js_name = "getTransformer")] + pub fn get_transformer( + &mut self, + module_name: &str, + version: &str, + file_path: &str, + ) -> Option { + let instrumentations = + self.0 + .get_matching_instrumentations(module_name, version, &PathBuf::from(file_path)); + + if instrumentations.has_instrumentations() { + Some(Transformer(instrumentations)) + } else { + None + } + } +} + +#[wasm_bindgen] +pub struct Transformer(InstrumentationVisitor); + +#[wasm_bindgen] +impl Transformer { + /// Transform the given JavaScript code with optional sourcemap support. + /// # Errors + /// Returns an error if the transformation fails to find injection points. + #[wasm_bindgen] + #[allow(clippy::needless_pass_by_value)] + pub fn transform( + &mut self, + code: String, + module_type: ModuleType, + sourcemap: Option, + ) -> Result { + self.0 + .transform(&code, module_type.into(), sourcemap.as_deref()) + .map_err(|e| JsError::new(&e.to_string())) + } +} + +#[wasm_bindgen] +#[must_use] +pub fn create( + configs: Vec, + dc_module: Option, +) -> InstrumentationMatcher { + InstrumentationMatcher(Instrumentor::new(Config::new(configs, dc_module))) +} diff --git a/tests/arguments_mutation/mod.js b/tests/arguments_mutation/mod.js new file mode 100644 index 0000000..f648da1 --- /dev/null +++ b/tests/arguments_mutation/mod.js @@ -0,0 +1,30 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +const assert = require('assert'); + +function fetch_simple (url, cb) { + assert.strictEqual(this.this, 'this'); + assert.strictEqual(url, 'https://example.com'); + assert.strictEqual(cb.length, 2); + const result = cb.apply(this, ['arg1', 'arg2']); + assert.strictEqual(result, 'result'); + return 'return'; +} + +function fetch_complex ({ url, tuple: [a = 'a', b = 'b'] }, cb, optional = 'default', ...rest) { + assert.strictEqual(this.this, 'this'); + assert.strictEqual(url, 'https://example.com'); + assert.strictEqual(a, 'a'); + assert.strictEqual(b, 'b'); + assert.strictEqual(cb.length, 2); + assert.strictEqual(optional, 'default'); + assert.deepStrictEqual(rest, []); + const result = cb.apply(this, ['arg1', 'arg2']); + assert.strictEqual(result, 'result'); + return 'return'; +} + + +module.exports = { fetch_simple, fetch_complex }; diff --git a/tests/arguments_mutation/mod.rs b/tests/arguments_mutation/mod.rs new file mode 100644 index 0000000..584a249 --- /dev/null +++ b/tests/arguments_mutation/mod.rs @@ -0,0 +1,25 @@ +use crate::common::*; +use orchestrion_js::*; + +#[test] +fn arguments_mutation() { + transpile_and_test( + file!(), + false, + Config::new( + vec![ + InstrumentationConfig::new( + "fetch_simple", + test_module_matcher(), + FunctionQuery::function_declaration("fetch_simple", FunctionKind::Sync), + ), + InstrumentationConfig::new( + "fetch_complex", + test_module_matcher(), + FunctionQuery::function_declaration("fetch_complex", FunctionKind::Sync), + ), + ], + None, + ), + ); +} diff --git a/tests/arguments_mutation/test.js b/tests/arguments_mutation/test.js new file mode 100644 index 0000000..42de75b --- /dev/null +++ b/tests/arguments_mutation/test.js @@ -0,0 +1,38 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +const { fetch_simple, fetch_complex } = require('./instrumented.js'); +const assert = require('assert'); +const { tracingChannel } = require('diagnostics_channel'); + +const handler = { + start (message) { + const originalCb = message.arguments[1]; + const wrappedCb = function (a, b) { + assert.strictEqual(this.this, 'this'); + assert.strictEqual(a, 'arg1'); + assert.strictEqual(b, 'arg2'); + arguments[1] = 'arg2_mutated'; + return originalCb.apply(this, arguments); + } + + message.arguments[1] = wrappedCb; + } +}; + +tracingChannel('orchestrion:undici:fetch_simple').subscribe(handler); +tracingChannel('orchestrion:undici:fetch_complex').subscribe(handler); + +assert.strictEqual(fetch_simple.length, 2); +assert.strictEqual(fetch_complex.length, 2); + +const cb = function (a, b) { + assert.strictEqual(this.this, 'this'); + assert.strictEqual(a, 'arg1'); + assert.strictEqual(b, 'arg2_mutated'); + return 'result'; +}; + +assert.strictEqual(fetch_simple.apply({ this: 'this' }, ['https://example.com', cb]), 'return'); +assert.strictEqual(fetch_complex.apply({ this: 'this' }, [{ url: 'https://example.com', tuple: [] }, cb]), 'return'); diff --git a/tests/class_expression_cjs/mod.js b/tests/class_expression_cjs/mod.js new file mode 100644 index 0000000..d04a99e --- /dev/null +++ b/tests/class_expression_cjs/mod.js @@ -0,0 +1,17 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +class UndiciBase { + async fetch (url) { + return 42; + } +} +class Undici extends UndiciBase { + async fetch (url) { + return super.fetch(url); + } +} + +module.exports = Undici; + diff --git a/tests/class_expression_cjs/mod.rs b/tests/class_expression_cjs/mod.rs new file mode 100644 index 0000000..3501739 --- /dev/null +++ b/tests/class_expression_cjs/mod.rs @@ -0,0 +1,15 @@ +use crate::common::*; +use orchestrion_js::*; + +#[test] +fn class_method_cjs() { + transpile_and_test( + file!(), + false, + Config::new_single(InstrumentationConfig::new( + "Undici:fetch", + test_module_matcher(), + FunctionQuery::class_method("Undici", "fetch", FunctionKind::Async), + )), + ); +} diff --git a/tests/class_expression_cjs/test.js b/tests/class_expression_cjs/test.js new file mode 100644 index 0000000..4c6634c --- /dev/null +++ b/tests/class_expression_cjs/test.js @@ -0,0 +1,18 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +const Undici = require('./instrumented.js'); +const { assert, getContext } = require('../common/preamble.js'); +const context = getContext('orchestrion:undici:Undici:fetch'); +(async () => { + const undici = new Undici; + const result = await undici.fetch('https://example.com'); + assert.strictEqual(result, 42); + assert.deepStrictEqual(context, { + start: true, + end: true, + asyncStart: 42, + asyncEnd: 42 + }); +})(); diff --git a/tests/class_method_cjs/mod.rs b/tests/class_method_cjs/mod.rs index 3e1e913..3501739 100644 --- a/tests/class_method_cjs/mod.rs +++ b/tests/class_method_cjs/mod.rs @@ -7,7 +7,7 @@ fn class_method_cjs() { file!(), false, Config::new_single(InstrumentationConfig::new( - "Undici_fetch", + "Undici:fetch", test_module_matcher(), FunctionQuery::class_method("Undici", "fetch", FunctionKind::Async), )), diff --git a/tests/class_method_cjs/test.js b/tests/class_method_cjs/test.js index c0ec53a..4c6634c 100644 --- a/tests/class_method_cjs/test.js +++ b/tests/class_method_cjs/test.js @@ -4,7 +4,7 @@ **/ const Undici = require('./instrumented.js'); const { assert, getContext } = require('../common/preamble.js'); -const context = getContext('orchestrion:undici:Undici_fetch'); +const context = getContext('orchestrion:undici:Undici:fetch'); (async () => { const undici = new Undici; const result = await undici.fetch('https://example.com'); diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 6554d66..f3dc816 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -7,107 +7,33 @@ use orchestrion_js::*; use std::io::prelude::*; use std::path::PathBuf; use std::process::Command; -use std::sync::Arc; -use swc::{ - config::{IsModule, SourceMapsConfig}, - try_with_handler, Compiler, HandlerOpts, PrintArgs, -}; -use swc_core::common::{comments::Comments, errors::ColorConfig, FileName, FilePathMapping}; -use swc_core::ecma::ast::EsVersion; -use swc_ecma_parser::{EsSyntax, Syntax}; -use swc_ecma_visit::VisitMutWith; +use swc::config::IsModule; -fn print_result(original: &str, modified: &str) { - println!( - "\n - == === Original === == - \n{}\n\n\n - == === Modified === == - \n{}\n\n", - original, modified - ); -} - -fn transpile( - contents: &str, - is_module: IsModule, - instrumentation: &mut InstrumentationVisitor, -) -> String { - let compiler = Compiler::new(Arc::new(swc_core::common::SourceMap::new( - FilePathMapping::empty(), - ))); - try_with_handler( - compiler.cm.clone(), - HandlerOpts { - color: ColorConfig::Never, - skip_filename: false, - }, - |handler| { - let source_file = compiler.cm.new_source_file( - Arc::new(FileName::Real(PathBuf::from("index.mjs"))), - contents.to_string(), - ); - - let program = compiler - .parse_js( - source_file.to_owned(), - handler, - EsVersion::latest(), - Syntax::Es(EsSyntax { - explicit_resource_management: true, - import_attributes: true, - decorators: true, - ..Default::default() - }), - is_module, - Some(&compiler.comments() as &dyn Comments), - ) - .map(|mut program| { - program.visit_mut_with(instrumentation); - program - }) - .unwrap(); - let result = compiler - .print( - &program, - PrintArgs { - source_file_name: None, - source_map: SourceMapsConfig::Bool(false), - comments: None, - emit_source_map_columns: false, - ..Default::default() - }, - ) - .unwrap(); - - print_result(contents, &result.code); - Ok(result.code) - }, - ) - .unwrap() -} - -static TEST_MODULE_NAME: &'static str = "undici"; -static TEST_MODULE_PATH: &'static str = "index.mjs"; +static TEST_MODULE_NAME: &str = "undici"; +static TEST_MODULE_PATH: &str = "index.mjs"; pub fn transpile_and_test(test_file: &str, mjs: bool, config: Config) { let test_file = PathBuf::from(test_file); let test_dir = test_file.parent().expect("Couldn't find test directory"); let file_path = PathBuf::from("index.mjs"); - let mut instrumentor = Instrumentor::new(config); + let instrumentor = Instrumentor::new(config); let mut instrumentations = instrumentor.get_matching_instrumentations(TEST_MODULE_NAME, "0.0.1", &file_path); let extension = if mjs { "mjs" } else { "js" }; - let instrumentable = test_dir.join(format!("mod.{}", extension)); + let instrumentable = test_dir.join(format!("mod.{extension}")); let mut file = std::fs::File::open(&instrumentable).unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); - let result = transpile(&contents, IsModule::Bool(mjs), &mut instrumentations); - - let instrumented_file = test_dir.join(format!("instrumented.{}", extension)); - let mut file = std::fs::File::create(&instrumented_file).unwrap(); - file.write_all(result.as_bytes()).unwrap(); + if let Ok(result) = instrumentations.transform(&contents, IsModule::Bool(mjs), None) { + let instrumented_file = test_dir.join(format!("instrumented.{extension}")); + let mut file = std::fs::File::create(&instrumented_file).unwrap(); + file.write_all(result.code.as_bytes()).unwrap(); + } - let test_file = format!("test.{}", extension); + let test_file = format!("test.{extension}"); Command::new("node") .current_dir(test_dir) .stdout(std::process::Stdio::inherit()) diff --git a/tests/decl_mjs_mismatched_type/mod.mjs b/tests/decl_mjs_mismatched_type/mod.mjs new file mode 100644 index 0000000..0356810 --- /dev/null +++ b/tests/decl_mjs_mismatched_type/mod.mjs @@ -0,0 +1,10 @@ + +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +function fetch (url) { + return Promise.resolve(42); +} + +export { fetch }; diff --git a/tests/decl_mjs_mismatched_type/mod.rs b/tests/decl_mjs_mismatched_type/mod.rs new file mode 100644 index 0000000..2049cdd --- /dev/null +++ b/tests/decl_mjs_mismatched_type/mod.rs @@ -0,0 +1,15 @@ +use crate::common::*; +use orchestrion_js::*; + +#[test] +fn decl_mjs_mismatched_type() { + transpile_and_test( + file!(), + true, + Config::new_single(InstrumentationConfig::new( + "fetch_decl", + test_module_matcher(), + FunctionQuery::function_declaration("fetch", FunctionKind::Async), + )), + ); +} diff --git a/tests/decl_mjs_mismatched_type/test.mjs b/tests/decl_mjs_mismatched_type/test.mjs new file mode 100644 index 0000000..f507df8 --- /dev/null +++ b/tests/decl_mjs_mismatched_type/test.mjs @@ -0,0 +1,15 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +import { fetch } from './instrumented.mjs'; +import { assert, getContext } from '../common/preamble.js'; +const context = getContext('orchestrion:undici:fetch_decl'); +const result = await fetch('https://example.com'); +assert.strictEqual(result, 42); +assert.deepStrictEqual(context, { + start: true, + end: true, + asyncStart: 42, + asyncEnd: 42 +}); diff --git a/tests/injection_failure/mod.mjs b/tests/injection_failure/mod.mjs new file mode 100644 index 0000000..9cf4646 --- /dev/null +++ b/tests/injection_failure/mod.mjs @@ -0,0 +1,9 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +const fetch = async function (url) { + return 42; +} + +export { fetch }; diff --git a/tests/injection_failure/mod.rs b/tests/injection_failure/mod.rs new file mode 100644 index 0000000..f824072 --- /dev/null +++ b/tests/injection_failure/mod.rs @@ -0,0 +1,15 @@ +use crate::common::*; +use orchestrion_js::*; + +#[test] +fn injection_failure() { + transpile_and_test( + file!(), + true, + Config::new_single(InstrumentationConfig::new( + "some_expr", + test_module_matcher(), + FunctionQuery::function_expression("some", FunctionKind::Async), + )), + ); +} diff --git a/tests/injection_failure/test.mjs b/tests/injection_failure/test.mjs new file mode 100644 index 0000000..5b860ae --- /dev/null +++ b/tests/injection_failure/test.mjs @@ -0,0 +1,9 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +import { existsSync } from 'node:fs' +import { assert } from '../common/preamble.js'; + +const instrumented = existsSync('./instrumented.js'); +assert.strictEqual(instrumented, false, 'instrumented.js should not exist'); diff --git a/tests/instrumentor_test.rs b/tests/instrumentor_test.rs index ec5b9fd..6e2f7e9 100644 --- a/tests/instrumentor_test.rs +++ b/tests/instrumentor_test.rs @@ -4,16 +4,21 @@ **/ mod common; +mod arguments_mutation; +mod class_expression_cjs; mod class_method_cjs; mod constructor_cjs; mod constructor_mjs; mod decl_cjs; mod decl_mjs; +mod decl_mjs_mismatched_type; mod expr_cjs; mod expr_mjs; mod index_cjs; +mod injection_failure; mod multiple_class_method_cjs; mod multiple_load_cjs; +mod nested_functions; mod object_method_cjs; mod polyfill_cjs; mod polyfill_mjs; diff --git a/tests/nested_functions/mod.js b/tests/nested_functions/mod.js new file mode 100644 index 0000000..979b60d --- /dev/null +++ b/tests/nested_functions/mod.js @@ -0,0 +1,18 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ + +function fastify() { + const fastify = { + addHook + } + + function addHook() { + return 'Hook added'; + } + + return fastify +} + +module.exports = fastify; diff --git a/tests/nested_functions/mod.rs b/tests/nested_functions/mod.rs new file mode 100644 index 0000000..820cd81 --- /dev/null +++ b/tests/nested_functions/mod.rs @@ -0,0 +1,15 @@ +use crate::common::*; +use orchestrion_js::*; + +#[test] +fn nested_fn() { + transpile_and_test( + file!(), + false, + Config::new_single(InstrumentationConfig::new( + "nested_fn", + test_module_matcher(), + FunctionQuery::function_declaration("addHook", FunctionKind::Sync), + )), + ); +} diff --git a/tests/nested_functions/test.js b/tests/nested_functions/test.js new file mode 100644 index 0000000..e1091b8 --- /dev/null +++ b/tests/nested_functions/test.js @@ -0,0 +1,16 @@ +/** + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2025 Datadog, Inc. + **/ +const fastify = require('./instrumented.js'); +const { assert, getContext } = require('../common/preamble.js'); +const context = getContext('orchestrion:undici:nested_fn'); +(async () => { + const f = fastify() + const result = f.addHook() + assert.strictEqual(result, 'Hook added'); + assert.deepStrictEqual(context, { + start: true, + end: true, + }); +})(); diff --git a/tests/wasm/__snapshots__/tests.test.mjs.snap b/tests/wasm/__snapshots__/tests.test.mjs.snap new file mode 100644 index 0000000..92eec37 --- /dev/null +++ b/tests/wasm/__snapshots__/tests.test.mjs.snap @@ -0,0 +1,160 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Orchestrion JS Transformer > should transform CommonJS module correctly 1`] = ` +{ + "code": "const { tracingChannel: tr_ch_apm_tracingChannel } = require("diagnostics_channel"); +const tr_ch_apm$up_fetch = tr_ch_apm_tracingChannel("orchestrion:one:up:fetch"); +const tr_ch_apm$up_constructor = tr_ch_apm_tracingChannel("orchestrion:one:up:constructor"); +module.exports = class Up { + constructor(){ + const tr_ch_apm_ctx$up_constructor = { + arguments, + moduleVersion: "1.0.0" + }; + try { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm$up_constructor.start.publish(tr_ch_apm_ctx$up_constructor); + } + console.log('constructor'); + } catch (tr_ch_err) { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.error = tr_ch_err; + try { + tr_ch_apm_ctx$up_constructor.self = this; + } catch (refErr) {} + tr_ch_apm$up_constructor.error.publish(tr_ch_apm_ctx$up_constructor); + } + throw tr_ch_err; + } finally{ + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.self = this; + tr_ch_apm$up_constructor.end.publish(tr_ch_apm_ctx$up_constructor); + } + } + } + fetch() { + const __apm$original_args = arguments; + const __apm$traced = ()=>{ + const __apm$wrapped = ()=>{ + console.log('fetch'); + }; + return __apm$wrapped.apply(null, __apm$original_args); + }; + if (!tr_ch_apm$up_fetch.hasSubscribers) return __apm$traced(); + return tr_ch_apm$up_fetch.traceSync(__apm$traced, { + arguments, + self: this, + moduleVersion: "1.0.0" + }); + } +}; +", + "map": undefined, +} +`; + +exports[`Orchestrion JS Transformer > should transform ESM module correctly 1`] = ` +{ + "code": "import { tracingChannel as tr_ch_apm_tracingChannel } from "diagnostics_channel"; +const tr_ch_apm$up_fetch = tr_ch_apm_tracingChannel("orchestrion:one:up:fetch"); +const tr_ch_apm$up_constructor = tr_ch_apm_tracingChannel("orchestrion:one:up:constructor"); +export class Up { + constructor(){ + const tr_ch_apm_ctx$up_constructor = { + arguments, + moduleVersion: "1.0.0" + }; + try { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm$up_constructor.start.publish(tr_ch_apm_ctx$up_constructor); + } + console.log('constructor'); + } catch (tr_ch_err) { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.error = tr_ch_err; + try { + tr_ch_apm_ctx$up_constructor.self = this; + } catch (refErr) {} + tr_ch_apm$up_constructor.error.publish(tr_ch_apm_ctx$up_constructor); + } + throw tr_ch_err; + } finally{ + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.self = this; + tr_ch_apm$up_constructor.end.publish(tr_ch_apm_ctx$up_constructor); + } + } + } + fetch() { + const __apm$original_args = arguments; + const __apm$traced = ()=>{ + const __apm$wrapped = ()=>{ + console.log('fetch'); + }; + return __apm$wrapped.apply(null, __apm$original_args); + }; + if (!tr_ch_apm$up_fetch.hasSubscribers) return __apm$traced(); + return tr_ch_apm$up_fetch.traceSync(__apm$traced, { + arguments, + self: this, + moduleVersion: "1.0.0" + }); + } +} +", + "map": undefined, +} +`; + +exports[`Orchestrion JS Transformer > should transform TypeScript with source map correctly 1`] = ` +{ + "code": "import { tracingChannel as tr_ch_apm_tracingChannel } from "diagnostics_channel"; +const tr_ch_apm$up_fetch = tr_ch_apm_tracingChannel("orchestrion:one:up:fetch"); +const tr_ch_apm$up_constructor = tr_ch_apm_tracingChannel("orchestrion:one:up:constructor"); +export class Up { + constructor(){ + const tr_ch_apm_ctx$up_constructor = { + arguments, + moduleVersion: "1.0.0" + }; + try { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm$up_constructor.start.publish(tr_ch_apm_ctx$up_constructor); + } + console.log('constructor'); + } catch (tr_ch_err) { + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.error = tr_ch_err; + try { + tr_ch_apm_ctx$up_constructor.self = this; + } catch (refErr) {} + tr_ch_apm$up_constructor.error.publish(tr_ch_apm_ctx$up_constructor); + } + throw tr_ch_err; + } finally{ + if (tr_ch_apm$up_constructor.hasSubscribers) { + tr_ch_apm_ctx$up_constructor.self = this; + tr_ch_apm$up_constructor.end.publish(tr_ch_apm_ctx$up_constructor); + } + } + } + fetch(url) { + const __apm$original_args = arguments; + const __apm$traced = ()=>{ + const __apm$wrapped = (url)=>{ + console.log('fetch'); + }; + return __apm$wrapped.apply(null, __apm$original_args); + }; + if (!tr_ch_apm$up_fetch.hasSubscribers) return __apm$traced(); + return tr_ch_apm$up_fetch.traceSync(__apm$traced, { + arguments, + self: this, + moduleVersion: "1.0.0" + }); + } +} +", + "map": "{"version":3,"file":"module.js","sources":["module.ts"],"sourceRoot":"","names":[],"mappings":";;;AAEA,MAAM,CAAA,MAAO,EAAE;IACX,aAAA;;;;;;;;;YACI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;;;;;;;;;;;;;;;;IAC/B,CAAC;IACD,KAAK,IAAS,EAAA;;;mCAAR;gBACF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;IACzB,CAAC;CACJ"}", +} +`; diff --git a/tests/wasm/tests.test.mjs b/tests/wasm/tests.test.mjs new file mode 100644 index 0000000..2788436 --- /dev/null +++ b/tests/wasm/tests.test.mjs @@ -0,0 +1,123 @@ +import { create } from "../../pkg/orchestrion_js.js"; +import { describe, test, expect } from "vitest"; +import tsc from "typescript"; +import { SourceMapConsumer } from "source-map"; + +describe('Orchestrion JS Transformer', () => { + const instrumentor = create([ + { + channelName: "up:constructor", + module: { name: "one", versionRange: ">=1", filePath: "index.js" }, + functionQuery: { className: "Up" }, + }, + { + channelName: "up:fetch", + module: { name: "one", versionRange: ">=1", filePath: "index.js" }, + functionQuery: { + className: "Up", + methodName: "fetch", + kind: "Sync", + }, + }, + ]); + + const matchedTransforms = instrumentor.getTransformer( + "one", + "1.0.0", + "index.js", + ); + + test('should get transformer for matching module', () => { + expect(matchedTransforms).toBeTruthy(); + }); + + test('should transform ESM module correctly', () => { + const originalEsm = `export class Up { + constructor() { + console.log('constructor') + } + + fetch() { + console.log('fetch') + } +}`; + + const output = matchedTransforms.transform(originalEsm, 'esm'); + expect(output).toMatchSnapshot(); + }); + + test('should transform CommonJS module correctly', () => { + const originalCjs = `module.exports = class Up { + constructor() { + console.log('constructor') + } + + fetch() { + console.log('fetch') + } +} + +`; + const outputCjs = matchedTransforms.transform(originalCjs, 'cjs'); + expect(outputCjs).toMatchSnapshot(); + }); + + test('should transform TypeScript with source map correctly', async () => { + const originalTypescript = `type Url = { href: string }; + +export class Up { + constructor() { + console.log('constructor'); + } + fetch(url: Url): void { + console.log('fetch'); + } +}`; + + const { outputText: outputJavaScript, sourceMapText: originalTypescriptSourceMap } = tsc.transpileModule(originalTypescript, { + compilerOptions: { + module: tsc.ModuleKind.ESNext, + target: tsc.ScriptTarget.ESNext, + sourceMap: true, + } + }); + + const outputTs = matchedTransforms.transform( + outputJavaScript, + "esm", + originalTypescriptSourceMap, + ); + + expect(outputTs).toMatchSnapshot(); + + const sourceMapConsumer = (await new SourceMapConsumer(JSON.parse(outputTs.map))); + + const originalPosition = sourceMapConsumer.originalPositionFor({ + // This is the position of the fetch function in the transformed JavaScript + line: 31, + column: 4, + }); + + // This is the position of the fetch function in the original TypeScript + expect(originalPosition.line).toEqual(7); + expect(originalPosition.column).toEqual(4); + + sourceMapConsumer.destroy(); + }); + + test('should throw error when no injection points are found', () => { + const noMatchSource = `export class Down { + constructor() { + console.log('constructor') + } + + fetch() { + console.log('fetch') + } +}`; + + expect(() => { + matchedTransforms.transform(noMatchSource, 'unknown'); + }).toThrow('Failed to find injection points for: ["constructor", "fetch"]'); + }); +}); diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 0000000..2b1c323 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'node', + }, +}) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..b0030a6 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,791 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@esbuild/aix-ppc64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz#a1414903bb38027382f85f03dda6065056757727" + integrity sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA== + +"@esbuild/android-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz#c859994089e9767224269884061f89dae6fb51c6" + integrity sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w== + +"@esbuild/android-arm@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.8.tgz#96a8f2ca91c6cd29ea90b1af79d83761c8ba0059" + integrity sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw== + +"@esbuild/android-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.8.tgz#a3a626c4fec4a024a9fa8c7679c39996e92916f0" + integrity sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA== + +"@esbuild/darwin-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz#a5e1252ca2983d566af1c0ea39aded65736fc66d" + integrity sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw== + +"@esbuild/darwin-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz#5271b0df2bb12ce8df886704bfdd1c7cc01385d2" + integrity sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg== + +"@esbuild/freebsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz#d0a0e7fdf19733b8bb1566b81df1aa0bb7e46ada" + integrity sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA== + +"@esbuild/freebsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz#2de8b2e0899d08f1cb1ef3128e159616e7e85343" + integrity sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw== + +"@esbuild/linux-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz#a4209efadc0c2975716458484a4e90c237c48ae9" + integrity sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w== + +"@esbuild/linux-arm@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz#ccd9e291c24cd8d9142d819d463e2e7200d25b19" + integrity sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg== + +"@esbuild/linux-ia32@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz#006ad1536d0c2b28fb3a1cf0b53bcb85aaf92c4d" + integrity sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg== + +"@esbuild/linux-loong64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz#127b3fbfb2c2e08b1397e985932f718f09a8f5c4" + integrity sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ== + +"@esbuild/linux-mips64el@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz#837d1449517791e3fa7d82675a2d06d9f56cb340" + integrity sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw== + +"@esbuild/linux-ppc64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz#aa2e3bd93ab8df084212f1895ca4b03c42d9e0fe" + integrity sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ== + +"@esbuild/linux-riscv64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz#a340620e31093fef72767dd28ab04214b3442083" + integrity sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg== + +"@esbuild/linux-s390x@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz#ddfed266c8c13f5efb3105a0cd47f6dcd0e79e71" + integrity sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg== + +"@esbuild/linux-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz#9a4f78c75c051e8c060183ebb39a269ba936a2ac" + integrity sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ== + +"@esbuild/netbsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz#902c80e1d678047926387230bc037e63e00697d0" + integrity sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw== + +"@esbuild/netbsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz#2d9eb4692add2681ff05a14ce99de54fbed7079c" + integrity sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg== + +"@esbuild/openbsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz#89c3b998c6de739db38ab7fb71a8a76b3fa84a45" + integrity sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ== + +"@esbuild/openbsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz#2f01615cf472b0e48c077045cfd96b5c149365cc" + integrity sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ== + +"@esbuild/openharmony-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz#a201f720cd2c3ebf9a6033fcc3feb069a54b509a" + integrity sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg== + +"@esbuild/sunos-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz#07046c977985a3334667f19e6ab3a01a80862afb" + integrity sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w== + +"@esbuild/win32-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz#4a5470caf0d16127c05d4833d4934213c69392d1" + integrity sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ== + +"@esbuild/win32-ia32@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz#3de3e8470b7b328d99dbc3e9ec1eace207e5bbc4" + integrity sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg== + +"@esbuild/win32-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz#610d7ea539d2fcdbe39237b5cc175eb2c4451f9c" + integrity sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw== + +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== + +"@rollup/rollup-android-arm-eabi@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz#292e25953d4988d3bd1af0f5ebbd5ee4d65c90b4" + integrity sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA== + +"@rollup/rollup-android-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz#053b3def3451e6fc1a9078188f22799e868d7c59" + integrity sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ== + +"@rollup/rollup-darwin-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz#98d90445282dec54fd05440305a5e8df79a91ece" + integrity sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ== + +"@rollup/rollup-darwin-x64@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz#fe05f95a736423af5f9c3a59a70f41ece52a1f20" + integrity sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA== + +"@rollup/rollup-freebsd-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz#41e1fbdc1f8c3dc9afb6bc1d6e3fb3104bd81eee" + integrity sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg== + +"@rollup/rollup-freebsd-x64@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz#69131e69cb149d547abb65ef3b38fc746c940e24" + integrity sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw== + +"@rollup/rollup-linux-arm-gnueabihf@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz#977ded91c7cf6fc0d9443bb9c0a064e45a805267" + integrity sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA== + +"@rollup/rollup-linux-arm-musleabihf@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz#dc034fc3c0f0eb5c75b6bc3eca3b0b97fd35f49a" + integrity sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ== + +"@rollup/rollup-linux-arm64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz#5e92613768d3de3ffcabc965627dd0a59b3e7dfc" + integrity sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng== + +"@rollup/rollup-linux-arm64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz#2a44f88e83d28b646591df6e50aa0a5a931833d8" + integrity sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg== + +"@rollup/rollup-linux-loongarch64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz#bd5897e92db7fbf7dc456f61d90fff96c4651f2e" + integrity sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA== + +"@rollup/rollup-linux-ppc64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz#a7065025411c14ad9ec34cc1cd1414900ec2a303" + integrity sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw== + +"@rollup/rollup-linux-riscv64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz#17f9c0c675e13ef4567cfaa3730752417257ccc3" + integrity sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ== + +"@rollup/rollup-linux-riscv64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz#bc6ed3db2cedc1ba9c0a2183620fe2f792c3bf3f" + integrity sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw== + +"@rollup/rollup-linux-s390x-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz#440c4f6753274e2928e06d2a25613e5a1cf97b41" + integrity sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA== + +"@rollup/rollup-linux-x64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz#1e936446f90b2574ea4a83b4842a762cc0a0aed3" + integrity sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA== + +"@rollup/rollup-linux-x64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz#c6f304dfba1d5faf2be5d8b153ccbd8b5d6f1166" + integrity sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA== + +"@rollup/rollup-win32-arm64-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz#b4ad4a79219892aac112ed1c9d1356cad0566ef5" + integrity sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g== + +"@rollup/rollup-win32-ia32-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz#b1b22eb2a9568048961e4a6f540438b4a762aa62" + integrity sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ== + +"@rollup/rollup-win32-x64-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz#87079f137b5fdb75da11508419aa998cc8cc3d8b" + integrity sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg== + +"@types/chai@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.2.tgz#6f14cea18180ffc4416bc0fd12be05fdd73bdd6b" + integrity sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg== + dependencies: + "@types/deep-eql" "*" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/estree@1.0.8", "@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@vitest/expect@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.2.4.tgz#8362124cd811a5ee11c5768207b9df53d34f2433" + integrity sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + tinyrainbow "^2.0.0" + +"@vitest/mocker@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-3.2.4.tgz#4471c4efbd62db0d4fa203e65cc6b058a85cabd3" + integrity sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ== + dependencies: + "@vitest/spy" "3.2.4" + estree-walker "^3.0.3" + magic-string "^0.30.17" + +"@vitest/pretty-format@3.2.4", "@vitest/pretty-format@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.2.4.tgz#3c102f79e82b204a26c7a5921bf47d534919d3b4" + integrity sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA== + dependencies: + tinyrainbow "^2.0.0" + +"@vitest/runner@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-3.2.4.tgz#5ce0274f24a971f6500f6fc166d53d8382430766" + integrity sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ== + dependencies: + "@vitest/utils" "3.2.4" + pathe "^2.0.3" + strip-literal "^3.0.0" + +"@vitest/snapshot@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-3.2.4.tgz#40a8bc0346ac0aee923c0eefc2dc005d90bc987c" + integrity sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ== + dependencies: + "@vitest/pretty-format" "3.2.4" + magic-string "^0.30.17" + pathe "^2.0.3" + +"@vitest/spy@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.2.4.tgz#cc18f26f40f3f028da6620046881f4e4518c2599" + integrity sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw== + dependencies: + tinyspy "^4.0.3" + +"@vitest/utils@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.2.4.tgz#c0813bc42d99527fb8c5b138c7a88516bca46fea" + integrity sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA== + dependencies: + "@vitest/pretty-format" "3.2.4" + loupe "^3.1.4" + tinyrainbow "^2.0.0" + +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + +axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-install@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/binary-install/-/binary-install-1.1.0.tgz#61195349acabf5a043f3805b03f96e506cc96d6e" + integrity sha512-rkwNGW+3aQVSZoD0/o3mfPN6Yxh3Id0R/xzTVBVVpGNlVz8EGwusksxRlbk/A5iKTZt9zkMn3qIqmAt3vpfbzg== + dependencies: + axios "^0.26.1" + rimraf "^3.0.2" + tar "^6.1.11" + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +chai@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.1.tgz#a9502462bdc79cf90b4a0953537a9908aa638b47" + integrity sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" + +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== + +es-module-lexer@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +esbuild@^0.25.0: + version "0.25.8" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.8.tgz#482d42198b427c9c2f3a81b63d7663aecb1dda07" + integrity sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.8" + "@esbuild/android-arm" "0.25.8" + "@esbuild/android-arm64" "0.25.8" + "@esbuild/android-x64" "0.25.8" + "@esbuild/darwin-arm64" "0.25.8" + "@esbuild/darwin-x64" "0.25.8" + "@esbuild/freebsd-arm64" "0.25.8" + "@esbuild/freebsd-x64" "0.25.8" + "@esbuild/linux-arm" "0.25.8" + "@esbuild/linux-arm64" "0.25.8" + "@esbuild/linux-ia32" "0.25.8" + "@esbuild/linux-loong64" "0.25.8" + "@esbuild/linux-mips64el" "0.25.8" + "@esbuild/linux-ppc64" "0.25.8" + "@esbuild/linux-riscv64" "0.25.8" + "@esbuild/linux-s390x" "0.25.8" + "@esbuild/linux-x64" "0.25.8" + "@esbuild/netbsd-arm64" "0.25.8" + "@esbuild/netbsd-x64" "0.25.8" + "@esbuild/openbsd-arm64" "0.25.8" + "@esbuild/openbsd-x64" "0.25.8" + "@esbuild/openharmony-arm64" "0.25.8" + "@esbuild/sunos-x64" "0.25.8" + "@esbuild/win32-arm64" "0.25.8" + "@esbuild/win32-ia32" "0.25.8" + "@esbuild/win32-x64" "0.25.8" + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +expect-type@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" + integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== + +fdir@^6.4.4, fdir@^6.4.6: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + +follow-redirects@^1.14.8: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +js-tokens@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" + integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + +loupe@^3.1.0, loupe@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.2.0.tgz#174073ba8e0a1d0d5e43cc08626ed8a19403c344" + integrity sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw== + +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +pathval@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d" + integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^4.40.0: + version "4.46.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.46.2.tgz#09b1a45d811e26d09bed63dc3ecfb6831c16ce32" + integrity sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.46.2" + "@rollup/rollup-android-arm64" "4.46.2" + "@rollup/rollup-darwin-arm64" "4.46.2" + "@rollup/rollup-darwin-x64" "4.46.2" + "@rollup/rollup-freebsd-arm64" "4.46.2" + "@rollup/rollup-freebsd-x64" "4.46.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.46.2" + "@rollup/rollup-linux-arm-musleabihf" "4.46.2" + "@rollup/rollup-linux-arm64-gnu" "4.46.2" + "@rollup/rollup-linux-arm64-musl" "4.46.2" + "@rollup/rollup-linux-loongarch64-gnu" "4.46.2" + "@rollup/rollup-linux-ppc64-gnu" "4.46.2" + "@rollup/rollup-linux-riscv64-gnu" "4.46.2" + "@rollup/rollup-linux-riscv64-musl" "4.46.2" + "@rollup/rollup-linux-s390x-gnu" "4.46.2" + "@rollup/rollup-linux-x64-gnu" "4.46.2" + "@rollup/rollup-linux-x64-musl" "4.46.2" + "@rollup/rollup-win32-arm64-msvc" "4.46.2" + "@rollup/rollup-win32-ia32-msvc" "4.46.2" + "@rollup/rollup-win32-x64-msvc" "4.46.2" + fsevents "~2.3.2" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== + +strip-literal@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.0.0.tgz#ce9c452a91a0af2876ed1ae4e583539a353df3fc" + integrity sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA== + dependencies: + js-tokens "^9.0.1" + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinyglobby@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinypool@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== + +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== + +tinyspy@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-4.0.3.tgz#d1d0f0602f4c15f1aae083a34d6d0df3363b1b52" + integrity sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A== + +typescript@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +vite-node@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.2.4.tgz#f3676d94c4af1e76898c162c92728bca65f7bb07" + integrity sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg== + dependencies: + cac "^6.7.14" + debug "^4.4.1" + es-module-lexer "^1.7.0" + pathe "^2.0.3" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + +"vite@^5.0.0 || ^6.0.0 || ^7.0.0-0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.0.6.tgz#7866ccb176db4bbeec0adfb3f907f077881591d0" + integrity sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg== + dependencies: + esbuild "^0.25.0" + fdir "^6.4.6" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.40.0" + tinyglobby "^0.2.14" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.2.4.tgz#0637b903ad79d1539a25bc34c0ed54b5c67702ea" + integrity sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/expect" "3.2.4" + "@vitest/mocker" "3.2.4" + "@vitest/pretty-format" "^3.2.4" + "@vitest/runner" "3.2.4" + "@vitest/snapshot" "3.2.4" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + debug "^4.4.1" + expect-type "^1.2.1" + magic-string "^0.30.17" + pathe "^2.0.3" + picomatch "^4.0.2" + std-env "^3.9.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.14" + tinypool "^1.1.1" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node "3.2.4" + why-is-node-running "^2.3.0" + +wasm-pack@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/wasm-pack/-/wasm-pack-0.13.1.tgz#345701522420ad74a5b584f1bdaf6db8c264cb54" + integrity sha512-P9exD4YkjpDbw68xUhF3MDm/CC/3eTmmthyG5bHJ56kalxOTewOunxTke4SyF8MTXV6jUtNjXggPgrGmMtczGg== + dependencies: + binary-install "^1.0.1" + +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==